【发布时间】:2017-12-09 16:35:17
【问题描述】:
在 Haskell 中,我试图理解严格的概念。我明白了
const x y = x
对第一个参数严格,但对第二个参数不严格。 但是是
ifFun pred cons alt = if pred then cons else alt
严格?它对第一个论点很严格。我知道 cons 和 alt 的评估取决于 pred 的值。这是否意味着该函数对这些参数不严格?
【问题讨论】:
-
惰性求值你了解多少?您需要先了解这一点,然后才能理解严格。
-
只有一个论点的时候,我想你已经很明白了。有了多个参数,它就更加微妙了。有时,就像在
const x y中一样,一个参数被评估,另一个不被评估,所以很清楚。有时,就像在您的另一个示例中一样,我们有“条件严格性”,因为某些参数可能会被评估或不被评估,这取决于其他人。对于这种情况,我不确定一个完全标准的、广泛使用的术语。 (IIRC GHC 的内部严格性分析器称“不存在”那些肯定从未评估过的 args,“严格”那些肯定总是存在的,而“懒惰”其余的) -
顺便说一句,我认为您的疑问是关于多参数情况,而不是单参数情况(我相信您理解)。如果是这样,我建议使标题更准确。