繁体   English   中英

如何将Haskell中的lambda项的求值强制为强范式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM