Lisp の調べ  Android の調べ  将棋の調べ  鉄道の調べ  ビールコレクション

Lisp とその仲間たち - Lisp の調べ

Software Design 2015年8月号 に執筆した「気軽に試してみよう!今こそ Lisp 入門」の増補版の付録です。

Lisp の調べ

増補版:気軽に試してみよう!今こそ Lisp 入門

A1. Lisp とその仲間たち 〜私の上を通り過ぎていった Lisp たち
LISP50
Utilisp
ELISP (for EMACS on PDP-10)
GNU Emacs Lisp
Symbolics
Scheme
TAO
Common Lisp the Language (CLtL)
(予定)Lucid Common Lisp (SUN Common Lisp)
(予定)Kyoto Common Lisp
(予定)OKI Common Lisp (Tachyon Common Lisp)
(予定)Golden Common Lisp
(予定)Interleaf Lisp
(予定)OKI ISLisp
MIDP Lisp (おまけ)
A2. 関数型プログラミングのネタ帳
ラノベ風関数型プログラミング
関数型プログラミング検定
A3. Lisp パロディ
かっこぐらし!
カッコはコンピュータにS式を産む

1. Lisp とその仲間たち 〜私の上を通り過ぎていった Lisp たち

最初の頃の Lisp 処理系は、記憶に頼って書いていますので、間違いがある可能性があります。

(1) LISP50

1983年頃に初めて使った Lisp 処理系。OKI のミニコン System 50/40 上で動作する Lisp 処理系。
太田義勝らによって開発された。(確か)FORTRAN で記述されていたように記憶している。
コンソールのタイプライタで打鍵して、その結果をコンソールのプリンタに印字する(ディスプレイレス?!な)会話型処理系。

トップに戻る

(2) Utilisp

名古屋大学の大型計算機センターにあった Lisp 処理系。
1983年〜1985年に掛けて、(少しだけ)使った。

トップに戻る

(3) ELISP (for EMACS on PDP-10/PDP-11)

日本電信電話公社(現NTT)の武蔵野通信研究所にあったミニコン PDP-11 の EMACS エディタ上で動作していた LISP。
それが ELISP であったか、それとも別の方言であったかは記憶があいまい。 LISP の前に1文字だけだったという記憶があるが。
しかし Lisp 風構文規則であるだけで、Lisp ではなかった。また GNU Emacs Lispとは無関係。
EMACS のスクリプト言語としては便利な存在であったのは確か。例えば a のキーでも簡単にカスタマイズできた。(今の GNU Emacs と同じ)。

トップに戻る

(4) GNU Emacs Lisp

GNU Emacs 上で動作していた Lisp。本物(?)の Emacs Lisp。
沖電気にあった SUN 1/2/3 上にインストールしていた GNU Emacs 上で動作していた。
Lisp とエディタが渾然一体になっている様はまさに素晴らしい!
これで色々なプログラムを作成した。ジョーク系のプログラムも作成し、fj.jokes で((* *))賞やさいと賞などを受賞した。
社内のみ公開したプログラムに、Emacs のメッセージをラムちゃん(もちろん、うる星やつらのラムちゃん)のメッセージにするというものがあった。
後に OKI Common Lisp 用に Emacs インタフェースを作って、Emacs から OKI Common Lisp を使えるようにした。

トップに戻る

(5) Symbolics

大学や企業の計算機室に置いてあって、AI(人工知能)が流行っているころ(1980年代)は見学コースになっていた。
Lisp マシンであったので、Lisp 処理系よりも最初に、キーボードにメタキーやハイパーキーなどがあることに驚いていた。
そして「コンパイルコードの実行速度は何も触れずに」そのインタプリタの速さを強調していた。
そこでのいじわるな質問は「コンパイルコードの速度」と「他言語インタフェース」であったが、いつもしていると嫌われた。

SYmbolics で動作する Lisp 処理系はMacLisp - Lisp machine Lisp - ZetaLisp と呼ばれているが、 後の Lisp マシンでのリファレンスとされていた。 Common Lisp が登場してからは、その地位は CL に移った。

Lisp マシン ELIS の開発に携わっていた著者も、Symbolics はリファレンスであり、ライバルであり、大きな存在であった。

トップに戻る

(6) Scheme

Scheme は小さな Lisp 処理系であり、Lisper が最初に作る処理系であった。
scheme は継続を作るのが少し面倒であったが、他の高級言語(例えば、C言語)で作れば、簡単に作れる言語であり、 著者らも、スクリプト言語として、scheme の拡張版を作っていた。
一方、Common Lisp などの本格的な Lisp 処理系は、高級言語で作るのでなく、アセンブラで作るのが当たり前の時代であり、 こちらの実装は面倒であった。
これらの理由は「C で作れば、C よりも速い Lisp は作れない」という暗黙的・明示的な理由であったが、一方、scheme は実験的か、スクリプト言語で 作ることが多く、C よりも遅くとも、そもそも速度をあまり気にしなくていい言語であった。

トップに戻る

(7) TAO

TAO は電電公社武蔵野通信研究所で竹内郁雄や奥乃博、大里延康、日比野靖らによって開発されたリスプマシン ELIS 上で動作している Lisp である。
初期の TAO と Common Lisp 化された後期の TAO があるが、ここでは初期の TAO について書いていく。
なお筆者は最初は TAO の文字列関数のマイクロプログラミングを担当していた。

