【问题标题】:getting every 3rd element & looping back (Haskell)获取每个第三个元素并循环返回(Haskell)
【发布时间】:2015-03-30 02:08:59
【问题描述】:

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

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

但这不会循环返回。我怎样才能得到这个来更新 head 以便我得到以下结果:

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

【问题讨论】:

  • [everyf 3 xs, everyf 3 (tail xs), everyf 3 (drop 2 xs)]?哪个概括看起来像[everyf 3 (drop 0 xs), everyf 3 (drop 1 xs), everyf 3 (drop 2 xs)]
  • @zerkms 很抱歉不清楚,但我希望这适用于任何第 n 个元素,而不仅仅是 3。我更新了我的问题。

标签: haskell


【解决方案1】:

免责声明:我不知道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)

【讨论】:

  • 好吧...不错的尝试,但这给出了:[[3,6],[3,6],[3,6],[3,6]]
猜你喜欢
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 1970-01-01
  • 2011-06-07
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 2018-06-11
相关资源
最近更新 更多