foldl
の機能には、厳密なアナログfoldl'
が付属しています。 scanl
にはscanl'
の代替が必要ない理由がありますか、それとも単純に標準ライブラリに含まれていませんか?Haskell標準ライブラリにscanl '関数がないのはなぜですか?
9
A
答えて
11
これは必要ありません。 foldl'
の厳密さは、サンクが入力リストを横断するとすぐにサンクを排除することを可能にします。
foldl' (+) 0 [1,2,3] foldl (+) 0 [1,2,3]
foldl' (+) 1 [2,3] foldl (+) (0 + 1) [2,3]
foldl' (+) 3 [3] foldl (+) ((0 + 1) + 2) [3]
foldl' (+) 6 [] foldl (+) (((0 + 1) + 2) + 3) []
6 (((0 + 1) + 2) + 3)
((1 + 2) + 3)
(3 + 3)
6
しかし、あなたはscanl
を行うときに、それはこれらのステップの各1
scanl (+) 0 [1,2,3]
[ 0
, 0 + 1
, (0 + 1) + 2
, ((0 + 1) + 2) + 3
]
を含むリストを作成し、あなたはサンクが強制される方法を制御することができます最終的な結果を見るためにリスト全体を横断しなければなりません。これにより、評価のコントロールがリストの消費者にプッシュされます。
6
まあscanl'
はないがが必要であるならば、私はわからないんだけど、あなたは一般的要素によるscanl
要素の結果を消費するので、それはおそらく、foldl'
よりもはるかに稀が必要である、とあなたが行くように、したがってそれを強制します正確にはfoldl'
のようになります。
関連する問題
- 1. Haskellの標準ライブラリに<<がないのはなぜですか?
- 2. なぜlibstdC++が必要なのですか? C++標準ライブラリの
- 3. CPythonが標準ライブラリに `sphinx.autodoc`を使用しないのはなぜですか?
- 4. C++標準ライブラリがconstexprバージョンのcmath関数を提供しないのはなぜですか?
- 5. Android:Spinnerに標準のデザインがないのはなぜですか?
- 6. WindowsとLinuxの標準ライブラリ関数名が異なるのはなぜですか?
- 7. Haskell標準ライブラリの印刷版
- 8. F#ライブラリには、 `argMax`の標準関数がありますか?
- 9. jedi-vim omni標準ライブラリではない
- 10. 標準のCライブラリ関数名で "string"を "a"に省略するのはなぜですか?
- 11. プロセスコミュニケーションを扱う標準のHaskellライブラリがありますか?
- 12. なぜjQueryはW3C標準ではないのですか?
- 13. なぜデータフロープログラミングは標準ではないのですか?
- 14. C++の標準ライブラリにハッシュテーブルの実装が含まれていないのはなぜですか?
- 15. なぜHaskellのタプルに「一般的な」アクセサ関数がないのですか?
- 16. Pythonの標準ライブラリにループ関数に似た関数がありますか?
- 17. OCaml標準ライブラリに `flip`関数がありますか?
- 18. fgetsのC標準ライブラリ関数
- 19. Elixirには標準的なcurry()関数がありますか?
- 20. ISOのC標準ライブラリの関数strcmpiはありますか?
- 21. Haskellのscanlに相当するRubyとは何ですか?
- 22. Java標準ライブラリがtoStringメソッドを実装していないのはなぜですか?
- 23. 標準に「:nth-of-class」セレクタがないのはなぜですか?
- 24. REST WebサービスにWS- *標準がないのはなぜですか?
- 25. 数学関数用の静的ライブラリがないのはなぜですか?
- 26. GDBの「ステップ」が標準ライブラリ呼び出しの機械語になるのはなぜですか?
- 27. ECMAScript標準でObject.setPrototypeOf(...)が存在しないのはなぜですか?
- 28. Rの標準cov()関数がDSXで動作しない
- 29. 関数C++の標準ライブラリ関数のオーバーロード
- 30. なぜnoexceptは標準ライブラリでそれ以上使用されていないのですか?