2

次の例を考えると

foldr(\ x y -> ........

入力がリストの場合、たとえば[1,2,3]

xとは何ですか?yとは何ですか?

4

2 に答える 2

5

のタイプを見てみましょうfoldr

foldr :: (a -> b -> b) -> b -> [a] -> b

xとを使用する関数を提供しているのでy、タイプからxがリスト([1,2,3])の値になり、yはアキュムレータ値である必要があります。これは2番目のパラメータで初期化されますfoldr

于 2012-10-11T02:47:52.630 に答える
4

の定義foldr

foldr f z []     = z
foldr f z (x:xs) = f x (foldr f z xs)

あなたはそれをあなたの例に直接適用することができます:

foldr (\x y -> foo x y) z [1,2,3]
=
(\x y -> foo x y) 1 (foldr (\x y -> foo x y) z [2,3])
=
foo 1 (foldr (\x y -> foo x y) z [2,3])

そうxです1、そしてyですfoldr (\x y ...) z [2,3])

一般に、リスト内のすべてを、に、およびをfoldr f zに置き換えると考えることができます。したがって= (=から。(:)f[]zfoldr f z [a,b,c,d]f a (f b (f c (f d z)))[a,b,c,d](:) a ((:) b ((:) c ((:) d [])))

于 2012-10-11T07:03:12.730 に答える