确认惰性求值

6

我不小心删除了我的帖子,但是为了澄清问题,我正在重新发布这个问题。

如果我有一个函数:
const x = 1

如果我问 Haskell:
const (1/0)

它会返回 1,因为惰性求值实际上并没有计算 1/0 是什么,对吧?它并不需要这样做。


2
是的,这就是Haskell的非严格语义保证。 - Niklas B.
10
请注意,1/0实际上不会抛出异常,它只会返回一个特殊的Double值。但是,如果您将其更改为会抛出异常的内容(例如error "die"),您仍将得到1作为答案。 - MathematicalOrchid
2
当然,“const”不是一个好的名称 - 你可以称其为“const1”,并且实际上可以定义为“const1 = const 1”。像大多数Prelude函数一样,“const”这个名称不应该用于其他任何东西。 - leftaroundabout
1个回答

8

是的,没错。就像你定义的那样,const在被评估时总是会产生1,无论参数是什么。由于参数与结果无关,因此不会对结果进行评估。因此,任何可能由于评估参数而导致的错误或非终止都不会发生。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接