- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Haskell 中,lambda 被认为是 WHNF,而未应用的用户定义函数则不然。这种区别背后的动机是什么?
最佳答案
将信息附加到需要在计算函数之前计算的函数通常很有用,但随后可以在调用之间共享。
cleverFunction = \x -> simpleCombine x expensiveConstant
where expensiveConstant = ...
simpleCombine x c = ...
请注意,虽然 cleverFunction
被定义为 lambda,但由于 where
block ((\l x -> .. .) locBindings
).
没有任何封闭作用域的 lambda 没有可以在调用之前计算的变量(lambda 中的变量仅对单次调用有效,并在之后被垃圾收集),即它已经在正常形式(实际上是 NF,而不仅仅是 WHNF)。
关于haskell - 为什么 Haskell 认为 lambda 抽象是弱头范式(WHNF)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25596173/
AFAIU Haskell compiler 生成的目标文件应该是机器码。该目标文件是否具有原始 AST 的表示形式?并在运行时减少它,或者这种减少发生在编译时和最终 WHNF值转换为相应的机器代码。
Haskell's Data.Set page说: Key arguments are evaluated to WHNF 在其“严格性属性”部分。 但是,我想知道为什么 WHNF 足以构建 Sets
由于newtype s 在编译期间被有效地删除,它们没有 thunk,只有值。那么如果我使用 rseq 请求它的 WHNF 会发生什么? ?例如在 Sum (lengthyComputation ::
我了解 ( I think ) Haskell 的 seq ,将(通常)reduce它的第一个参数 WHNF ,并在 GHCi 中看到这种行为: λ> let x = (trace "foo" Foo
我正在尝试优化一个旨在获取大型数据集的库,并且 然后对其应用不同的操作。现在图书馆正在工作,我想要 来优化它。 我的印象是非严格评估允许 GHC 组合操作,以便数据只迭代一次 编写函数的顺序,以便对参
这个问题已经有答案了: Why is a built-in function applied to too few arguments considered to be in weak head no
这个问题在这里已经有了答案: :sprint for polymorphic values? (1 个回答) 3年前关闭。 在一个简单的例子中,通过打印将 WHNF 转换为 NF 效果很好 Prelu
我是一名优秀的程序员,十分优秀!