我一直在試圖從例如整數名單列表獲得列表的列表:哈斯克爾 - 在列出的清單映射
[[0,0,1,4,7,10,11,12,16],[1,4,4,6,7,7,12,12,19],[0,0,0,2,4,7,11,12,13]]
應該產生[[0,1,0],[0,4,0],[1,4,0]
..和等]
我可以用
map head saidList
得到[0,1,0]
所以我一直在試圖然後使用尾部的名單,但我無法弄清楚。
任何幫助將非常感激,因爲這是一個巨大的項目的最後和非常小的部分。
我一直在試圖從例如整數名單列表獲得列表的列表:哈斯克爾 - 在列出的清單映射
[[0,0,1,4,7,10,11,12,16],[1,4,4,6,7,7,12,12,19],[0,0,0,2,4,7,11,12,13]]
應該產生[[0,1,0],[0,4,0],[1,4,0]
..和等]
我可以用
map head saidList
得到[0,1,0]
所以我一直在試圖然後使用尾部的名單,但我無法弄清楚。
任何幫助將非常感激,因爲這是一個巨大的項目的最後和非常小的部分。
查找到Data.List
ghci> :t Data.List.transpose
Data.List.transpose :: [[a]] -> [[a]]
ghci> Data.List.transpose [[0,0,1,4,7,10,11,12,16],[1,4,4,6,7,7,12,12,19],[0,0,0,2,4,7,11,12,13]]
[[0,1,0],[0,4,0],[1,4,0],[4,6,2],[7,7,4],[10,7,7],[11,12,11],[12,12,12],[16,19,13]]
哦轉正是我需要的!謝謝! – user1136035 2012-01-07 15:29:39
你的方法
map head l
只產生第一個列表,只有列表中的原始列表中的所有列表是不是空的工程。
您需要一種方法來放棄空列表(您不想將這些列表的頭部),然後以相同的過程應用於非空列表的尾部。這裏是一個可能的解決方案:
filterNonNull x = filter (\y -> not (null y)) x
f x = if null h then [] else h : t
where
n = filterNonNull x
h = (map head n)
t = f (map tail n)
我測試ghci的:
f [[1, 2, 3], [4, 5, 6],[7,8]]
給
[[1,4,7],[2,5,8],[3,6]]
我喜歡這個名字'saidList' :) – 2012-01-07 20:26:00