“Simple is best”――Lispのエレガントな魅力を知る:1分ショートレビュー
Java一辺倒の世の中だが、古き良きプログラミング言語にも目を向けよう。抽象度が高くシンプルにプログラムを書けるLispの魅力をひとたび知れば、あなたも虜になるにちがいない。
ここで紹介する記事は、developerWorksの「境界を越える:Lispの美しさ」です。
プログラミング言語の歴史をひもとけば、1950年代の手続き型言語であるCOBOLから始まり、C言語やSmalltalk、Javaへとつながっていく。この中でLispは、主に人工知能などの研究用途ながら、熱狂的な心奉者を生み出した。しかし残念なことに、Lispが主流となることはなかった。これは、言語が持つ魅力を考えると、マーケティングの失敗だったとしか言いようがない。
現在では主流のJava、そして同じくオブジェクト指向言語であるSmalltalkは、抽象概念として、オブジェクトを取り扱えるのが特徴だ。Lispはそのはるか前から抽象化を志向し、関数からデータに至るまですべてをリストとして扱っている。
本稿では、GNUが提供しているCommon Lispを使って、プログラミング言語の黄金郷であるLispの魅力を存分に紹介している。まずは、データや関数の定義といった基本編から、関数の組み合わせによるリストの処理方法、そして再帰や高階関数に至るまで、具体的なコードも交えて解説している。
奇しくも、本稿の著者と同じ経験をしたのは、手続き型言語から関数型言語への頭の切り替えである。これを乗り越えるには、すべてはリストであることを身をもって知るしかない。しかし、それだけの価値はある。実際に、Lispでプログラムを組んでみると、特別な関数をたくさん覚える必要はなく、意識しなければならないのはリストの構造と括弧の対応だけであることがよく分かるはずだ。
Lispは、元来、インタプリタで動作する。従って、サンプルコードをその場で入力して、すぐに結果を知ることができる。もちろん、コンパイラも付属しているため、それを使えば、実行形式を作成することも可能だ。
中でも、Lispの最大の特徴は、高階関数にあるのかもしれない。高階関数とは、関数を引数にしたり、関数を戻り値としたりする関数を指す。Lispでは、オブジェクト指向よりも高次の抽象化を実現しているため、高階関数を実現するのも、ほかのやり方と何ら違いがなくシンプルに実現できる。少ないコード行でパフォーマンスを犠牲にすることなく、これを実現しているのだ。
複雑な処理でもシンプルに実現できるのがLispの最大の魅力。考えてみれば、人間の頭の中も同じで、難しい問題でも抽象度を上げて解決している。Lispは、それをプログラミング言語として実現しているだけとも言える。
“Simple is best.”これ以外に、Lispを称える言葉は見つからない。その根底には、ほかの言語にはない美しさがある。本稿は、Javaなど最新の言語に浮かれているエンジニアにこそ、読んでもらいたい。
ここで紹介した記事は、developerWorksの「境界を越える:Lispの美しさ」です。
関連記事
- developersLife〜開発者という生き方
- サルでも分かるプログラミング言語の新潮流【前篇】
近ごろプログラマーかいわいで、「関数型プログラミング言語」という言葉をよく耳にするようになった。本連載では、プログラミング言語を取り巻く状況をあらためて俯瞰し、プログラミング言語開発の現場で何が起こっているのかを解説する。 - サルでも分かるプログラミング言語の新潮流【後編】
「ガーベジコレクション」「リフレクション」「アスペクト指向」「クロージャ」「イテレータ」「型推論」など、近年、プログラミング言語の世界に新しい概念が続々となだれ込んでいるように見えます。しかし、この背景には、実はあまり知られていない歴史が隠されているのです。
関連リンク
Copyright © ITmedia, Inc. All Rights Reserved.