タグ付けされた質問 「weak-head-normal-form」

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)) …

1
Haskellsウィークヘッドノーマルフォーム
私はいくつかのイライラするものにつまずきました。私はhaskellが弱い頭の正規形(WHNF)で機能することを知っており、これが何であるかを知っています。次のコードをghciに入力します(私の知識では、式をWHNFに削減する:sprintコマンドを使用しています)。 let intlist = [[1,2],[2,3]] :sprint intlist 与えintlist = _これますが、完全に私には意味。 let stringlist = ["hi","there"] :sprint stringlist 与えstringlist = [_,_] これは、すでに私を混乱させる。しかしその後: let charlist = [['h','i'], ['t','h','e','r','e']] :sprint charlist 意外と与える charlist = ["hi","there"] 私がHaskellを理解している限り、文字列は文字のリストに他なりません。これは、型"hi" :: [Char]とを確認することで確認できます['h','i'] :: [Char]。 私の理解では、上記の3つの例はほぼ同じ(リストのリスト)であり、したがって同じWHNF、つまり_に削減する必要があるため、混乱しています。何が欠けていますか? ありがとう
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.