let-in表达式中的错误代码

hqt*_*hqt 0 sml

我有这个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)

Jes*_*erg 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
Run Code Online (Sandbox Code Playgroud)

然而,这仍然没有多大意义.因为表达式sum = 0sum = 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是一个表达式,所以它本身不能出现在"声明部分"中.