TAO はユニークな Lisp であり、Lisp + SmallTalk + Prolog をキャッチフレーズにしていた。その後に Fortran も C も加わったが。
Lisp 自身とバックトラックを含んだパターンマッチを組み込んで Prolog 風にするまではユニークと言えないが、次からがユニークな面である。
メッセージパッシングは [object selector argument1 ...]の構文であった。これを SmallTalk 風としていた。
これを発展させて、(a b c)のときに、a が関数でないときは、b を関数(またはセレクタ)として実行するものであった。
つまり、(1 + 2) は 3 を返すような中置記法 infix notation(代数記法 argebraic notation)が可能であった。

ELIS は Lisp マシンであり、プロセッサからハードウェア、OS から各種ミドルウェア、ライブラリまで、すべて開発した。
ELIS プロセッサは Lisp インタプリタに特化したプロセッサであり、マイクロプログラミング方式のプロセッサであった。 ちなみにマイクロプログラミングの表記は Lisp の S 式の表記であった。さすが Lisp マシンと言ったところであろうか。
OS からネットワーク、ファイルシステムなどもすべて Lisp プログラムまたはマイクロプログラムで記述していた。 プロセッサが Lisp 向きなので OS の記述も Lisp の相性が良く、特にオブジェクト指向で書かれた初期の OS であったと思う。

ELIS は 8100シリーズと8200シリーズがあるが、ELIS プロセッサもシリーズによって改良された。
またデバイスを制御するフロントエンドプロセッサはインテルの汎用プロセッサを使用していた。

トップに戻る

(8) Common Lisp the Language (CLtL)

いよいよ、Common Lisp の登場になった。 Common Lisp は Guy.L.Steel Jr.を中心としてまとめていた Lisp で、戦国時代の Lisp を統一することを目指していた。
実は TAO/ELIS を開発中に Common Lisp の波が来たので、TAO を Common Lisp 化するという仕事も行った。
この Common Lisp 化で、特徴的な TAO の特徴が特徴的でなくなった。。。

日本でも、AI(人工知能)ブームのとき、この Common Lisp を翻訳・調査するという委員会が電子協(現在の JEITA の前身)であった。
井田昌之(青山学院大学)が委員長をしていた Common Lisp 委員会である。私もこの委員会のサブWGに参加していた。

Common Lisp 以前は MacLisp と InterLisp. Zetalisp の巨頭があり、Common Lisp はこれらの Lisp 処理系の影響を受けていた。 しかし、純粋な後継ではなく、多くの箇所で後の Lisp で当たり前になったアイディアが入っていた。
レキシカルスコープもスペシャル変数の外出しもそうであり、オブジェクト指向機能では generic function という新しい考えも導入された。

(この Common Lisp の項、まだ続きます)

トップに戻る

(o1) MIDP Lisp (おまけ)

携帯電話などに搭載されていた JavaME/MIDP 上で動作するように、作成した Lisp 処理系。
JavaME/MIDP で数百行程度の小さな Lisp 処理系。

トップに戻る

ラノベ風関数型プログラミング

キャラ設定

ラムダ
メインヒロイン。千三つツンデレ。1000回に3回しかデレない強度のツンデレ。 関数型プログラミングのエキスパートであるが、間違えたときでもそのまま押し通す。 戦場が原ひたぎや御坂美琴がモデル。

クロージャ
ヒロイン。お姉様風ヤンデレ風天然系。関数型プログラミングで知っていることは何でも知っている(トートロジー)。 羽川翼やわかば、千反田えるがモデル。

ファンクション
もう一人のメインヒロイン。直情系語り部系純情派。主人公の前では知ったかぶりするが他のヒロインたちの前では聞き上手。 由比ヶ浜結衣や 伊原摩耶花がモデル。

トップに戻る

関数型プログラミング検定

関数型プログラミング検定

再帰プログラミングを実行速度の面から、論じなさい。
副作用の功罪を論じなさい。
関数型プログラミングは何故浮き世離れしているのかを手続き型(命令型)プログラマの視点で論じなさい。
関数型プログラマは何故うっとしいのかを、世間一般からの視点で論じなさい。

関数型プログラミング検定はなさそうなので、今がチャンスです。・・・ってそうか?

なお、lisp検定は、既に私がAndroid版を作って、公開しています。 英語版で lisp skill exams で検索してみてください。海外からのダウンロードが多いアプリです。 確かに、2000ダウンロードは超えています。 Common LispとISLisp,両方互換です。ってステマ?

トップに戻る

Lisp パロディ

かっこぐらし!

海法紀光原作、千葉サドル作画の「がっこうぐらし!」が元ネタ。
オブジェクトのゾンビ(ガベージ)だらけになった Lisp 処理系で、そこでプログラミングしながらサバイバルする女子高生たちの非日常系的日常系漫画。

トップに戻る

カッコはコンピュータにS式を産む

クリフォード・ストール著の「カッコウはコンピュータに卵を産む」が元ネタ。
アトムが宇宙創生のとき出現し、カッコはそのアトムを使ってコンピュータにS式を生む。S式はリスプを創造する。これがリスプ創世記である。

トップに戻る


Lisp の調べ  Android の調べ  将棋の調べ  鉄道の調べ  ビールコレクション

Copyright © 2015 GOMI Hiroshi All Rights Reserved