Mae向きなブログ

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

13章分の13章

プログラミング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. 数学は,効率のよいプログラムを導くための優れた道具なのである!

読了!

すがすがしい気持ちです。文章の表現力が乏しいので,今のわくわくする気持ちをうまく表現することが出来ませんが,初めて外国に行って異文化に触れたときの気持ちに似ています。