我仍然是haskell的新手,但我努力學習它。但是現在我明白了,我認爲我必須學習haskell的全新章節。有條件地合併列表元素
所以這是一個包含這些數字Int的列表的列表:
[[5,6,14],[1,2,9],[11,12,13],[6,13,14],[5,13,14]]
在開始的時候所有內部列表包含三個數字。目標是將所有重疊列表合併爲更大的列表:
[[5,6,14],[1,2,9],[11,12,13],[6,13,14],[5,13,14]]
merging elements at index 0 and 3 because of the common 6 in both lists.
[[5,6,14,13],[1,2,9],[11,12,13],[5,13,14]]
merging elements at index 0 and 2 because of the common 13 in both lists.
[[5,6,14,13,11,12],[1,2,9],[5,13,14]]
merging elements at index 0 and 2 because of the common 5,13 & 14 in both lists.
[[5,6,14,13,11,12],[1,2,9]]
而這應該是函數的結果。列表內部列表的順序與最內部列表中元素的順序無關。
我知道如何在任何其他命令式語言中對其進行編碼,但在這裏我卡住了。
不在於它回答你的問題,但你應該知道,Haskell的列表('[A]')是*不*陣列,而是鏈表,而這些的當然具有與陣列完全不同的性能特徵。如果你真的想要數組(可能不是這種情況下),請查看[vector](https://hackage.haskell.org/package/vector),這幾乎是目前陣列的典型選擇。 – gspr
你似乎也會做很多會員測試。也許你想考慮['Set'](http://hackage.haskell.org/package/containers-0.5.6.3/docs/Data-Set.html),這種檢查可以在對數時間完成。 – gspr
下面是一個草圖:1)編寫一個函數,如果它們有交集,則合併兩個集合。 2)編寫一個函數,從兩個列表中產生所有元素對的列表。 3)將函數從1傳遞到2,直到它找到一對可以完成它的事情。如果你在沒有做任何事情的情況下遍歷2的所有列表,你就完成了。 – gspr