【发布时间】:2011-08-06 10:23:28
【问题描述】:
我正在尝试编写一个列表函数,它接受一个简单的列表并反馈一个列表列表,后者的所有元素都与前一个具有相同的关系。
更具体地说,函数应该这样做:
- 获取列表;
let xs = [1,2,3,4,5,6,8,9,10] - 查看头部的两个元素,如果第二个元素等于第一个元素加一(即
xs!!0 = xs!!1 - 1),则从它们中创建一个列表中的列表。 - 列表采用元素,而最后一个元素与元素具有相同的关系,是从主列表中新馈入的。当出现中断时,子列表会关闭,但该函数应该根据自始至终的相同条件创建一个新的子列表。
- 所以,最终结果应该是,
[[1,2,3,4,5,6],[8,9,10]]缺席的 7 将主列表分为两个子列表。两者都是等差数列,共同差为 1。
在阅读 Learn You a Haskell for Great Good 到第 7 章之后,我认为我真的有一个很棒的想法,并且尝试过但可耻地失败了。欢迎提供帮助!
ghci> filter (\x y -> x + 1 == y) xs
"<"interactive">":1:8:
The lambda expression `\ x y -> x + 1 == y' has two arguments,
but its type `a -> Bool' has only one
In the first argument of `filter', namely `(\ x y -> x + 1 == y)'
In the expression: filter (\ x y -> x + 1 == y) xs
In the definition of `it': it = filter (\ x y -> x + 1 == y) xs
【问题讨论】:
-
注意:
ghci> let xs = [1,2,3,4,8,5,10] ghci> [x | x <- myGroupBy (\x y -> x*2==y) xs, length x > 1] [[1,2],[4,8],[5,10]]没关系。