我正在尝试在ocaml中定义一个函数insert
列表中的元素x
,head
或tail
列表,取决于新元素是否小于列表的当前head
。
问题在于,当我运行我创建的一些代码(显示在底部)时,我的列表将返回其原始状态,而不保存先前完成的追加。我意识到我可以使用新变量的简单let
语句来执行此操作,但我想将新列表另存为当前表单。甚至可以在ocaml中完成,而无需创建新列表吗?
我的问题是:如何在不创建新列表或变量的情况下,将其附加到列表中并以新格式保存。
我正在查看this answer on SO,并已将其合并到我的代码中。但是,当我运行此代码时:
let rec insertion x y =
match y with
| [] -> x::y
| h::tl -> if h >= x then x::y
else y@[x]
;;
,伴随着:
let y = [1;2;3];;
insertion 0 y ;;
y ;;
我回来了:
val y : int list = [1; 2; 3]
- : int list = [0; 1; 2; 3]
- : int list = [1; 2; 3]
答案 0 :(得分:1)
这是不可能的。 OCaml的列表是不可变的,你无法改变它。你不能改变它的值,你不能改变它的长度。