2014-09-11 61 views
2
返回的第一元素

所以我一直想我的模塊中實現這一功能,到目前爲止,我得到這個:從不正當的名單在二郎山

例1

[2,[3,[4,[5,[6,[7,[8,[]]]]]]]] 

我想要弄清楚我怎樣才能使它看起來像一個適當的列表,即:

例2

[2,3,4,5,6,7,8]. 

我知道我必須與頭和尾巴玩,但我很難理解它。 任何幫助,將不勝感激。

謝謝!

+0

我想知道我應該做什麼,接下來又會是解決我的問題的第二條線。 – Gabriele 2014-09-11 10:23:38

+0

你寫道,你很難理解需要什麼,所以我寫了一個手動解決方案 - 但是Odobenus Rosmarus的回答是正確的方法,因爲這確實已經是一個正確的列表。 – zxq9 2014-09-11 11:03:26

回答

7

其實在示例1中,您將顯示正確的列表。列表只包含2個元素 - 數字和另一個列表。

不正確的列表是不同的東西 - 例如[1 | 2]。

可以通過列表將示例1變爲示例2:flatten。

1> M = [2,[3,[4,[5,[6,[7,[8,[]]]]]]]]. 
[2,[3,[4,[5,[6,[7,[8,[]]]]]]]] 
2> lists:flatten(M). 
[2,3,4,5,6,7,8] 
1

並不明顯,因爲它看起來在第一,但這個是做什麼列出的手動方式:壓平/ 1都(在這種特殊情況下,其更否則有趣):

proper(L) -> proper([], L). 

proper(A, [H|[T]]) -> proper([H|A], T); 
proper(A, []) -> lists:reverse(A). 
3

問題的根源在於你如何建立你的列表。這裏有什麼:

[2,[3,[4,[5,[6,[7,[8,[]]]]]]]] 

不是一個列表,而是嵌套列出兩個元素中的每一個。當你這樣做時[Element,List]不是前置ElementList但建立一個新列表,Element作爲第一個元素,List作爲第二個元素。請注意,每個列表一個正確的列表,但你沒有建立一個列表,但嵌套列表。請使用語法[Element | List]。所以:

[2|[3|[4|[5|[6|[7|[8|[]]]]]]]] 

其中建立名單[1,2,3,4,5,6,7,8]

所以[Element | List][Element,List]是兩個非常不同的東西,第一個是在列表的開頭預先添加一個元素,而第二個是在兩個元素之間建立一個新的列表。沒有直接的方式將元素附加到列表而不重建列表。