1

我想知道是否可以在 Haskell 中关闭惰性求值;
我想强制将 lambda 项评估为强范式。

例如:我想\x -> (\y -> y) x 1减少到\x -> x 1

提前致谢。

4

2 回答 2

1

你不能这样做。原因是 Haskell 不应该执行 lambda 项减少。Haskell将程序(lambda 项)评估为值。如何做到这一点的一种可能性是真正执行 lambda 项减少,但这将是非常低效的。因此 Haskell 编译器使用了许多复杂的技术,例如图形缩减。因此,在评估过程中您无法观察到差异,例如(\x -> x) yvs y- 没有实际的 lambda 项需要观察。

请注意,GHC 具有类型类,它允许使用-r -educe 到n -ormal fNFData -orm将术语评估为其正常形式rnf(但只有产品或副产品,它仍然不评估 lambdas 下的术语,正如@JakeMcArthur 指出的那样) . 但是,这并不能让您访问以 lambda 项表示的正常形式。它只告诉 Haskell 在计算期间执行此评估。

于 2013-07-12T07:05:35.947 回答
0

超级编译器可以解决这个问题。现在,没有一个与当前的 ghc 和当前的软件包真正配合得很好。

存在一个旧的超级编译器实现:http: //community.haskell.org/~ndm/supero/

我对一些新的考虑感兴趣,这可能很有趣: http: //pure.ltu.se/portal/files/2231262/nwpt08-scp.pdf

但是,我也不能提出适当的解决方案。

于 2013-07-17T08:29:42.060 回答