1

2回目の指導の結果を少しずつ説明してもらえますか?

この場合、foldrがどのように機能するかを知っています。

foldr (*) 1 [-3..-1]
-6

しかし、foldr式で関数(\ yz-> y * 3 + z)を処理する方法がわかりません。

foldr (\y z -> y*3 + z) 0 [1..4]
30
4

1 に答える 1

4

foldrの定義を見てみましょう。

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

さて、あなたの例では、

f y z = y*3 + z

したがって、定義を使用するだけです。

foldr f 0 [1..4] = 
f 1 (foldr f 0 [2..4]) =
f 1 (f 2 (foldr f 0 [3,4])) =
f 1 (f 2 (f 3 (foldr f 0 [4]))) =
f 1 (f 2 (f 3 (f 4 (foldr f 0 [])))) =
f 1 (f 2 (f 3 (f 4 0))) =
f 1 (f 2 (f 3 12))) = 
f 1 (f 2 21) =
f 1 27 =
30
于 2013-01-13T13:19:27.543 に答える