OCaml在一条线上做了很多事情

时间:2014-03-21 22:42:46

标签: ocaml

我不确定如何做到这一点但是假设你有一个if和else语句,而在else子句中我想执行一个语句,然后是另一个单独的语句。

例如:

let rec uniq_aux old_l new_l = match old_l with
    [] -> []
  | (h::t) ->
    if (contain h new_l) then
      uniq_aux t new_l
    else
      h::new_l ; (uniq_aux t new_l)
;;

在代码的最后一行我想将h添加到新列表(new_l)并继续通过旧列表进行处理以处理更多信息。

但是我在该行和我所在的行上收到错误:包含h new_l然后

1 个答案:

答案 0 :(得分:1)

您似乎希望表达式h :: new_l修改new_l,因此它包含一个新元素。但是,OCaml并没有这样的工作。 OCaml变量是不可变的。 (很抱歉继续重复这个,但我希望有必要打破必要的思维习惯。)

假设我对你想要的代码做了什么,函数式编程的等价看起来大致如下:

let new_new_l = h :: new_l in
uniq_aux t new_new_l

换句话说,您可以使用所需的值定义 new 变量,并使用新变量代替旧变量。