【发布时间】:2012-01-28 21:28:39
【问题描述】:
我想自己在 Haskell 中实现严格的折叠功能:这可能吗?我读过 Lisp 宏可用于在很大程度上重新定义语言,使您能够在需要时有效地打破功能范式,并将其塑造成个性化的范式,以最整洁的方式完成工作可能的方式。我实际上并不了解 lisp,所以这可能是不正确的。
当您还考虑到在无类型 lambda 演算中数据类型被编码为函数时,我开始怀疑任何东西都可以编码为其他任何东西(精彩的书 GEB 对此进行了详细讨论)。在这种情况下,表示严格的评估听起来应该很容易。
那么,您将如何在 haskell 中实现以下内容?
foldl' = -- ???
foldl1' = -- ???
我怀疑这与 Monad 和/或继续传递有关。
【问题讨论】:
-
LISP 与 Haskell根本不同。无论如何,LISP 宏虽然能够添加 许多 新形式,但很难使 LISP 天生惰性(尽管在许多情况下可以使用 HoFs/CPS)或添加延续支持——除了因为方言已经具有这样做的基本属性。而且我敢说,没有多少宏可以像 Haskell 一样制作标准的 LISP 方言;-) LISP 仍然是 LISP,能够轻松制作 DSL。
-
您可以随时单击the documentation 中的“源”链接来查看它们在标准库中是如何实现的。
-
请注意,严格的
foldr会违背该函数的精神,在不评估递归调用的情况下(开始)产生结果的能力是一个非常的重点.
标签: haskell lazy-evaluation ghc fold strict