[解決済み] foldrはどのように機能するのですか?
2023-04-26 14:10:10
質問
どなたか
foldr
はどのように機能するのでしょうか?
これらの例を見てみましょう。
Prelude> foldr (-) 54 [10, 11]
53
Prelude> foldr (\x y -> (x+y)/2) 54 [12, 4, 10, 6]
12.0
これらの実行に戸惑っています。何か提案はありますか?
どのように解決するのですか?
foldr
はリストの右端から始まり、与えられた関数を使って各リストのエントリとアキュムレータの値を結合します。 結果は、すべてのリスト要素で "fold"した後のアキュムレータの最終的な値です。 その型は
foldr :: (a -> b -> b) -> b -> [a] -> b
となっており、ここからリスト要素(型は
a
型) が与えられた関数の最初の引数で、アキュムレータ (型は
b
型)は第2引数である。
最初の例では
Starting accumulator = 54
11 - 54 = -43
10 - (-43) = 53
^ Result from the previous line
^ Next list item
で、出た答えが53。
2つ目の例です。
Starting accumulator = 54
(6 + 54) / 2 = 30
(10 + 30) / 2 = 20
(4 + 20) / 2 = 12
(12 + 12) / 2 = 12
ということで、結果は12です。
編集:追記するつもりでしたが、これは有限のリストに対するものです。
foldr
は無限リストでも動作しますが、まず有限のケースを理解するのが一番だと思います。
関連
-
[解決済み】haskellでリストを逆順にする
-
[解決済み】代数的なデータ型の代数を悪用する - なぜこれが有効なのか?
-
[解決済み] Haskellにはなぜ "data "と "newtype "があるのですか?重複] [重複] [重複
-
[解決済み] Haskellのリストを参照する際の「@」記号の意味は?
-
[解決済み】プログラミングの文脈で「calgebra」とはどういう意味ですか?
-
[解決済み] GHCでコンパイルした小さなHaskellプログラムを巨大なバイナリにする
-
[解決済み] 無限リストでのfoldlとfoldrの動作
-
[解決済み] Haskellのmapにはfmapがあるのに、何の意味があるのだろう?
-
[解決済み] Haskellの合成演算子(.)とF#のパイプ転送演算子(|>)の比較
-
[解決済み] Data.Voidの不条理な関数って何に使うの?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】なぜパースエラーになるのか?インデント?
-
[解決済み] Haskell - Ord aの型は何を意味するのでしょうか?
-
[解決済み] モナドはエンドファンクタのカテゴリではただのモノイドですが、何か問題でも?
-
[解決済み] IntとIntegerの違いは何ですか?
-
[解決済み] GHCはなぜこんなに大きいのか/大きいのか?
-
[解決済み] Haskellデータ型のメモリフットプリント
-
[解決済み] GHCiから言語拡張を有効にするには?
-
[解決済み] リストからn番目の要素を得るには?
-
[解決済み] Haskell エラー 入力 `=' のパースエラー
-
[解決済み] インデックス付きモナドとは?