もっと楽しむ! プログラミング言語 「豆」談義

第1回 古くて新しい関数型言語「Lisp」

この記事を読むのに必要な時間:およそ 2.5 分

はじめに「僕たちは今……」

人間の思考に,ことば――すなわち言語は欠かせないものです。考えごとをするときに,ことばを使っていない人はいないでしょう。

さて,僕達は今,コンピュータを身近に感じる世界にいます。

コンピュータというのは,ハードウェアとソフトウェアに大きく分けることができますが,ソフトウェアはさまざまなプログラミング言語を用いて書かれたプログラムで構成されています。

プログラムの重要さは,コンピュータのハードウェアを変更しなくても,中のプログラムを変えることによってコンピュータの用途を「計算」「文書作成」「ゲーム」「勤怠管理」「ショッピング」と変えることができることからもわかります。つまり,皆さんが「コンピュータって便利だね」と,言うときに指すコンピュータとは,プログラミング言語で書かれたプログラムのことなのです。

そのプログラミングの始まりは,チャールズ・バベッジが作成した解析機関用に書かれたもので,そのプログラムを書いたのはバベッジの助手であったエイダ・ラブレス女史だという説があります(最近ではエイダ女史ではなく,バベッジが書いたというのが定説だそうです)。

バベッジの解析機関から始まったプログラミング言語は,今,僕がネットで確認しただけでも200以上の種類があるわけですが,皆さんは,その中でどのくらいのプログラミング言語をご存じでしょうか。

たとえば,プログラミング言語の中には,皆さんも知っているif文だとかfor文のような演算子が存在しないものも多くあります。でも,if文がなかったら「iは3より大きいか」という分岐はどうやって作るのでしょう。また,「X=Y(XはYと等しい)」「Y=Z」という情報から「X=Z」という推論を導き出すのが得意だというプログラミング言語もあります。推論が得意なんて,一体どういう分野で使われるプログラムを作るものなのでしょうか。

プログラミング言語の生い立ちには,プログラム言語を開発する人やその時代などいくつもの背景が存在します。計算を素早く行いたい,人工知能を作りたい,子供でも書けるようにわかりやすくしたい,インタラクティブなメディアを作るためなどなど――そうした自分の知らないプログラミング言語を,ちょっとだけでも知ることは,子供の頃,北京語やドイツ語や日本と異なることばの「こんにちわ」を覚えるのが面白かったのと同じで楽しいのではないでしょうか。

この連載は,そんな子供の頃の知識欲を満足させる遊びを,プログラミング言語で再現してみようと思い立ったところが出発点です。ですから,いろんなプログラミング言語を題材に面白い話を書いていければいいなぁ――と思っています。

さあ,古くて新しいLISPを体験してみませんか?

一番はじめに紹介するプログラミング言語はLISPです。なぜLISPが最初かと言うと,今回紹介していく予定のプログラミング言語のなかで一番古いからです。

LISPは連載を予定している言語を含めた数あるプログラミング言語の中でも昔からある部類になります。COBOLやFORTRANと同時代からある由緒正しいプログラミング言語なのです。読者の中には,「なんだ今さら古い言語かよ」と思う方もいらっしゃるかもしれませんが(私も最初はそうでしたが……),古いからと言って見くびってはいけません。LISPには,他の言語に参考にされる技術やアイディア,他の言語にはないパラダイムなど,今でも画期的な技術要素が満載です。LISPを説明する上では,その出自から数学理論など難しい単語がたくさん出てきますが,今回はそのような難しい話は抜きに,普段Javaや.Netなどのプログラミングに飽きた方に,こんな言語が昔から合ったのかと思っていただけるようにLISPの紹介をしてみたいと思います。

LISPの誕生

LISPは1958年に考案されました。これは先ほども説明しましたが,現在使われている言語の中ではFORTRANについで古いプログラミング言語です。当初は数学理論のラムダ計算――そんな数学モデルがある程度に思ってください――に用いる言語として使われていましたが,その数学理論を背景とした表現力と柔軟性から人工知能の分野で盛んに使われるようになりました。そして普及して使われるようになるとLISPの実装の容易性から,さまざまなLISPの方言(LISPの一種という意味)が生まれることになりました。

今現在,LISPと一言で言っても,標準化された正統派のCommon LISPや,Emacs LISP,Interlisp,schemeなどたくさんのLISPが出てきます。それぞれの方言は,特徴的な機能が初期のLISPにプラスアルファされて発展してきました。その中でもInterlispは,現在,Java界隈で注目されているAOPの機能が実装されていたり,さらに,Interlispの開発環境であるInterlisp-Dでは,今のEclipseなどの統合開発環境に相当する,対話型開発ツールやデバッカなどが実現されていました。ちなみにそれは1980年代半ばの頃です。その当時の一般的な業務系システムの開発環境が,メインフレームに文字ベースのTSS端末※1だったことを考えると,相当先進的だったことが窺えます。

余談ですが,弊社には当時からLISPをバリバリ使っていたと言う猛者が何人かいます。当然,そのような人も時代の波によりJavaの開発をするわけですが,EclipseやAOP,DIなど新しめの技術を見ても,「そんなの昔からあったよ!」と,何を今さら感を込めて言うのですが,LISPの当時の時代背景を見直すと,昔からあった技術が一般化されてきているだけなのだとあらためて考えさせられることがあります。

※1 TSS
Time Sharing Systemの略

著者プロフィール

チーム北海道

居酒屋北海道をこよなく愛するエンジニア集団(伊藤清人,江川崇,荻原利雄,長谷川裕一,吉野雅人 以上株式会社豆蔵所属)。

URLhttp://www.mamezou.com/

コメント

コメントの記入