Common Lisp
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/04/27 15:44 UTC 版)
スコープ
他のプログラミング言語におけるプログラムと同様に、Common Lisp のプログラムも変数や関数、その他の要素を参照するために名前を用いる。名前が参照するものは、スコープによって決定されている。
名前と、それが参照する実体との関係を束縛(バインディング[注釈 16])と呼ばれている。
マクロ
LISP系言語におけるマクロは、表面上は関数と同じように使われる。しかし、それは評価される式を表すというよりプログラムのソースコードの変形を表現している。
マクロはプログラマーに言語内に新しい構文フォームを作る事を可能とする。たとえば、このマクロは Perl のような言語で馴染みのある until
ループのためのフォームを実現する。
(defmacro until (test &body body)
`(do ()
(,test)
,@body))
;; 利用例
(until (= (random 10) 0)
(write-line "Hello"))
;; 定義したuntilのマクロ展開
(macroexpand-1 '(until (= (random 10) 0)
(write-line "Hello")))
→ (DO ()
((= (RANDOM 10) 0))
(WRITE-LINE "Hello"))
T
すべてのマクロは、内に含むソースコードが評価、あるいはコンパイルされるよりも前に必ず展開される。マクロは抽象構文木(S 式)を受けとり、それを変更して返す関数だと考えることができる。これらの関数は、最終的なソースコードを生成するために評価器やコンパイラよりも前に呼び出される。マクロは通常の Common Lisp で記述され、任意の Common Lisp オペレータ(あるいは自作のオペレータ)を使うことができる。 上の例で使用されているバッククォート記法は一般的なコードテンプレートへの代入を単純化するために Common Lisp によって提供されているものである。
Common Lisp Object System
Common Lisp は オブジェクト指向プログラミング のための道具として、Common Lisp Object System(CLOS)を備えている。これは、現在利用可能な言語の中で、もっとも強力なオブジェクトシステムの一つである。1984年当初のCommon Lispには含まれていなかったが、後にCommon Lisp の ANSI 標準規格の一部となった。C++ や Java のような静的な言語のオブジェクト指向機能とは根本的に異なった動的オブジェクトシステムである。
- ^ ごくまれに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/
固有名詞の分類
プログラミング言語 |
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のページへのリンク