目前我正在使用

takeWhile (\x -> x /= 1 && x /= 89) l

以便从列表中获取最多1或89的元素。但是,结果不包括这些标记值。 Haskell是否具有标准功能,可在takeWhile上提供此变体,从而在结果中包含前哨?到目前为止,我对Hoogle的搜索仍​​然没有结果。

最佳答案

由于您在询问标准函数,所以是no。但是也没有包含takeWhileInclusive的包,但这确实很简单:

takeWhileInclusive :: (a -> Bool) -> [a] -> [a]
takeWhileInclusive _ [] = []
takeWhileInclusive p (x:xs) = x : if p x then takeWhileInclusive p xs
                                         else []

您唯一需要做的就是获取该值,而不管谓词是否返回True,并且仅将谓词用作延续因子:
*Main> takeWhileInclusive  (\x -> x /= 20) [10..]
[10,11,12,13,14,15,16,17,18,19,20]

关于haskell - Haskell是否具有takeUntil函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22472536/

10-11 18:51