Mat*_*eon 6 haskell weak-head-normal-form
在Haskell中,lambdas被认为是在WHNF中,而未应用的用户定义函数则不是.这种区别背后的动机是什么?
在您可以评估函数之前将信息附加到需要计算的函数通常很有用,但之后可以在调用之间共享.
cleverFunction = \x -> simpleCombine x expensiveConstant
where expensiveConstant = ...
simpleCombine x c = ...
Run Code Online (Sandbox Code Playgroud)
请注意,虽然cleverFunction
被定义为lambda,但由于where
块(糖(\l x -> ...) locBindings
),它不在WHNF中.
没有任何封闭范围的lambda没有可以在调用之前计算的变量( lambda中的变量仅对单个调用有效,之后进行垃圾收集),即它已经处于正常形式(实际上是NF,而不仅仅是WHNF) .