1

Haskell で遅延評価をオフにできるかどうか疑問に思っていました。
ラムダ項の評価を強正規形に強制したいと思います。

例:私は次のよう\x -> (\y -> y) x 1になりたいです\x -> x 1

前もって感謝します。

4

2 に答える 2

1

あなたはそれをすることはできません。その理由は、Haskell がラムダ項簡約を実行することを想定していないためです。Haskellはプログラム (ラムダ項) を値に評価します。これを行う方法の 1 つの可能性は、実際にラムダ項の縮約を実行することですが、これは非常に非効率的です。そのため、Haskell コンパイラは、代わりにグラフ削減などの多くの高度な手法を使用します。(\x -> x) yしたがって、評価プロセス中にvsなどの違いを観察することはできませんy。観察される実際のラムダ項はありません。

GHC には、 - r -educe to n -ormal fNFData -ormを使用して項を通常の形式に評価できる型クラスがあることに注意してください(ただし、@JakeMcArthur が指摘したように、製品または副産物のみ、ラムダの下で項を評価しません)。 . ただし、これでは、ラムダ項として表現される通常の形式にアクセスできません。計算中にこの評価を実行するよう Haskell に指示するだけです。rnf

于 2013-07-12T07:05:35.947 に答える