6

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

4

1 回答 1

9

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

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

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

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

于 2014-08-31T20:56:27.800 回答