0

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

2 回答 2

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 = 0sum = 1计算结果为布尔值。

let 表达式用于进行一些仅在in ... end零件内部可见的局部声明。因此,您不想用 sum 进行的计算可能应该在in ... end部件内部完成,除非您不想将其表示为函数的一种方式。

一个这样的例子是

fun score () = 
    let val sum = 3
    in
      if sum div 2 > 0
      then ...
      else ...
    end

如果我们看一下 let 表达式的语法,它可能更有意义

let
  <declaration>
in
  <expr> ; ... ; <expr>
end

由于 if-then-else 是一个表达式,它不能单独出现在“声明部分”中。

于 2013-01-30T16:27:00.227 回答
2

这种语法是不合法的——在两者之间letin你被允许拥有的只是一系列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两个变量名都使用有点奇怪,但它是合法的。

于 2013-01-30T16:17:07.417 回答