所以我一直想我的模塊中實現這一功能,到目前爲止,我得到這個:從不正當的名單在二郎山
例1
[2,[3,[4,[5,[6,[7,[8,[]]]]]]]]
我想要弄清楚我怎樣才能使它看起來像一個適當的列表,即:
例2
[2,3,4,5,6,7,8].
我知道我必須與頭和尾巴玩,但我很難理解它。 任何幫助,將不勝感激。
謝謝!
所以我一直想我的模塊中實現這一功能,到目前爲止,我得到這個:從不正當的名單在二郎山
例1
[2,[3,[4,[5,[6,[7,[8,[]]]]]]]]
我想要弄清楚我怎樣才能使它看起來像一個適當的列表,即:
例2
[2,3,4,5,6,7,8].
我知道我必須與頭和尾巴玩,但我很難理解它。 任何幫助,將不勝感激。
謝謝!
其實在示例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都(在這種特殊情況下,其更否則有趣):
proper(L) -> proper([], L).
proper(A, [H|[T]]) -> proper([H|A], T);
proper(A, []) -> lists:reverse(A).
問題的根源在於你如何建立你的列表。這裏有什麼:
[2,[3,[4,[5,[6,[7,[8,[]]]]]]]]
不是一個列表,而是嵌套列出兩個元素中的每一個。當你這樣做時[Element,List]
不是前置Element
到List
但建立一個新列表,Element
作爲第一個元素,List
作爲第二個元素。請注意,每個列表是一個正確的列表,但你沒有建立一個列表,但嵌套列表。請使用語法[Element | List]
。所以:
[2|[3|[4|[5|[6|[7|[8|[]]]]]]]]
其中建立名單[1,2,3,4,5,6,7,8]
。
所以[Element | List]
和[Element,List]
是兩個非常不同的東西,第一個是在列表的開頭預先添加一個元素,而第二個是在兩個元素之間建立一個新的列表。沒有直接的方式將元素附加到列表而不重建列表。
我想知道我應該做什麼,接下來又會是解決我的問題的第二條線。 – Gabriele 2014-09-11 10:23:38
你寫道,你很難理解需要什麼,所以我寫了一個手動解決方案 - 但是Odobenus Rosmarus的回答是正確的方法,因爲這確實已經是一個正確的列表。 – zxq9 2014-09-11 11:03:26