2013-03-21 89 views
5

我不小心删除了我的帖子,但我要重新发布此问题以进行澄清。确认懒惰评价

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

如果我问哈斯克尔:
const (1/0)

它将返回1因为懒的评价实际上并不算得了什么1/0是吧?它不需要。

+2

是的,这就是Haskell的非严格语义保证。 – 2013-03-21 21:16:53

+10

请注意,“1/0”实际上不会引发异常 - 它只是返回一个特殊的“Double”值。但是,如果你将它改为某个_does_抛出异常(例如'error“die”'),你仍然会得到'1'作为答案。 – MathematicalOrchid 2013-03-21 21:27:50

+2

当然,'const'是一个坏名字 - 你可以把它称为'const1',它实际上可以被定义为'const1 = const 1'。像大多数Prelude函数一样,名称'const'不应该用于其他任何事情。 – leftaroundabout 2013-03-22 00:50:20

回答

8

是的,没错。 const,正如你所定义的那样,当它被评估时总是会产生1,而不管它是什么论点。由于论证与结果无关,因此不予评估。因此,评估参数可能导致的任何错误或不终止都不会发生。