break
具有签名 [a] -> (a -> Bool) -> ([a], [a])
其中第一个元组等于,正如我理解,takeWhile 谓词为 true
。第二个元组是负责使谓词为假的项目加上剩余的列表。
> break (== ' ') "hey there bro"
("hey"," there bro")
但是,是否有一个函数可以跳过导致损坏的项目?
>foo? (== ' ') "hey there bro"
("hey","there bro")
最佳答案
不在标准库中,但您可以方便地drop 1
在元组的第二个元素上使用 Functor
配对实例:
break (== ' ') "hey there bro"
== ("hey"," there bro")
drop 1 <$> break (== ' ') "hey there bro"
== ("hey","there bro")
<$>
是 fmap
的中缀同义词。使用drop 1
而不是tail
处理空后缀的情况:
drop 1 <$> break (== ' ') "hey"
== ("hey","")
tail <$> break (== ' ') "hey"
== ("hey","*** Exception: Prelude.tail: empty list
不过,在使用元组时,我通常更喜欢使用 second
来自Control.Arrow
超过fmap
,因为它更好地传达了意图:
second (drop 1) $ break (== ' ') "hey there bro"
== ("hey","there bro")
关于haskell - Haskell 中修改了 `break`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23643897/