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 の関数は、常に 1 つの引数を取ります。例えば

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。したがって、合計で行いたくない計算in ... endは、関数の手段として表現したくない場合を除き、おそらくパーツ内で行う必要があります。

そのような例の1つは

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

その構文は合法ではありません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両方の変数名に使用するのは少し奇妙なスタイルだと思いますが、それは合法です。

于 2013-01-30T16:17:07.417 に答える