【发布时间】:2014-12-13 06:17:11
【问题描述】:
有人可以帮我理解 Wadler 题为“Comprehending Monads”的论文中的以下定义吗? (摘自第 3.2 节/第 9 页,即“Strictness Monad”小节。)
有时需要在惰性函数程序中控制求值顺序。这通常通过由
定义的可计算函数strict来实现严格 f x = 如果 x ≠ ⊥ 那么 f x 其他 ⊥.
在操作上,strict f x 通过首先将 x 归约为弱头范式 (WHNF) 来归约然后减少应用f x。或者,并行减少 x 和 f x 是安全的,但在 x之前不允许访问结果> 在 WHNF 中。
在论文中,我们还没有看到使用由两条垂直线组成的符号(不知道它叫什么),所以它有点不知从何而来。
鉴于 Wadler 继续说“我们将使用 [严格] 推导来控制惰性程序的评估”,这似乎是一个非常重要的概念。
【问题讨论】:
-
俗称底。
-
你的问题和 monad 有什么关系?
-
它被称为底部,或者在 Haskell 中专门称为
undefined。这只是它的一种形式,尽管从技术上讲,底部也是一种非终止计算,例如length [1..] -
见bottom type。底部基本上意味着,这个表达式不可计算/永远运行/从不返回值/抛出异常/等等。规则是:如果
x是可计算的,那么strict f x计算为f x,但如果x是不可计算的,那么strict f x计算为“不可计算”。换句话说:说f x = 2 * x。f (1 / 0)是什么?你无法评估它,因为你无法评估(1 / 0)。 -
@leftaroundabout:我可能应该在我的原始帖子中更清楚地说明这一点。摘录自一篇题为“理解单子”的论文。具体的小节称为“严格单子”。
标签: haskell semantics strictness