Common Lisp
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/04/27 15:44 UTC 版)
他の LISP 系言語との比較
Common Lisp と最も頻繁に比較対照されるのが Scheme である — これら二つは最も有名な LISP系言語だからだ。Scheme は Common Lisp よりも古く、同じ LISP の伝統から生みだされただけでなく、同じエンジニアのガイ・スティール・ジュニア[注釈 17]が Common Lisp 委員会の議長を務めた。
以前の多くのLispの方言や実装とは異なり、Common Lisp は Scheme と同様な、スコープは静的スコープのみを基本とする仕様である。
Lisp Machine Lisp や MACLISP といった Common Lisp の設計に寄与した実装の多くは、インタプリタでは動的スコープを、コンパイラでは静的スコープ、という挙動になっていた。Schemeはそういったものとは異なり、静的スコープのみであった。Common Lisp は動的スコープをもサポートしているが、明示的な special
宣言が必要である。ANSI Common Lisp のインタプリタとコンパイラの間にはスコープに関しての相異点は全く存在しない。
時々、Common Lisp は「Lisp-2」、Scheme は「Lisp-1」と呼ばれることがある。これは Common Lisp が関数名と変数名(2つ)にそれぞれ独立した名前を備えている事に起因した名前である。しかし、実際には Common Lisp は go
タグやブロック名、loop
キーワードなど多くの名前空間を持っているし、マクロをうまく使えば、構文的に名前空間を追加することも出来る。複数の名前空間に関するトレードオフについて、Common Lisp と Scheme のそれぞれを支持する論争が長いあいだ行われている。Scheme では変数名と関数名の衝突を避ける必要があるため、Scheme の関数はよく lis
や lst
、lyst
といった関数名と衝突しないような引数名を取ることになる。一方 Common Lisp では引数として使う場合に、明示的に関数の名前空間を参照する必要がある。これは上にでてきた sort
のサンプルのように一般的なことである。
Common Lisp はまた、真偽値の扱いが Scheme とは異なっている。Scheme は真と偽の表現として #t
と #f
という特別な値を用いている。Common Lisp は、より古い LISP系言語の伝統に従ってシンボルの t
と nil
[注釈 18]を使っている。Common Lisp においては、if
のような条件式において任意の nil
でない値が真として扱われる。このことは、いくつかのオペレータが述語として働くと同時に、後の計算に使うための有意な値を返すものとして動作する事を可能としている。
Scheme の標準規格は 末尾再帰の最適化 を要求しているが、Common Lisp の規格はしていない。ほとんどの Common Lisp 実装は末尾再帰の最適化を提供するが、それでもプログラマーが最適化宣言を使った場合のみである場合が多い。それにも関わらず、一般的な Common Lisp のコーディングスタイルは Scheme スタイルで好まれるようなあらゆる場合に再帰を使うというやり方とは異なっている。Scheme プログラマが末尾再帰で表現するものを、Common Lisp プログラマーは do
、dolist
、loop
等の反復構文で表現する。
- ^ ごくまれにclispとも。なおCLISPという実装が実在するので混同回避のためあまり用いられない
- ^ 一方で型nullは、オブジェクトNILを表す型である。
- ^ このようなtypespecは、配列の型arrayのvalid type specifierである。
- ^ 英: value cell
- ^ 英: function cell
- ^ 英: cons
- ^ 英: cons cell
- ^ 英: pair
- ^ 英: export
- ^ 英: instance
- ^ 英: declaration
- ^ 英: docstring
- ^ 英: condition
- ^ 英: class
- ^ 英: metaclass
- ^ 英: binding
- ^ 彼は ジェラルド・J・サスマンとともに Scheme を設計した。
- ^
nil
はまた、空リストをも表現する。 - ^ 最近、インタプリタのサポートも試験的に実装されている。
- ^ CLHS: Type ATOM
- ^ CLiki : Unicode support
- ^ Technical Issues of Separation in Function Cells and Value Cells
- ^ 3.1 Evaluation
- ^ 32.6. Quickstarting delivery with CLISP
- ^ History and Copyright - Steel Bank Common Lisp
- ^ Clozure CL History
- ^ http://trac.clozure.com/openmcl
- ^ http://armedbear.org/abcl.html
- ^ http://www.gnu.org/software/gcl/
- ^ http://www.digitool.com/
- ^ http://jatha.sourceforge.net/
- ^ http://www.cormanlisp.com/
- ^ https://github.com/sharplispers/cormanlisp
- ^ http://www.franz.com/
- ^ http://www.lispworks.com/
- ^ http://www.scieneer.com/
- ^ http://www.stsci.edu/resources/software_hardware/spike/
- ^ http://ic.arc.nasa.gov/projects/remote-agent/
- ^ 「2003 年 1 月、ヤフーは新しいバージョンの、C++ と Perl で書かれたエディタ(訳注: Viawebのシステムのうち、Lispで書かれていた、サイトを構築するシステムの部分)をリリースした。それは『もはやプログラムは Lisp で書かれていない』というよりも『プログラムを C++ に変換するために Lisp インタプリタを書いた』というようなものであった。私の知る限り、すべてのページ生成テンプレートのソースファイルは依然として Lisp コードのままだった(「グリーンスパンの第10法則」を見よ)。」、ポール・グレアム、Beating the Averages
- ^ http://all-things-andy-gavin.com/2011/03/12/making-crash-bandicoot-gool-part-9/
- ^ ページ下部,開発者のコメント http://dwave.wordpress.com/2011/05/20/learning-to-program-the-d-wave-one-software-you-should-install-a-book-you-should-buy/
- ^ http://www.dwavesys.com/careers/senior-software-developer
- ^ http://www.itasoftware.com/about/index.html
- ^ http://www.izware.com/
- ^ http://www.izware.com/mirai/
- ^ http://www.piano.aero/
- ^ http://www.xanalys.com/
- ^ http://www.genworks.com/
- ^ http://www.noteheads.com/
- ^ http://compo.sourceforge.net/
- ^ http://lisa.sourceforge.net/
- 1 Common Lispとは
- 2 Common Lispの概要
- 3 スコープ
- 4 他の LISP 系言語との比較
- 5 実装
- 6 著名なアプリケーション
- 7 参考文献
- 8 外部リンク
固有名詞の分類
プログラミング言語 |
Pure Data MHEG-5 Common Lisp Icon Text Editor and Corrector |
オブジェクト指向言語 |
Object Pascal JRuby Common Lisp Sather Ruby |
関数型言語 |
LOGO Dylan Common Lisp Haskell Mozartプログラミングシステム |
- Common Lispのページへのリンク