Die Syntax in dieser Sprache ist verwirrend.Druckanweisung verursacht Fehler?
fun bar a =
print (Int.toString a);
0
kompiliert. Keine Ahnung, warum Emacs die 0 indentiert.
fun bar a =
print (Int.toString a)
0
Wirft einen Fehler.
Error: operator is not a function [tycon mismatch]
operator: unit
in expression:
(print (Int.toString a)) 0
fun foo a =
if a < 0
then
0
else
0
kompiliert.
fun foo a =
if a < 0
then
print (Int.toString a);
0
else
0
gibt einen Fehler aus.
syntax error: replacing SEMICOLON with EQUALOP
Wat?
Ich kann keinen Sinn davon machen.
Ein Teil der Verwirrung könnte auf die Art und Weise zurückzuführen sein, in der einige der Standardbücher wie Ullman dazu neigen, Semikola zu überstrapazieren. Es ist leicht, den Eindruck zu bekommen, dass Semikolons in erster Linie Terminatoren und nicht Begrenzer sind. –
Gibt es eine Möglichkeit, die print-Anweisung als letzte Anweisung in einem if/else-Zweig zu verwenden und nicht return() von diesem Zweig? Diese Sprache fühlt sich an wie ein Korsett ... –
@lotolmencre 'wenn wahr dann drucke (" foo ") else()'. Die 'print'-Anweisung ist bereits eine Einheitsfunktion. Du könntest das immer mit einer anderen Funktion umschließen: fun printIfTrue (test, val) = wenn test dann print (val) else() '. – eatonphil