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