gpt4 book ai didi

list - 当函数在 haskell 中不正确时,如何只对列表进行切片?

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

我想在函数不正确时对我的列表进行切片,但我不知道在其他情况下我必须返回什么。你有什么想法吗?

Example : 
sliceBy odd [1..5] == [[1],[2],[3],[4],[5]]
sliceBy odd [1,3,2,4,5,7,4,6] == [[1,3],[2,4],[5,7],[4,6]]
sliceBy even [1,3,2,4,5,7,4,6] == [[],[1,3],[2,4],[5,7],[4,6]]
sliceBy :: (a -> Bool) -> [a] -> [[a]]
sliceBy _ [] = []
sliceBy _ [x] = [[x]]
sliceBy f (x:xs)
| f x = [x] : sliceBy f xs
| otherwise = ??

最佳答案

您可以使用 span :: (a -> Bool) -> [a] -> ([a], [a])break :: (a -> Bool) -> [a] -> ([a], [a])获取列表不满足/不满足给定谓词的最长前缀。因此,您可以使用它来创建两个相互调用的函数 sliceBysliceByNot:

sliceBy :: (a -> Bool) -> [a] -> [[a]]
sliceBy _ [] = []
sliceBy f xs = … : …
where (xp, xnp) = <strong>span</strong> f xs

sliceByNot :: (a -> Bool) -> [a] -> [[a]]
sliceByNot _ [] = []
sliceByNot f xs = … : …
where (xnp, xp) = <strong>break</strong> f xs

需要填写部分的地方。因此这两个函数应该相互调用。

关于list - 当函数在 haskell 中不正确时,如何只对列表进行切片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72612161/

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