1

我想在ML的 if 语句中更新两个变量的值。我使用了这段代码:

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

纯函数式编程中的变量实际上不是变量。也就是说,一旦你给一个变量赋值,你就不能改变它(只能用一个具有相同名称的新变量来隐藏变量)。如果您真的需要/想要可变性,您可以使用该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 回答