gpt4 book ai didi

haskell - 在haskell中评估 `groupBy`

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

为什么

groupBy (>) [-5,-4,5,4,-2,-3,2,3]

评估为

[[-5],[-4],[5,4,-2,-3,2,3]]

由于 -3 不大于 2 是否应该对它们进行不同的分组?我预计结果是

[[-5],[-4],[5,4,-2,-3],[2,3]]

我错过了什么?

最佳答案

groupBy::(a -> a -> Bool) -> [a] -> [[a]] 使用组的第一个成员作为引用。所以如果你写:

groupBy eq (x:x2:x3)

它将 - 如果 eq x x2 满足,则调用 eq x x3 来检查 x3 是否也属于同一组。所以调用是:

arg1 | arg2 | (>) `on` (*1)
-5 | -4 | False
-4 | 5 | False
5 | 4 | True
<b>5</b> | -2 | True
<b>5</b> | -3 | True
<b>5</b> | 2 | True
<b>5</b> | 3 | True

我们可以在 source code of groupBy 中看到这一点:

groupBy                 :: (a -> a -> Bool) -> [a] -> [[a]]
groupBy _ [] = []
groupBy eq (x:xs) = (x:ys) : groupBy eq zs
where (ys,zs) = span <b>(eq x)</b> xs

如您所见,spaneq x 作为谓词,x 是该组的第一个成员。

该函数可能期望 a -> a -> Bool等价关系:等价关系是 (1) 自反; (2)对称; (3)及物。您的函数不是等价关系,因为它既不自反也不对称。因此,您不能(安全地)将 groupBy 与订单关系一起使用。

注意:(>) `on` (*1) 相当于 (>) 因为 (*1) 将返回相同的数字,您只需在此处使函数更加具体,使其仅适用于 Num,但这不是必需的。

关于haskell - 在haskell中评估 `groupBy`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47033937/

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