【问题标题】:Is there a functional representation for strict evaluation?是否有严格评估的功能表示?
【发布时间】: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


【解决方案1】:

如何实现foldl'Like this

Haskell 提供了 seq 原语来增加严格性,并为方便起见还提供了“bang 模式”。

另见:Haskell 2010 > Predefined Types and Classes # Strict Evaluation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-29
    • 2012-02-10
    • 2015-02-27
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多