我有这个SML代码。我不知道为什么我不能编译这个:
fun score =
let
val sum = 3; (* error at this line : SYNTAX ERROR : inserting LPAREN *)
if sum div 2 > 0
then sum = 0
else sum = 1
(*some other code*)
in
sum (* I want to return sum after some steps of calculation *)
end
答案 0 :(得分:5)
您的代码存在的问题比jacobm指出的要多。
你也错过了一个函数参数。 SML中的函数总是带一个参数。例如
fun score () =
let val sum = 3
val sum = if sum div 2 > 0
then sum = 0
else sum = 1
in
sum
end
然而,这仍然没有多大意义。因为表达式sum = 0
和sum = 1
计算为布尔值。
let-expression用于创建一些仅在in ... end
部分内可见的局部声明。因此,你不应该用和计算的计算应该在in ... end
部分内完成,除非你不想把它表达为函数的一种方法。
一个这样的例子是
fun score () =
let val sum = 3
in
if sum div 2 > 0
then ...
else ...
end
如果我们看一下let-expression的语法,它可能更有意义
let
<declaration>
in
<expr> ; ... ; <expr>
end
因为if-then-else是一个表达式,所以它本身不能出现在“声明部分”中。
答案 1 :(得分:2)
该语法不合法 - 在let
和in
之间,您可以获得的是一系列val name = expr
个片段。但是你可以这样做:
fun score =
let val sum = 3
val sum = if sum div 2 > 0
then sum = 0
else sum = 1
in
sum
end
对于两个变量名称使用sum
,我认为这有点奇怪,但它是合法的。