Posted 2016-12-18 12:07:12 GMT

方言の系統

MACLISP

主要開発者

Jérôme Chailloux

登場時期

1981年頃

特徴

フランスで利用されたポストMACLISPな処理系

概要

Le-Lispは、フランスのINRIAで開発されたLispで、VLSIのシステムを構築する研究の中で生れたようです。

MACLISPの流れを汲んでいますが、世代的には、Lisp Machine Lisp、NIL、Franz Lispあたりになります。

誕生当時、幸か不幸かハードウェアの発展スピードが速く、マシンも様々なものが登場していたため、既存の処理系の上にシステムを構築するのが難しかったそうで、移植性が高い仮想マシン方式でLe-Lispを作製するということになったようです。

高効率と柔軟性が高い

拡張性と統合性が高い

アプリケーションの移植性が高い

処理系間の互換性が高い

が設計のゴールとされました。

Le-Lisp上にオブジェクト指向システムを構築する試みもあり、Ceyxというものが存在したようです。

こちらは、CADシステムを制作するために作られたようですが、Le-Lispも具体的なCeyxも応用ありきな所が面白いですね。

ちなみにCeyxは、オブジェクト指向システムの名でもあり開発環境全体の呼称でもあるそうです。ややこしい。

コード例

基本的にMACLISP系そのものという感じです。

(defun fib (n) (cond ((= n 0) 0) ((= n 1) 1) (t (+ (fib (1- n)) (fib (- n 2)))))) (fib 20) 6765

MACLISP〜Common Lispとはちょっと違う所

ベクタの表記

ベクタは、 #[ 〜 ] で書きます。

#[0 1 2 #[3 4] 5 6]

各種lambda

他、Common Lispと違うのは、fexprを定義する flambda 、macroを定義する mlambda があったりするところです。

この辺りはINTERLISPっぽい気もします。

シンボルとパッケージ

シンボルにはパッケージセルというものがあって、ここにパッケージの情報が格納されるのみというシンプルな方式のようです。

#:p0:p1:p2:sym と書けば、p0のサブのp1のサブのp2パッケージのsymというシンボルということになります。

パッケージの競合等は特になく、パッケージも予め宣言されている必要もないようです。

何も修飾を付けなければグローバルな定義になるようで、また、 :foo のように書いてもグローバルなシンボルのようです。

( n ) ( #:fib:fib n 1 0 ) defun fib (defun #:fib:fib (n a1 a2) (cond ((zerop n) a2) ((= 1 n) a1) (t (#:fib:fib (1- n) (+ a1 a2) a1))))

こんな感じにいきなり書けるのかなあと想像しています(実際に試す環境がないので)

階層パッケージの場合は、実行ファイルのパスのようにシンボルがどの階層に存在するのかを探索することになります。基本的に下から上に辿るようで、この辺りはLisp Machine Lispの階層パッケージと同じようです。

(ちなみに、Lisp Machine Lispで、 :foo と書いたら user パッケージの foo シンボルです(後にキーワードパッケージとして纏められる)

体験

Le-Lispには商用処理系が存在していてLe-Lispの開発は終了しているもののサポートしている所があるようです。

OpenLispを開発しているChristian Jullien氏のところでサポートしているようですね。

また、Software Preservation Group Le-Lispのページからversion 11をダウンロード可能です。

マシンアーキテクチャが不明なのですが、とりあえずUltrixで実行してみたところ、動きました。

しかし、謎のエラーが……。

bash$ ./lelisp ******* Le_Lisp VAX (by INRIA) version 11 (1/Mars/83) sans MI ** input : erreur d entree sortie : -1 On y va (de fib (n) (cond ((or (equal 0 n) (equal 1 n)) n) (t (+ (fib (1- n)) (fib (- n 2)))))) (fib 10) =55

#:package:symbol 形式が使えないようなので、11より後に追加された機能なんでしょう。

まとめ

Le-Lispを紹介してみました。

ヨーロッパ系の処理系ももっと詳しく調べてみたいところですが、なかなか……。

参考文献

■

