gpt4 book ai didi

haskell - Haskell 中修改了 `break`?

转载 作者:行者123 更新时间:2023-12-02 17:20:44 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com