gpt4 book ai didi

Haskell 折叠嵌套列表

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

目前我正在摆弄 Haskell。我对 Haskell(以及一般的函数式语言)的了解仍然很少,但我正在努力。真正困扰我的是一个(正如我所想的)简单的任务:以每个深度折叠一次的方式折叠嵌套列表。

fcalc = foldr (\x y -> (foldr (**) 1 x) * (foldr (**) 1 y)) [1.0, 1.0] [[2.0, 3.0], [4.0, 5.0]]

它应该做什么:2^3 * 4^5,其中 ^ 由 lambda 内部折叠完成。遗憾的是它不起作用。

Occurs check: cannot construct the infinite type: t0 = [t0]
In the third argument of `foldr', namely `y'

我读过一些关于给定的“无限类型”错误的信息,主要表明变量被用作例如元素,而它是一个列表。这让我将外文件夹的第二个参数视为问题,但没有成功。我就是不明白。 :/

最佳答案

你的问题是你试图在折叠内的累加器上进行 a^b 计算,同时也在每个元素上进行计算。你真正想要的是这样的

fcalc = foldr (\x y -> (foldr (**) 1 x) * y) 1 [[1.0, 1.0], [2.0, 3.0], [4.0, 5.0]]

请记住,foldr 每个步骤的输出都会作为下一步的第二个参数插入(例如本例中的 y 变量)。由于您的 foldr 步骤返回一个数字,因此 y 变量已经是一个数字,因此您无法折叠它。

关于Haskell 折叠嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9119245/

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