『プログラミングHaskell』の13章を読みました。
第13章 プログラムの論証
全体を通して,面白い内容ですが,特に「13.5 リストに対する数学的帰納法」以降の展開が面白いですね。
こんな感じです。
1. 多くの再帰関数は,連結演算子を用いて定義すると自然に定義できる。
2. 例えば,reverseも以下のように定義できる。
reverse :: [a] -> [a] reverse [] = [] reverse (x:xs) = reverse xs ++ [x]
3. しかし,連結演算子が使われていると,非常に効率が悪い。
4. 数学的帰納法を用いて関数reverseの定義から連結演算子を除去し,効率を向上させよう。
reverse' :: [a] -> [a] -> [a] reverse' [] ys = ys reverse' (x:xs) ys = reverse' xs (x:ys) reverse :: [a] -> [a] reverse xs = reverse' xs []
5. 数学は,効率のよいプログラムを導くための優れた道具なのである!
読了!
すがすがしい気持ちです。文章の表現力が乏しいので,今のわくわくする気持ちをうまく表現することが出来ませんが,初めて外国に行って異文化に触れたときの気持ちに似ています。