Haskell takeWhile + 1

标签 haskell

如何编写一个 takeWhile 来保留第一个不符合条件的元素?

示例(显然我的示例比这更棘手):

而不是 takeWhile (\× - > x! = 3) [1..10]返回 [1,2]我需要[1,2,3] .

我想到了(takeWhile myFunc myList) ++ [find myFunc myList]但这意味着我需要检查我的 list 2 次...

任何想法?

最佳答案

您可以使用 spanbreak .

λ> 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/

相关文章:

haskell - 将函数列表的组合应用于列表的每个数字

haskell - 警告 : Pattern match(es) are overlapped when matching on strings

haskell - 如何将 GHCi 与新的 cabal 1.17 沙箱一起使用?

haskell - Haskell 中的延续与调用堆栈

haskell - 在 Happstack 请求处理程序中捕获程序错误

haskell - 需要多少个 fmap?

haskell - Clojure 可以像 Haskell 一样制作字母列表吗?

haskell - 我可以将列表范围作为函数应用吗?

haskell - 为什么 Haskell NoBuffering 选项似乎仍然可以缓冲?

haskell - 显示与 unsafeCoerced 值一起使用时返回错误值