0
上下文:
我试图在ocaml该insert
S上的元件x
在列表中,在定义一个函数要么head
或列表的tail
,基于断是否新元素小于当前列表中的head
。保存OCaml中的附加列表
问题:
的问题是,当我运行一些代码,我创建了(在底部显示),我的表是回到原来的状态,而不是保存以前是追加完成。我意识到,我可以用一个简单的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 [email protected][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]
谢谢!我觉得这有点奇怪,因为我以前的经验总是能够改变列表的形式。这就是说,最好的方式去做这个会做'让nList =插入SOME_VAL SOME_LIST'?如果是这样,你介意这是否添加到你的答案? – 2014-10-04 23:15:08
OCaml是函数式编程语言。因此,默认情况下,大多数数据结构都是不可变的(或者说我们说的持久性数据)。另外,请注意,表达式'let var = expr'实际上并没有将'var'的值更改为'expr',它只是创建一个新的绑定,即将一个名称'var'绑定到某个对象' expr'。如果它刚刚发生,那么在当前范围内这样的名称已经存在,那么它只是被隐藏了(参见python的地图)。这就是为什么我们试图不使用术语“变量”,因为它可能会让新手感到困惑。我们使用名称和值。希望这可以帮助! – ivg 2014-10-04 23:23:04
再次感谢!我也想澄清这一点,因为我之前评论中的代码片段是我正在寻找的一个解决方案(但不愿意使用>,<)。再次感谢您的时间! – 2014-10-04 23:26:55