gpt4 book ai didi

Haskell:foldr 与 foldr1

转载 作者:行者123 更新时间:2023-12-03 15:05:46 27 4
gpt4 key购买 nike

如果我有这个插入功能:

insert x []     = [x]
insert x (h:t)
| x <= h = x:(h:t)
| otherwise = h:(insert x t)

这会产生一个排序列表:
foldr insert [] [1,19,-2,7,43]

但是这个:
foldr1 insert [1,19,-2,7,43]

产生'无法构造无限类型:a0 = [a0]'

我很困惑为什么第二个电话不能工作。

我查看了这两个 foldr 的定义。和 foldr1并用简单的算术函数跟踪了两者,但我仍然无法清楚地解释为什么第二次调用失败。

最佳答案

让我们看一些类型签名。

foldr  :: (a -> b -> b) -> b -> [a] -> b
foldr1 :: (a -> a -> a) -> [a] -> a

在这两种情况下,第一个参数都是两个参数的函数。
  • 对于 foldr1 ,这两个参数必须具有相同的类型(结果也具有这种类型)
  • 对于 foldr ,这两个参数可能有不同的类型(结果与第二个参数的类型相同)

  • 您的 insert 是什么类型的? ?

    关于Haskell:foldr 与 foldr1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13782185/

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