2014-10-27 21 views
0

我想知道在ml中使用list時如何使用列表的特定位置更改變量。例如,當我有一個列表[1,2,3,4]時,我想用列表中的5個副標題將列表更改爲[1,2,5,4]。我在想的是寫一個帶有位置,變量和列表的函數,返回帶有更新變量的新列表。例如,所以用這個代碼更改標準ml列表中的變量

change(i, var, list) = let val valup = var in (list @ [i]) end 

,如果我輸入change(2, 5, [1,2,3,4]),我放出來會[1,2,3,4,2]其不正確比較[1,2,5,4]。我是新來的ml,不擅長語言中的列表設置,所以任何幫助都會很感激。

回答

0

我想出了問題的解決方案。

fun change(i,v,[]) = raise Error 
| change(0, v, x::xs) = v :: xs 
| change(i, v, x::xs) = if i < 0 then raise Error 
          else x :: change((i-1), v, xs) 
0

你必須認識到,ML中的值是不可變的。這意味着一旦你創建了一個值,你就不能改變它!

因此,如果我們有這兩個語句

x = [2,3,4] 
y = 1::x 

然後yx住在計算機上單獨的存儲位置。


你可以做的是:

fun swapFirst []  y = raise Empty 
    | swapFirst (x::xs) y = y::xs 
val test_swapFirst_00 = [1,2,3,4] = swapFirst [2,2,3,4] 1 

將交換列表的第一個元素了別的東西。


現在我有一種感覺,這可能是對某些課程作業的答案,所以我不會給該解決您問題的完整代碼,但這些信息至少應該明確一些事情,並讓你更容易解決問題!

+0

什麼麻煩我是如何改變一個變量我不知道如果l @ [i]會拉我變量或不變? – user4075830 2014-10-27 16:01:15

+0

@ user4075830:您不能在ML中「更改變量」。語言中根本沒有語法。 – newacct 2014-10-28 01:45:54