【问题标题】:grouping elements in a list in haskell在haskell中对列表中的元素进行分组
【发布时间】:2017-09-01 14:35:36
【问题描述】:

我想从[1,26,3,94,51,6,7,8,9,10,11,12,73,29,19,90,76,87,1]转换一个列表

[[1],[26,3],[94,51,6],[7,8,9,10],[11,12,73,29,19]] 等等直到在haskell 中结束。 (我正在尝试按子列表长度的递增顺序对元素进行分组)

我是haskell新手,请帮帮我

【问题讨论】:

  • 什么是分组标准?为什么[26,3] 分组在一起?你试过什么?你被困在哪里了?

标签: list haskell


【解决方案1】:

您可以创建自己的递归函数,接收一个列表并返回一个列表列表,首先我们需要take列表中的n个元素,为此我们调用take n xs,然后我们需要将元素与剩下的元素我们需要调用mySplit n+1并将我们合并的元素放到列表中,所以我们只需要call drop n xsdrop

mySplit :: Int -> [a] -> [[a]]
mySplit n [] = []
mySplit n xs = (take n xs):(mySplit (n + 1) (drop n xs))

ghci> mySplit 1 [1,26,3,94,51,6,7,8,9,10,11,12,73,29,19,90,76,87,1]
[[1],[26,3],[94,51,6],[7,8,9,10],[11,12,73,29,19],[90,76,87,1]]

【讨论】:

  • 谢谢。是否有任何内置功能可以做到这一点?
  • 是的,您可以使用带有 lambda 的 foldr。
  • splitAt 会使这段代码更有效率,这样您就不必使用takedrop 对列表进行两次迭代。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-27
  • 1970-01-01
  • 2017-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多