タグ付けされた質問 「strictness」

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

7
Haskellの厳格なポイントは何ですか?
Haskellがデフォルトで怠惰であることを私たちは皆知っています(または知っているはずです)。評価する必要があるまで、何も評価されません。それでは、いつ何かを評価する必要がありますか?Haskellが厳密でなければならない点があります。私はこれらを「厳格なポイント」と呼びますが、この特定の用語は思ったほど広くはありません。私によると: Haskellでの削減(または評価)は、厳密な点でのみ発生します。 だから問題は:Haskellの厳格なポイントは、正確には何ですか?私の直感ではmain、seq/ビッグバンパターン、パターンマッチング、およびIOを介しmainて実行されるすべてのアクションが主要な厳密ポイントであると述べていますが、なぜそれを知っているのか本当にわかりません。 (また、これらは「厳密ポイント」と呼ばれていない場合、何をしている彼らが呼ばれます?) 良い答えには、WHNFに関する議論などが含まれると思います。また、ラムダ計算に影響を与えるかもしれないと思います。 編集:この質問に関する追加の考え。 私がこの質問を反映したように、私は厳密さの点の定義に何かを追加するほうがより明確になると思います。厳密なポイントは、さまざまなコンテキストとさまざまな深さ(または厳密さ)を持つことができます。「Haskellでの削減は厳密なポイントでのみ発生する」という私の定義に戻り、その定義にこの句を追加しましょう:「厳密なポイントは、周囲のコンテキストが評価または削減されたときにのみトリガーされます」。 それで、私があなたに私が欲しい種類の答えから始めさせようと思います。main厳格なポイントです。これは、そのコンテキストの主要な厳格なポイントであるプログラムに特別に指定されています。プログラム(mainのコンテキスト)が評価されると、mainの厳密性ポイントがアクティブになります。メインの深さは最大です。完全に評価する必要があります。メインは通常、IOアクションで構成されます。IOアクションは厳密性のポイントでもあり、そのコンテキストはmainです。 seqでは、これらの用語でパターンマッチングについて話し合い、パターンマッチングを試してください。関数適用のニュアンスを説明してください:どのように厳密ですか?いかがですか?どうdeepseqですか?letとcaseステートメント?unsafePerformIO?Debug.Trace?トップレベルの定義?厳密なデータ型?バンパターン?等seqまたはパターンマッチングの観点から説明できるこれらの項目の数は?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.