获得每一个第三元素和循环回来(Haskell)

时间:2015-03-30 02:08:59

标签: haskell

我想编写一个函数,它返回给定列表的每个第n个元素,然后将头部更新为第二个元素并再次执行此操作,直到它遍历列表中的所有元素。 我知道遍历列表中每个第n个元素的代码是:

everyf n [] = []
everyf n as  = head as : everyf n (drop n as)

但这不会循环回来。如何更新头部以便获得以下结果:

everyf 3 [1,2,3,4,5,6,7]
returns [[1,4,7],[2,5],[3,6]]

1 个答案:

答案 0 :(得分:2)

免责声明:我不知道haskell(根本): - )

listOfNths :: Int -> [a] -> [[a]]
listOfNths n xs = map (\x -> everyf n (drop x xs)) [0..n-1]

和稍微“改进”的版本:

listOfNths :: Int -> [a] -> [[a]]
listOfNths n xs = map pickEveryf [0..n-1]
    where pickEveryf = (everyf n) . (`drop` xs)