Mae向きなブログ

Mae向きな情報発信を続けていきたいと思います。

13章分の6章

今日は,『プログラミングHaskell』の6章を読みました。

第6章 再帰関数

まず,再帰の定番である階乗の例がでてきます。

factorial :: Int -> Int
factorial 0 = 1
factorial (n + 1) = (n + 1) * factorial n

3行目の式が,

factorial n = n * factorial (n - 1)

となっている方が読みやすい気がしますが,この書き方が4章で出てきた「n+kパターン」だと思います。上記のfactorialにはじまり,豊富なサンプルで再帰について説明してあるので,すんなりと読み進めることができました。
しかし,「6.6 再帰の秘訣」の冒頭で,

再帰関数を定義する行為は,自転車に乗るようなものだ。他人が乗っているのを見ると,一見簡単そうに見えるが,初めて自分でこいでみると,まったく不可能に感じる。しかし,練習すれば簡単で自然な行為となる。

とあるように,書いてあることを理解することと,自分で作ることは別なんだろうと思います。
6章の練習問題は,6問ありました。今まで1章から読み進めてきましたが,まだ練習問題の解答は見ていません。分からないときに,解答を見る癖をつけると,ちょっと考えて分からないとき,すぐに解答に頼ってしまうような気がするからです。解答は,本書の練習問題,すべてを考えてから見るつもりです。6章も解答を見ずに取り組みました。自転車の例のように,なかなかうまく書けず時間がかかる問題もありましたが,マージソートが書けたときには,心地よい達成感がありました。Haskellの例としてクイックソートは良く取り上げられ,その簡潔さに驚きますが,マージソートも非常に簡潔に記述できますね。
僕の再帰の理解度は,自転車に補助輪がついたくらいのレベル(幼児レベル)だと思いますが,練習を重ねて早く補助輪を取りたいものだと思います。