为什么Haskell认为lambda抽象是弱头范式(WHNF)?

时间:2014-08-31 20:48:14

标签: haskell weak-head-normal-form

在Haskell中,lambdas被认为是在WHNF中,而未应用的用户定义函数则不是。这种区别背后的动机是什么?

1 个答案:

答案 0 :(得分:9)

将信息附加到需要计算的函数之前通常很有用,然后才能评估函数,但之后可以在调用之间共享。

cleverFunction = \x -> simpleCombine x expensiveConstant
 where expensiveConstant = ...
       simpleCombine x c = ...

请注意,尽管cleverFunction被定义为lambda,但由于where块((\l x -> ...) locBindings的糖),它不在WHNF中。

没有任何封闭范围的lambda没有可以在调用之前计算的变量(变量 in lambda仅对单个调用有效,之后进行垃圾收集),即它已经在正常形式(实际上是NF,而不仅仅是WHNF)。