【发布时间】:2016-12-30 12:50:57
【问题描述】:
我是函数式编程和语言 haskell 的新手。我正在尝试根据谓词函数确定列表中最长连续元素系列的长度。函数如下所示:
longestSequence :: (a -> Bool) -> [Int] -> Int
当我这样称呼它时:
longestSequence (\x -> x >= 10) [1,44,33,22,2,3,55,66,66,77,88,99]
它应该给我作为解决方案6。
到目前为止,我的解决方案是:
longestSequence :: (a -> Bool) -> [a] -> Int
longestSequence p [] = 0
longestSequence p (x:xs)
| (p x) = 1 + (longestSequence p xs)
| otherwise = longestSequence p xs
关于我如何解决这个问题的任何提示或想法?
【问题讨论】:
-
为什么它应该给你 6,它给你的是什么?
-
我想我明白了:它是所有满足谓词的最长连续元素系列的长度。
-
使用我的解决方案我得到 9,因为如果谓词为真,我将计算所有项目
-
对不起,这个问题的误导性话题。 @luqui 规范是正确的。
-
因为你只想要最长序列的长度,而不是最长序列本身,它可能有助于
map整个列表中的谓词,然后找到True的最长序列。跨度>
标签: haskell recursion functional-programming