[英]How to force the evaluation of a lambda term in haskell to the strong normal form
我想知道是否有可能在Haskell中关闭惰性评估。
我想将lambda项的评估强制为强范式。
例如:我希望将\\x -> (\\y -> y) x 1
减少为\\x -> x 1
提前致谢。
你做不到 原因是Haskell不应该执行lambda词条缩减。 Haskell将程序(lambda术语) 评估为值。 这样做的一种可能性是真正执行lambda项减少,但是效率很低。 因此,Haskell编译器改用了许多复杂的技术,例如图形约简。 因此,在评估过程中您无法观察到(\\x -> x) y
vs y
差异-没有实际的lambda项可观察。
请注意,GHC具有NFData
类型类,该类允许使用rnf
- r-归纳为n-正规f -orm来评估其正常形式的术语(但仅乘积或副产物,它仍然不评估lambdas下的术语,如@JakeMcArthur所指出的那样)出)。 但是,这不能让您访问用lambda术语表示的普通形式。 它仅告诉Haskell在计算过程中执行此评估。
超级编译器可以解决这个问题。 目前,没有任何工具可以与当前的ghc和当前的软件包真正兼容。
有一个较旧的超级编译器实现: http : //community.haskell.org/~ndm/supero/
如果您对一些较新的注意事项感兴趣,则可能会感兴趣: http : //pure.ltu.se/portal/files/2231262/nwpt08-scp.pdf
但是,我不能提出适当的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.