6
ウィークヘッドノーマルフォームとは
何をしない弱い頭正規形(WHNFは)意味ですか?何が頭ノーマルフォーム(HNF)と正規形(NF)の平均? 現実世界のHaskellは次のように述べています: おなじみのseq関数は、式を評価して、headノーマルフォーム(HNFと略記)と呼びます。最も外側のコンストラクタ(「ヘッド」)に到達すると停止します。これは、式が完全に評価される正規形(NF)とは異なります。 また、Haskellプログラマーが弱頭標準形(WHNF)に言及していることを聞くでしょう。通常のデータの場合、弱い頭部の正規形は頭部の正規形と同じです。違いは関数に対してのみ発生し、ここで私たちを心配するのはあまりにも厄介です。 いくつかのリソースと定義(Haskell Wiki、Haskell Mail List、Free Dictionary)を読みましたが、理解できません。誰かが例を挙げたり、素人の定義を提供したりできますか? 私はそれが次のようになると思います: WHNF = thunk : thunk HNF = 0 : thunk NF = 0 : 1 : 2 : 3 : [] WHNFとHNF はどのようseqに($!)関連していますか? 更新 私はまだ混乱しています。HNFを無視するという回答もいくつかあります。さまざまな定義を読むと、WHNFとHNFの通常のデータに違いはないようです。ただし、関数に関しては違いがあるようです。違いがなければ、なぜseq必要なのfoldl'ですか? 混乱のもう1つのポイントは、Haskell Wikiからです。これは、seqWHNFに換算すると述べており、次の例には何もしません。次にseq、評価を強制するために使用する必要があると言います。それはそれをHNFに強制していませんか? 一般的な初心者スタックオーバーフローコード: myAverage = uncurry (/) . foldl' (\(acc, len) x -> (acc+x, len+1)) …