gpt4 book ai didi

Haskell 相当于 Ruby 的 slice_when

转载 作者:行者123 更新时间:2023-12-02 14:02:51 26 4
gpt4 key购买 nike

我是 Haskell 新手,我想要一个像 Ruby 的 slice_when 一样工作的函数:

slice_when ruby

a = [1,2,4,9,10,11,12,15,16,19,20,21]
b = a.slice_when {|i, j| i+1 != j }
p b.to_a #=> [[1, 2], [4], [9, 10, 11, 12], [15, 16], [19, 20, 21]]

haskell

ghci > slice_when (\x y -> x+1 /= y) [1,2,4,9,10,11,12,15,16,19,20,21] 

=> [[1, 2], [4], [9, 10, 11, 12], [15, 16], [19, 20, 21]]

非常感谢。

最佳答案

这是一个 sliceWhen 实现,我相信它可以像您想要的那样工作:

sliceWhen :: (a -> a -> Bool) -> [a] -> [[a]]
sliceWhen _ [] = []
sliceWhen _ [x] = [[x]]
sliceWhen f (x:y:xs)
| f x y = [x] : sliceWhen f (y:xs)
| otherwise = let z:zs = sliceWhen f (y:xs)
in (x:z) : zs

上面的函数在每个边界上运行提供的谓词,如果它返回True,则会创建一个接缝。否则,它将“当前”值附加到列表其余部分的第一个元素上。

关于Haskell 相当于 Ruby 的 slice_when,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39179034/

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