如何编写一个 takeWhile 来保留第一个不符合条件的元素?
示例(显然我的示例比这更棘手):
而不是 takeWhile (\× - > x! = 3) [1..10]
返回 [1,2]
我需要[1,2,3]
.
我想到了(takeWhile myFunc myList) ++ [find myFunc myList]
但这意味着我需要检查我的 list 2 次...
任何想法?
最佳答案
您可以使用 span
或 break
.
λ> span (/=3) [1..10]
([1,2],[3,4,5,6,7,8,9,10])
所以你可以做这样的事情:
takeWhileInc :: (a -> Bool) -> [a] -> [a]
takeWhileInc p xs = case zs of [] -> error "not found"
(z:_) -> ys ++ [z]
where
(ys, zs) = span p xs
(或者当
zs
为空时您想要发生的任何事情,因为没有 3
被找到。)
关于Haskell takeWhile + 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41741681/