図書館情報学を学ぶ

はてなダイアリーで公開していたブログ「図書館情報学を学ぶ」のはてなブログ移行版です。

LISPについて

やさしいLisp入門

やさしいLisp入門

先日図書館で借りた『やさしいLISP入門』だが、このLISPとは、プログラミング言語のことである。LISPはやたら括弧()の多い言語で知られている。その独特な仕様ゆえに、LISP専用のハードウェアまで開発されたことがあるらしい。
私がLISPを習得したいと思う理由は、私が使っているxyzzyというテキストエディタがこのLISPで拡張できるからである。xyzzyはとにかく拡張性が高く、xyzzyで編集した文章を、はてなダイアリーにボタン一発でアップロードできる拡張LISPまである。私はカスタマイズするのが好きで、最近独自にxyzzyを拡張したいと思っていた。
さて、LISPであるが、実際に『やさしいLISP入門』を読んでみると、かなり独特な文法を採用していることがわかる。例えば、4+5+6という数学式をLISPで表現すると次のようになる。
(+ 4 5 6)
この例は演算記号が一つだけであるからまだ良いのだが、例えば3×5+6÷2のように複数の演算記号を使うと次のように表現される。
(+ (* 3 5) (/ 6 2))
お分かりだろうか。つまり、LISPでは一つの小括弧内では一種類の演算しか行わないのである。
これが、通常のプログラムで見られるA=3×5+6÷2という代入式となるとこうなる。
(let *1
ちなみに、この式を代表的なプログラミング言語であるC言語で表現すると、
int A;
A=(3*5)+(6/2);
となる。
そしてLISPのもう一つの特徴は、変数が持つことのできる値に限りがなく、なんと小数桁もその例外では無いのである。
先のC言語コードの、int A;という部分は、いわゆる「変数の型宣言」と呼ばれるもので、変数が整数の値のみを持つということを意味している。そして、この整数の値は、一般に上限と下限が設定されている。しかし、LISPは型宣言も必要なく、さらに200000000000など膨大な値も変数に納めることができる(仕様となっている)のである、先に言ったとおり小数値も、0.0000000000000002のような非常に細かい値を扱うことができるのである。物理学等の実験においては非常に微少な値を正確に記録する必要があるので、このような仕様はかなり便利なのだろう。
まだまだLISPには面白い特徴が山ほどあるのだけれど、(分数を実装していることとか)もうちょっと『やさしいLISP入門』を読み解いてから紹介することにする。

*1:A (+ (* 3 5) (/ 6 2))))) ((さらに説明すると、このAという変数のスコープは一番外側の小括弧までであり、通常のLISPコードでは、Aの代入式の後に変数Aを使った命令式が書かれる