練習問題

入門Haskell―はじめて学ぶ関数型言語」 p.73 より。
①は面倒なだけなのでパス。

②foldr の定義を書きなさい。

foldr は後ろから引数の関数を適用するんだからこうだろう

myFoldr f a x:[] = f x a
myFoldr f a (x:xs) = f x (myFoldr f a xs)

実行。

*Main> myFoldr (++) "d" ["a","b","c"]
"abcd"
*Main> foldr (++) "d" ["a","b","c"]
"abcd"

OK。ちゃんとできてるな。

③reverse は,リストを逆転させる関数です。たとえば reverse [1,2,3] は [3,2,1] になります。この reverse を定義しなさい。

myReverse [] = []
myReverse (x:xs) = myReverse xs ++ [x]
*Main> myReverse "abcde"
"edcba"

こちらもOK。