在 Haskell 中,lambdas 被认为是在 WHNF 中,而未应用的用户定义函数则不是。这种区别背后的动机是什么?
问问题
309 次
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 回答