概要
Lisp・関数型プログラミングのメリットとは何か――副作用のないプログラミングがまず挙げられます。これでバグが圧倒的に少なくなります。さらにはコードの再利用がしやすいこと,並列処理が得意であるということも。それだけではありません。動的な型付けも特徴ですし,ラムダ計算もクロージャも,さらにはオブジェクト指向までできます。数十年の時を越えて現代にも通用する普遍的なアイデアがLispにはあります。本書はさまざまなLispプログラム(ハノイの塔,エイトクイーン,オンライン書店など)を解説し,さらにリファクタリングまでいっきに学びます。本書で関数型プログラミングのエッセンスを得ることができます。
こんな方におすすめ
- プログラマ(オブジェクト指向プログラマ,昔からのLispプログラマ)など
著者から一言
本書では関数型プログラミングを学ぶために,関数型プログラミングとは何か,なぜ今それを勧めるのか,なぜそれが難しいと思われているのかから始めました。そして副作用のないプログラムこそ関数型プログラミングの本質であると最初に言いました。副作用のないプログラムにするために破壊的な代入文を使うなとか,再帰プログラミングしろ,変更不可なデータ構造を使えなどを言ってきました。しかし本質はそこではありません。副作用のないプログラムが本質で,再帰プログラミングなどは手段です。
そして関数型プログラミングの便利な機能として,高階関数や評価戦略を紹介し,そこで面倒で小難しいことが書いてあったかもしれません。このため,関数型プログラミングは難しいと思われたかもしれませんが,そんなことはありません。難しくありません。もし難しいと感じても,そんなことは気にせず,気軽に少しずつわかるところから関数型プログラミングを楽しんでください。これが本書を執筆した想いになります。
もし関数型プログラミングの道に迷ったら,第3章と第5章をもう一度読んでください。関数型プログラミングの概略を誰かに伝えるときは1章を中心に第3章や第5章のプログラムを散りばめることをお勧めします。これできっと関数型プログラミングを布教できます。
「再帰プログラミングはおいしい」そして「副作用は今まで何気なしに使ってきたけれど,実は不思議なものだった」ということを実感してください。でも「繰り返し文による制御も悪くない」,「代入文による副作用は強力な武器だ」という手続き型の考えも大事です。この2つの相反する考えを自分の中で,うまく折り合いを付けてください。これが重要です。関数型プログラミングに傾倒して,他を見なくなることもだめです。逆に関数型プログラミングを無視することでもありません。両方をバランス良く,その中庸が一番の肝心です。
そして関数型プログラミングを楽しんでいってください。このときにLispを一番にお勧めします。きっとLispで関数型プログラミングが楽しく学べることでしょう。エディタでプログラムを編集することも,コンパイルすることも,全部のコードを書くことなく,Lispのトップレベルで1秒以内で動かすことができます。統合開発環境を起動している間に,Lispの関数を3個以上評価することがきっとできます。他の関数型言語よりも気楽に楽しく学べるでしょう。
Lispでしっかりと関数型プログラミングがわかれば,他の関数型言語もきっと楽しく関数型プログラミングの世界へ導いてくれることでしょう。この意味でLispは他の言語の橋渡しになります。本書では第2章でこのLispの超入門を紹介してきました。第2章では関数型プログラミングで必要になる関数を中心に紹介してきました。しかしCommon Lispなどの一般的なLispには非常に多くのシステム関数が用意されています。Lispをもっと学びたい方はLispの入門書を見てください。Lispの面白さがもっと実感できることでしょう。ただし,Lispは純粋な関数型言語ではありません。オブジェクト指向プログラミングでもあり,手続き型プログラミングでもあります。Lisp処理系によっては論理型プログラミングの機能も持っています。そこでLispでこれらの便利で豊富な機能面に嵌まり込まずに,関数型プログラミングを忘れないようにしてください。
関数型脳は作るには,Lispで遊んでみることが一番です。ただしこのときに副作用のあるプログラムを作ってはいけません。オブジェクト脳や手続き型脳になってしまいます。再帰プログラミングは脳の運動にもなります。関数型脳になれば,手続き型の考えから,新鮮な考えができるようになります。
最後にもう一度言います。楽しみながら,関数型プログラミングをしていきましょう。関数型プログラミングの世界はあなたを待っています。
補足
ソースコードのダウンロードもありますので、気軽にLispプログラミングをためしてみてください。