私はYAHT の再帰的データ型セクションの演習を行っていましたが、関数を書くのが少し難しいことに気付きました (主な理由は、最初はとlistFoldr
の違いがよくわからなかったからです)。関数がどのように機能するかを最終的に正確に理解したとき、関数を関数に変更するために必要なのは関数の引数の単純な交換だけであると判断しました。foldl
foldr
foldr
listFoldl
listFoldr
listFoldl f i [] = i
listFoldl f i (x:xs) = listFoldl f (f i x) xs
listFoldr f i [] = i
listFoldr f i (x:xs) = listFoldr f (f x i) xs
これは機能しているようです(これよりも多くのテストを行いました):
Main> foldr (-) 4 [1, 2, 3]
-2
Main> listFoldr (-) 4 [1, 2, 3]
-2
しかし、演習に与えられた解決策は、私のものとは大きく異なります。それらlistFoldl
は私のものとまったく同じですが、それらを見てくださいlistFoldr
:
listFoldr f i [] = i
listFoldr f i (x:xs) = f x (listFoldr f i xs)
私のソリューションと彼らのソリューションのどちらが優れていますか? それらの1つは間違っていますか?(私のテストでは、どちらもまったく同じ結果になります...)