我有这个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
Run Code Online (Sandbox Code Playgroud)
与jacobm指出的相比,您的代码存在更多问题.
你也错过了一个函数参数.SML中的函数总是带一个参数.例如
fun score () =
let val sum = 3
val sum = if sum div 2 > 0
then sum = 0
else sum = 1
in
sum
end
Run Code Online (Sandbox Code Playgroud)
然而,这仍然没有多大意义.因为表达式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
Run Code Online (Sandbox Code Playgroud)
如果我们看一下let-expression的语法,它可能更有意义
let
<declaration>
in
<expr> ; ... ; <expr>
end
Run Code Online (Sandbox Code Playgroud)
因为if-then-else是一个表达式,所以它本身不能出现在"声明部分"中.