2012-04-16 15 views
3

我有一個列表包含一些元素,現在藉助於列表:foreach我正在獲取更多記錄,並且希望將每個值附加到我現有的列表元素中,而不用像在數組幫助下的其他語言中那樣創建新變量。我新來erlang請有人幫我解決這個問題。這裏是我的示例代碼,我正在... 異常錯誤:右側值不匹配[6,7,1]。如何將元素添加到現有列表中而不在erlang中創建新變量?

示例代碼:

listappend() -> 
    A = [1,2,3,4,5], 
    B = [6,7], 
    lists:foreach(fun (ListA) -> 
     B = lists:append(B, [ListA])      
     end, A), 
    B. 

我想輸出一樣,

B = [6,7,1,2,3,4,5]. 

感謝

+0

其實我想使動態像,我不知道列表A中有多少元素,以及我將創建多少個新變量,以及如何知道循環中創建了多少個變量以及我最後一個變量是什麼我必須展示?請幫助... – 2012-04-16 06:28:11

+0

您無法添加到現有列表。不變性阻止了這一點。 [閱讀](http://learnyousomeerlang.com/starting-out-for-real#invariable-variables) – 2012-04-16 10:28:15

+0

謝謝格特......但是有沒有其他的方式來實現這個... – 2012-04-16 10:57:00

回答

4

首先,這個功能已經存在,所以你不會需要實現它自己。事實上,列表可以取兩個列表作爲參數:

1> lists:append([1,2,3,4,5], [6,7]). 
[1,2,3,4,5,6,7] 

這是因爲實際執行:

2> [1,2,3,4,5] ++ [6,7]. 
[1,2,3,4,5,6,7] 

請記住,++運算符將複製左操作數,所以此操作很容易導致二次複雜性。說到這裏,你可能要使用「缺點」運算符(最終在計算結束倒車列表)來構建你的清單:

3> [1|[2,3,4,5,6,7]]. 
[1,2,3,4,5,6,7] 

在任何情況下,你可以在你的函數,有兩個論據是要追加的兩個列表,而不是在函數的主體中定義它們。這樣,每次調用my_append/2函數時,A和B的值都會改變。

my_append(A, B) -> 
    YOUR_CODE_GOES_HERE 

作爲一個說明和關於你得到實際的錯誤,這是由於以下行:

B = lists:append(B, [ListA]) 

在每次迭代中,你是一個新值綁定到變量B ,這已經綁定到值[6,7]

+0

是羅伯託,我明白了,但我的要求只是這樣,我想使動態像,我不知道列表A中有多少元素,並基於循環我將創建多少新變量,什麼是我的最後一個我必須展示的變量?這是我所面臨的實際問題。請幫助... – 2012-04-16 09:10:16

+1

我只想在B中輸出上述內容...... Erlang中可能如何 – 2012-04-16 09:11:26

相關問題