2012-04-03 7 views
1

Ich schreibe einen einfachen abstrakten Datentyp für Brüche und Ich kann nicht sogar den Konstruktor zu arbeiten, ich bin nur sehr auf SML-Syntax verloren.SML: Erstellen von abstrakten Datentypen

signature fracs = sig 

type fraction 

exception zero_denominator 

(* constructor *) 
val // : int * int -> fraction 

/*******************************************************************************************************************************************/ 

das ist die .sig-Datei, die den Konstruktor zeigt, den ich implementiere. Hier ist was ich bisher habe. der Fehler, den ich erhalte, ist, dass ich int * int * -> int mache, wenn ich int * int-> Bruch haben will. Ich weiß, was es sagt und alles, aber ich kann es einfach nicht passieren lassen.

structure fracs :> fracs = struct 

abstype fraction = frac of int * int 
with 

exception zero_denominator; 
(**********************************) 

(*constructor*) 
infix 8 //; 

fun num // den = if den = 0 then raise zero_denominator 

else 
    num * den; 

end;(*end ADT*) 

end;(*end struct*) 

Antwort

2

In Funktionssignatur, A * B bedeutet ein Tupel mit zwei Elementen von Typen A und B. In der Implementierung bedeutet A * B jedoch die Multiplikation zwischen zwei ganzen Zahlen.

Was Sie wollen, ist ein fraction Wert von zwei ganzen Zahlen zu machen:

fun num // den = 
    if den = 0 then raise zero_denominator else frac(num, den) 
+0

Oh! Ich sehe, vielen Dank! – user1309382

Verwandte Themen