1

MLの if ステートメントで 2 つの変数の値を更新したいと考えています。私はこのコードを使用しました:

fun next (row, start) =
  let
    val b = 1
    val continue = false
  in
    while (start <= 8) do 
    (
      if condition  
      then 
        b = start 
        continue=false
      else 
        b = b
    )
  end;

しかし、このコードにはエラーがあり、その理由がわかりません。より一般的に言えば、 MLのブロックの構文は何ですか?

4

1 に答える 1

2

純粋な関数型プログラミングの変数は、実際にはvariableではありません。つまり、変数に値を割り当てたら、それを変更することはできません (同じ名前を持つ新しい変数によって変数を隠すだけです)。可変性が本当に必要/必要な場合は、refタイプを使用できます(可変参照の場合、割り当ては:=、not=であり、 prefix を介して逆参照されます!)。

MLのブロック構造につ​​いては、括弧(を使用し)、ステートメントをセミコロンで区切り;ます。

次のコードを使用できます。

fun next (row, start) =
  let
   val b = ref 1;
   val continue = ref false;
  in
    while (!start <= 8) do (
      if !continue  
        then (
          b := !start;
          continue := false
        ) else ( b := !b)
    )
end;

conditionここで(投稿では定義されていません)を に置き換えましたcontinue。ただし、上記のコードはコンパイルできると言っているだけで、それほど意味があるわけではありません。

于 2013-08-06T07:13:13.030 に答える