Синтаксис на этом языке запутан.заявление о печати, вызывающее ошибку?
fun bar a =
print (Int.toString a);
0
компилируется. Не знаю, почему emacs откладывает 0.
fun bar a =
print (Int.toString a)
0
Выдает сообщение об ошибке.
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
компилируется.
fun foo a =
if a < 0
then
print (Int.toString a);
0
else
0
выдает сообщение об ошибке.
syntax error: replacing SEMICOLON with EQUALOP
Wat?
Я не могу понять это.
Часть путаницы может быть прослежена так, как некоторые стандартные книги, такие как Ульман, склонны злоупотреблять точкой с запятой. Легко получить впечатление, что точки с запятой являются в первую очередь терминаторами, а не разделителями. –
Есть ли способ использовать оператор печати в качестве последнего оператора в ветке if/else, а не return() из этой ветви? Этот язык выглядит как корсет ... –
@lotolmencre 'if true then print (" foo ") else()'. Операция 'print' уже является функцией единицы. Вы всегда можете обернуть это другой функцией 'fun printIfTrue (test, val) = if test then print (val) else()'. – eatonphil