【发布时间】:2012-02-25 12:22:37
【问题描述】:
目前我正在使用 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'd 内部折叠完成。遗憾的是它不起作用。
Occurs check: cannot construct the infinite type: t0 = [t0]
In the third argument of `foldr', namely `y'
我已经阅读了一些关于给定“无限类型”错误的信息,主要表明变量被用作例如元素,而它是一个列表。这让我认为外部文件夹的第二个参数是问题,但没有成功。 我只是不明白。 :/
【问题讨论】:
-
好吧,我想知道你是不是走错了路。首先,你打破了我的一条经验法则:你不使用折叠来直接解决问题,而是使用它们来实现一些中间抽象来解决你的问题。其次,我想知道列表和嵌套列表是否真的是您尝试做的正确数据结构;我感觉您正在处理一个由某种抽象语法树更好地服务的问题区域。
标签: haskell