gpt4 book ai didi

haskell - 这种使用箭头的快速排序实现有什么问题?

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

好的,所以我想用箭头来找点乐子。我试图直接将性感的 Haskell 快速排序转换为使用箭头的实现。但它不能正常工作。

import Control.Arrow

qs :: Ord a => [a] -> [a]
qs = isEmpty >>> right (head &&& tail
>>> first ((qs.) . filter . (<)
&&& (\x -> (x:) . qs . filter (>=x)))
>>> first (uncurry (&&&))
>>> uncurry id
>>> uncurry (++))
>>> extract
where
isEmpty [] = Left []
isEmpty x = Right x
extract (Left x) = x
extract (Right x) = x

有人能发现问题吗?

最佳答案

问题是您并没有真正拆分 tail ,这两个比较不是互补的。当我们将第一个也写成 lambda 时,这一点变得很明显:

first ( (\x -> qs. . filter (x<))
&&& (\x -> (x:) . qs . filter (>=x)) )

当你想要的很明显
first ( (\x -> qs. . filter (<x))
&&& (\x -> (x:) . qs . filter (>=x)) )

或者
first ( (qs.) . filter . (>)
&&& (\x -> (x:) . qs . filter (x<=)) )

顺便说一句,我更喜欢 app超过 uncurry id .

关于haskell - 这种使用箭头的快速排序实现有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15849550/

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