2013-03-21 98 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,而不管它是什麼論點。由於論證與結果無關,因此不予評估。因此,評估參數可能導致的任何錯誤或不終止都不會發生。