12 Stimmen

Wie druckt man innerhalb einer case-Anweisung in SML?

Ich fange gerade mit SML an und versuche, etwas Code zu ändern, damit ich verstehe, was er tut (ich kann keinen anständigen SML/NJ-Debugger finden, aber das ist eine andere Frage).

fun type_check e theta env non_gens = 
  case e of
    constant_int _  => (integer, theta) 
  | constant_bool _ => (boolean, theta) 
  | ...

Gehen Sie davon aus, dass dies gültiger Code ist, der constant_int Teil eines bereits deklarierten Datentyps ist, usw. Wie füge ich eine Druckanweisung hinzu, die besagt, dass 'Returning "integer"' in den Fall eingefügt wird? Ich habe es versucht:

...
constant_int _ => (print "returning integer") (integer, theta)
...

Aber ich verstehe:

    stdIn:167.22-167.65 Error: operator is not a function \[tycon mismatch\]
      operator: unit
      in expression:
        (print "returning integer") (integer,theta)

Ich glaube, ich verstehe einfach nicht, wie man eine Folge von Anweisungen ausführt, von denen nur die letzte als Rückgabewert behandelt werden soll. Irgendein Rat?

Außerdem, wie würde ich meinen eigenen Datentypwert drucken? SML mochte es nicht, wenn ich versuchte, einen Datentypwert in print() Ich muss also wahrscheinlich eine neue Druckfunktion für jeden Datentyp erstellen, ist das richtig?

23voto

newacct Punkte 114757

Sie können "eine Folge von Anweisungen ausführen, von denen nur die letzte als Rückgabewert behandelt werden soll", indem Sie Semikolons verwenden.

...
constant_int _ => ( print "returning integer"; (integer,theta) )
...

In diesem Fall musste die Anweisungsfolge in Klammern eingeschlossen werden, da das Semikolon eine niedrigere Priorität hat als der Fall-Ausdruck. Ohne die Klammern würde das Programm also denken, dass der Fall-Ausdruck am Semikolon endet und dass der gesamte Fall-Ausdruck Teil der Folge ist, was in diesem Fall nicht erwünscht ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X