Warning : Undefined variable $type in /home/users/1/sub.jp-asate/web/wiki/extensions/HeadScript/HeadScript.php on line 3
Warning : "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /home/users/1/sub.jp-asate/web/wiki/includes/json/FormatJson.php on line 297
Warning : Trying to access array offset on value of type bool in /home/users/1/sub.jp-asate/web/wiki/includes/Setup.php on line 660
Warning : session_name(): Session name cannot be changed after headers have already been sent in /home/users/1/sub.jp-asate/web/wiki/includes/Setup.php on line 834
Warning : ini_set(): Session ini settings cannot be changed after headers have already been sent in /home/users/1/sub.jp-asate/web/wiki/includes/session/PHPSessionHandler.php on line 126
Warning : ini_set(): Session ini settings cannot be changed after headers have already been sent in /home/users/1/sub.jp-asate/web/wiki/includes/session/PHPSessionHandler.php on line 127
Warning : session_cache_limiter(): Session cache limiter cannot be changed after headers have already been sent in /home/users/1/sub.jp-asate/web/wiki/includes/session/PHPSessionHandler.php on line 133
Warning : session_set_save_handler(): Session save handler cannot be changed after headers have already been sent in /home/users/1/sub.jp-asate/web/wiki/includes/session/PHPSessionHandler.php on line 140
Warning : "continue" targeting switch is equivalent to "break". Did you mean to use "continue 2"? in /home/users/1/sub.jp-asate/web/wiki/languages/LanguageConverter.php on line 773
Warning : Cannot modify header information - headers already sent by (output started at /home/users/1/sub.jp-asate/web/wiki/extensions/HeadScript/HeadScript.php:3) in /home/users/1/sub.jp-asate/web/wiki/includes/Feed.php on line 294
Warning : Cannot modify header information - headers already sent by (output started at /home/users/1/sub.jp-asate/web/wiki/extensions/HeadScript/HeadScript.php:3) in /home/users/1/sub.jp-asate/web/wiki/includes/Feed.php on line 300
Warning : Cannot modify header information - headers already sent by (output started at /home/users/1/sub.jp-asate/web/wiki/extensions/HeadScript/HeadScript.php:3) in /home/users/1/sub.jp-asate/web/wiki/includes/WebResponse.php on line 46
Warning : Cannot modify header information - headers already sent by (output started at /home/users/1/sub.jp-asate/web/wiki/extensions/HeadScript/HeadScript.php:3) in /home/users/1/sub.jp-asate/web/wiki/includes/WebResponse.php on line 46
Warning : Cannot modify header information - headers already sent by (output started at /home/users/1/sub.jp-asate/web/wiki/extensions/HeadScript/HeadScript.php:3) in /home/users/1/sub.jp-asate/web/wiki/includes/WebResponse.php on line 46
https:///mymemo.xyz/wiki/api.php?action=feedcontributions&feedformat=atom&user=163.58.172.96
miniwiki - 利用者の投稿記録 [ja]
2024-06-01T02:49:29Z
利用者の投稿記録
MediaWiki 1.31.0
ビジュアルプログラミング言語
2018-06-25T01:45:56Z
<p>163.58.172.96: </p>
<hr />
<div>'''ビジュアルプログラミング言語'''({{lang-en-short|visual programming language}})とは、[[プログラム (コンピュータ)|プログラム]]を[[テキスト]]で記述するのではなく、視覚的なオブジェクトで[[プログラミング (コンピュータ)|プログラミング]]する[[プログラミング言語]]である。'''グラフィカルプログラミング言語'''とも言う<ref>英語のグラフ({{lang-en-short|graph}})には、節点と辺からなる「[[グラフ理論]]」などの[[グラフ (データ構造)]]、一般に言う「ネットワーク」の意味があることに注意</ref>。視覚表現でプログラミングが可能で、空間上でテキストやグラフィックシンボルを配置することでプログラムが形成される。<br />
<br />
「矩形と矢印」の考え方に基づいており、矩形や円を画面上のオブジェクトとし、それらを矢印や線や弧でつなぐものや、ブロック状のものなどがある。使っている視覚表現としては、アイコンベースの言語、フォームベースの言語、ダイアグラムベースの言語などがある。<br />
<br />
以上のような要素を操作するために、ほとんどの言語では、GUIが提供されている。<br />
<br />
一方で「ビジュアルプログラミング言語」という分類は、その[[プログラミングパラダイム]]は問わない。すなわち、その視覚化されているものが、[[手続き型プログラミング]]であることもあれば[[関数型プログラミング]]であることもあれば[[データフロープログラミング]]であることもある。プログラミングパラダイムとしては基本的にはテキストによる表現と違いがあるわけではないが、理解されないことも多いようである<ref>[http://jp.techcrunch.com/2014/12/06/20141205bitsbox-debuts-monthly-coding-projects-that-teach-kids-to-build-simple-apps/ プログラミングは言語能力の一種、読む・書くがその基盤、と信ずる子ども向けプログラミング教室Bitsbox] といった記事など。</ref>。[[Pure Data]]のようなデータフロー記述に優れた言語など、テキストで記述するよりも適した分野もあり、[[#データフローパラダイムとの関連]]の節も参照のこと。なおVisulanなどごく一部であるが、図形の形状をベースとしたパターンマッチなど、ビジュアル言語ならではの手法によるプログラミングを行う言語もある。<br />
<br />
== ビジュアル言語の例 ==<br />
{{lang|en|[[Microsoft Visual Studio]]}} と、その環境のいくつかの言語に {{lang|en|Visual}} という呼称が付いているが、これはGUIなどの開発を迅速にする同商品の[[RAD (計算機プログラミング環境)|RAD]]などを指しており、基本的にはビジュアルプログラミング言語の意味ではない。<br />
*[http://www.agentsheets.com/ {{lang|en|AgentSheets}}]<br />
*[http://www.alice.org/ {{lang|en|Alice}}] オープンソース<br />
*[http://www.lumina.com/ {{lang|en|Analytica}}]<br />
*{{lang|en|[[ASTERIA]]}}<br />
*[[Automator]]<br />
*[http://www.cs.utexas.edu/users/code/ {{lang|en|CODE}}]<br />
*[[NAOqi#Choregraphe|Choregraphe]] - [[アルデバランロボティクス]]社の人型ロボット用アプリケーション開発言語<br />
*{{lang|en|[[DRAKON]]}} - [[ブラン (オービタ)|ブラン]]の開発用に設計された言語<br />
*{{lang|en|[[jMax]]}}<br />
*{{lang|en|[[LabVIEW]]}}<br />
*[[ラダー・ロジック]] - [[プログラマブルロジックコントローラ]]で使われる言語<br />
*[http://lavape.sourceforge.net/ {{lang|en|Lava}}]<br />
*[[Max (ソフトウェア)|{{lang|en|Max/MSP}}]]<br />
*[http://msdn2.microsoft.com/ja-jp/robotics/default.aspx {{lang|en|Microsoft Robotics Studio}}] - [[ロボット工学]]向けのプログラミング環境。ビジュアル・データフロー言語が含まれている。<br />
*[http://mindscript.familjemarknaden.se/ {{lang|en|Mindscript}}] オープンソース<br />
*{{lang|en|[[OpenMusic]]}} - [[Common Lisp Object System|{{lang|en|CLOS}}]] に基づいた音楽制作用ビジュアルプログラミング言語<br />
*{{lang|en|[[Prograph CPX]]}}<br />
*{{lang|en|[[Pure Data]]}}<br />
*[http://developer.apple.com/documentation/GraphicsImaging/Conceptual/QuartzComposer/index.html#//apple_ref/doc/uid/TP40001357 {{lang|en|Quartz Composer}}]<br />
*[http://www.esterel-technologies.com/products/scade-suite/ {{lang|en|SCADE}}]<br />
*{{lang|en|[[Simulink]]}}<br />
*{{lang|en|[[Squeak]]}} 上で構築されたもの<br />
**{{lang|en|[[Etoys]]}}<br />
**[http://scratch.mit.edu/ {{lang|en|Scratch}}]<br />
*[http://www.stagecast.com/ {{lang|en|Stagecast Creator}}]<br />
*[http://subtextual.org/ {{lang|en|Subtext}}]<br />
*[http://www.synthmaker.co.uk/ {{lang|en|SynthMaker}}]<br />
*[http://wiki.squeak.org/squeak/607 {{lang|en|ThingLab}}]<br />
*[http://www.toontalk.com/ {{lang|en|ToonTalk}}]<br />
*[http://www.viscuit.com/ {{lang|en|VISCUIT}}](ビスケット)<br />
*[http://www.vissim.com/ {{lang|en|VisSim}}]<br />
*[http://www.vector.co.jp/soft/win95/prog/se026552.html {{lang|en|Visulan}}]<br />
*[http://www.vsxu.com/ {{lang|en|VSXu}}] リアルタイム 音楽視覚化ソフトであり<br />
<br />
== データフローパラダイムとの関連 ==<br />
ビジュアルプログラミングと[[データフロープログラミング]]の融合の試みがある。これらは、プログラム状態への素早いアクセスが可能で、[[デバッグ]]、自動[[プログラム合成]]、[[ソフトウェアドキュメンテーション|ドキュメンテーション]]が容易という特徴がある、データフロー言語には自動並列化が容易という特徴がある、将来的にこれが重要となる可能性を秘めている、などと主張されている<ref>{{cite journal |last=Johnston |first=W.M. |authorlink= |coauthors=Hanna, J.R.P. and Millar, R.J. |year=2004年 |month= |title=Advances in dataflow programming languages |journal=ACM Computing Surveys (CSUR) |volume=36 |issue=1 |pages=1-34 |id= |url=http://www.ittc.ku.edu/~rsass/rcreading/johnston04.pdf |accessdate=2007年3月31日 |quote= }}</ref>。<br />
<br />
== 脚注 ==<br />
<references/><br />
<br />
== 文献 ==<br />
* Beyond blocks: syntax and semantics {{doi|10.1145/2903751}}<br />
<br />
== 外部リンク ==<br />
*[http://www.dmoz.org/Computers/Programming/Languages/Visual// {{lang|en|Visual Programming Languages}}]<br />
<br />
{{プログラミング言語の関連項目}}<br />
<br />
{{FOLDOC}}<br />
{{DEFAULTSORT:ひしゆあるふろくらみんくけんこ}}<br />
[[Category:プログラミング言語]]</div>
163.58.172.96
Common Lisp
2018-05-01T05:58:44Z
<p>163.58.172.96: /* 実装 */</p>
<hr />
<div>{{Infobox プログラミング言語<br />
| name = {{lang|en|Common Lisp}}<br />
| family = {{lang|en|[[LISP]]}}<br />
| paradigm = [[マルチパラダイムプログラミング言語|マルチパラダイム]]: [[手続き型プログラミング|手続き型]]、[[関数型言語|関数型]]、[[オブジェクト指向プログラミング|オブジェクト指向]]、[[メタプログラミング|メタ]]<br />
| generation = [[3GL]]<br />
| year = 1984年、1994年に{{lang|en|ANSI}}により標準化<br />
| designer = <br />
| developer = {{lang|en|ANSI}} X3J13委員会<br />
| latest release version = <br />
| latest release date = <br />
| typing = 強い動的型付け<br />
| implementations = {{lang|en|Allegro Common Lisp}}、ABCL、{{lang|en|[[CLISP]]}}、{{lang|en|Clozure Common Lisp}}、{{lang|en|[[CMU Common Lisp]]}}、{{lang|en|Corman Common Lisp}}、{{lang|en|Embeddable Common Lisp}}、{{lang|en|GNU Common Lisp}}、{{lang|en|LispWorks}}、{{lang|en|Movitz}}、{{lang|en|Scieneer Common Lisp}}、{{lang|en|Steel Bank Common Lisp}}、{{lang|en|Symbolics Common Lisp}}<br />
| dialects = CLtL1、CLtL2、{{lang|en|ANSI Common Lisp}}<br />
| influenced_by = {{lang|en|[[LISP]]}}、{{lang|en|Lisp Machine Lisp}}、{{lang|en|[[Maclisp]]}}、{{lang|en|[[Scheme]]}}、{{lang|en|[[Interlisp]]}}<br />
| influenced = {{lang|en|[[Clojure]]}}、{{lang|en|[[Dylan]]}}、{{lang|en|Eulisp}}、{{lang|en|ISLISP}}、{{lang|en|[[SKILL (プログラミング言語)|SKILL]]}}、{{lang|en|newLISP}}、{{lang|en|PicoLisp}}、{{lang|en|Stella}}、{{lang|en|SubL}}<br />
| operating_system = [[クロスプラットフォーム]]<br />
| license =<br />
| website =<br />
}}{{プログラミング言語}}<br />
{{lang|en|'''Common Lisp'''}}(コモン・リスプ)は、コンピュータ・[[プログラミング言語]] [[Lisp]]の標準(の、ひとつ)であり、[[方言 (プログラミング言語)|Lisp方言]]のひとつである。Common Lispの略称は'''CL'''(ごくまれにclispとも。なおCLISPという実装が実在するので混同回避のためあまり用いられない)。規格は[[米国国家規格協会|ANSI]]による ANSI INCITS X3.226-1994 (R2004) 。仕様を指すこともあれば、実装を指すこともある。いくつかの、[[フリーソフトウェアの定義]]に合致したライセンスによりライセンスされている実装や、[[オープンソースの定義]]に合致したライセンスによりライセンスされている実装や、プロプライエタリなライセンスによりライセンスされている実装がある。<br />
<br />
Lispの基本的な特徴の他、いくつかのプログラミングパラダイムのLispへの取り込みについて標準を提供しているという、[[マルチパラダイムプログラミング言語]]という面がある。<br />
<br />
*関数型だけでなく、progなど手続き型的な言語要素に関しても標準化している<br />
*関数単位の細かで反復的なコンパイルにより、効率的な実行を可能にすると同時にREPLによる動的で迅速な開発をサポートする<br />
*関数オブジェクト、複素数、有理数、Bignumなどを一級オブジェクトとして持つ<br />
*すべては[[オブジェクト]]。[[マルチメソッド]]機能をサポートした強力な動的オブジェクトシステム[[CLOS|Common Lisp Object System]]を備える<br />
*assert関数による基本的な[[テスト駆動開発]]が可能<br />
*「例外/ハンドラ」の処理をさらに一段階分離した「Condition/Restart/Handler」による例外処理<br />
*マクロ(プログラムによるコンパイル時のコード変換)やリーダーマクロ(特定の文字に対して新しく構文を拡張する)といった標準機能により言語を拡張可能<br />
<br />
==構文==<br />
一般的なLispと同様の[[S式]]による構文である。<br />
<br />
==意味==<br />
=== 評価順 ===<br />
評価順は、非常に単純な「左から右」、「内側から外側」モデルである(「左から右」を標準で決めているという点は特徴と言えるかもしれない(プログラミング言語の他の標準では決められていないものも多い))。<br />
<br />
<code>(F A1 A2)</code> のようなS式で、<code>F</code>が関数ならば、その引数 A1、A2 を左から右へ順番に評価し、最後にFにその引数を渡す。<code>F</code>がマクロならば、まずマクロを展開する。<br />
<br />
<source lang="lisp"><br />
(+ 2 2) ; 2 と 2 を足す<br />
; --> 4<br />
<br />
;; 与えられた数を二乗する関数を定義<br />
(defun square (x) <br />
(* x x))<br />
<br />
;; 関数を実行<br />
(square 3)<br />
; --> 9 を返す<br />
</source><br />
<br />
=== 静的スコープ ===<br />
{{Main|静的スコープ}}<br />
以前のLispでは[[動的スコープ]]のものも多かったが、Common Lispでは([[Scheme]]と同様な)[[静的スコープ]]が標準化された。<br />
<br />
==データ型==<br />
Common Lispの型システムは階層的である。型は'''deftype'''を用いて定義され、typeは''supertype'',''subtype''という概念を持つ。すべての ''type'' は ''supertype'' として ''t'' (他の言語における''true''や''Object'')をもつ。従って、全てのオブジェクトは型''t''のインスタンスである。一方、型''nil''は、どのオブジェクトもそのインスタンスにならない型である。<ref>一方で型''null''は、オブジェクト''NIL''を表す型である。</ref><br />
<br />
型には''built-in''な型とそうでないものがある。''built-in''な型は、[http://www.lispworks.com/documentation/HyperSpec/Body/04_bc.htm 整数、浮動小数、複素数、文字等]といった(他の言語で言う)プリミティブな型に、配列やストリームなど組み込みの型を合わせたものである。''built-in''でない型には、構造体、クラスなどがある。このように、型システムはクラスおよび[[CLOS|オブジェクトシステム]]と連続的に融合されている。<br />
<br />
型は ''type specifier''という記述方式で参照され、これはよく''typespec''と省略される。''typespec''を用いて議論する上で、''built-in''とは直行する概念として、''Atomic Type'' 対 ''Compound Type''という概念がある。[http://www.lispworks.com/documentation/HyperSpec/Body/26_glo_c.htm#compound_type_specifier Compound type] は、大雑把には、引数を取ることのことができる型である。例えば、<code>(array fixnum (5 * 7))</code>は、データ内容がすべて整数型で、サイズが次元ごとに「5,可変長,7」である配列を示している。<ref>このようなtypespecは、配列の型'''array'''の''valid type specifier''である</ref><br />
<br />
''Compound Type''では、本来の型に合わせて、特定の一変数関数を型判定に用いることもできる。例えば、型 ''mod3'' を以下のように定義できる。<br />
<br />
<source lang=lisp><br />
<br />
(defun mod3 (n)<br />
(= (/ n 3) 0))<br />
<br />
(deftype mod3 ()<br />
`(and fixnum (satisfies mod3)))<br />
<br />
</source><br />
<br />
しかし、Common LispにはHaskellにおけるような型変数の概念はない。上の''array''の例における引数は、変数ではなく定数として処理されるためである。<br />
<br />
=== アトム ATOM ===<br />
Common Lispにおけるアトムとは、誤解を恐れず簡単に言うとlispにおいて「括弧によって囲まれないアトム」すべてを指す。数値はアトムである。シンボル、文字列、文字もアトムである。ANSI CLでは、Compound type <code>(not cons) </code>として定義されている<ref>http://clhs.lisp.se/Body/t_atom.htm</ref>。<br />
<br />
====数値 (''type'' NUMBER)====<br />
様々な型がある。<br />
<br />
* NUMBER<br />
** COMPLEX<br />
** REAL<br />
*** FLOAT<br />
**** SINGLE-FLOAT<br />
**** DOUBLE-FLOAT<br />
*** RATIONAL<br />
**** INTEGER<br />
***** SIGNED-BYTE<br />
***** UNSIGNED-BYTE<br />
***** FIXNUM<br />
***** BIGNUM<br />
*** RATIO<br />
<br />
{{lang|en|Common Lisp}} は数値表現に [[多倍長整数]] を用いて任意のサイズと精度を実現している。有理数型が分数として正確に表現されるという点は、他の言語にあまり見られない特徴である。{{lang|en|Common Lisp}} は自動的にそれぞれの数値型を適切に変換する。<br />
<br />
==== 文字 ====<br />
{{lang|en|Common Lisp}} の'''文字型(char)'''は、{{lang|en|ASCII}}文字の範囲に限定されない。これは {{lang|en|LISP}} が {{lang|en|ASCII}} 以前からあった事を考えれば驚くようなことではない。いくつかの最近の処理系は {{lang|en|[[Unicode]]}} 文字をサポートしている<ref>[http://www.cliki.net/Unicode%20Support CLiki : Unicode support]</ref>文字列は、下で述べるシーケンスのsubtypeである。<br />
<br />
==== シンボル ====<br />
'''シンボル型'''は {{lang|en|LISP}} 言語にとっては普通だが、その他の言語ではあまり知られていない型である。シンボルとはユニークで、いくつかのスロットを備えた名付きのデータオブジェクトである。シンボルの備えるスロットのなかでは'''値セル'''<ref>{{lang-en-short|value cell}}</ref>と'''関数セル'''<ref>{{lang-en-short|function cell}}</ref>が最も重要なものである。シンボルは、変数の値を保持するための、他の言語でいう識別子として使われる事が多いが、それ以外の用法が多数存在する。通常、シンボルを評価するとその値が返る。いくつかのシンボルは評価するとそのシンボル自身が返る。例えば、キーワードパッケージ中のシンボルはすべて自己評価シンボルである。{{lang|en|Common Lisp}} における真偽値は、自己評価シンボル <code>t</code> と <code>nil</code> によって表現される。{{lang|en|Common Lisp}} は'''パッケージ'''と呼ばれるシンボルのための名前空間を備えている。<br />
<br />
===データ構造===<br />
<br />
==== シーケンス ====<br />
{{lang|en|Common Lisp}} における'''シーケンス型'''は、リスト、ベクタ、ビットベクタ、文字列からなる。'''map'''や'''reduce'''などの多くの操作は、任意のシーケンス型に対して動作する。<br />
<br />
他の {{lang|en|LISP}}系の言語と同様、{{lang|en|Common Lisp}} の'''リスト'''は'''コンス'''<ref>{{lang-en-short|cons}}</ref>あるいは'''コンスセル'''<ref>{{lang-en-short|cons cell}}</ref>、'''ペア'''<ref>{{lang-en-short|pair}}</ref>で構成される。コンスセルは <code>car</code> と <code>cdr</code> の二つのスロットを備えたデータ構造である。リストはコンスセルを繋ぎ合わせたものである。それぞれのコンスセルの <code>car</code> スロットはリストの要素(他のリストである可能性もある)を参照し、<code>cdr</code> スロットは次のコンスセルを参照する。ただし、最後のコンスセルの <code>cdr</code> だけは <TT>nil</TT> を参照する。コンスセルによって、簡単に[[木構造 (データ構造)|木構造]]やその他の複雑なデータ構造を実現できるが、大抵他のデータ構造を使うか、クラスのインスタンスを使うほうが推奨される。<br />
<br />
==== 配列 ====<br />
<br />
{{lang|en|Common Lisp}} は多次元の '''配列'''をサポートしており、また必要に応じて配列を動的にリサイズする事も可能である。多次元配列は行列演算に利用される。'''ベクタ'''は一次元の配列である。配列は任意の型を要素として持つことができる(一つの配列に複数の型の要素を混在させることもできる)が、それに加えて、整数のベクタのように要素を特定の型に特定化することも可能である。多くの実装では、型指定された配列を使う場合には、配列操作の最適化が可能である。型指定された配列のなかで二種類が標準で定義されている。'''文字列'''は文字を要素としたベクタであり、ビットのベクタは'''ビットベクタ'''である。<br />
<br />
ビットベクタとベクタはシーケンスのsubtypeでもある。<br />
<br />
==== その他 ====<br />
<br />
'''ハッシュテーブル'''はデータオブジェクト間の関連を保持する。任意のオブジェクトがキーもしくは値として使用可能である。ハッシュテーブルは配列のように必要に応じて動的にリサイズされる。'''パッケージ'''はシンボルの集合であり、主にプログラムの一部を [[名前空間]] で分割するために使用される。パッケージはいくつかのシンボルを'''エクスポート'''<ref>{{lang-en-short|export}}</ref>することで、インターフェースを公開する。'''構造体''' は [[C言語]]の構造体や {{lang|fr|[[Pascal]]}} のレコードに似た、複数の型と値のフィールド(スロットと呼ばれる)で構成される複合的なデータ構造である。クラスの'''インスタンス'''<ref>{{lang-en-short|instance}}</ref>は構造体に似ているが、これはオブジェクトシステム {{lang|en|[[CLOS]]}} によって作られるものである。<br />
<br />
===関数===<br />
{{lang|en|Common Lisp}} では、'''関数''' もデータ型の一つである。たとえば、これは他の関数を引数として取る関数を書く事を可能としたり、関数を返すような関数を書く事を可能とする。これにより、非常に汎用化された操作を記述できるようになる。このため、{{lang|en|Common Lisp}} のライブラリは、多くの部分が高階関数の上に成りたっている。たとえば、<code>sort</code> 関数は、引数として [[比較オペレータ]] を取る。これは、比較関数が任意の型のデータを整列できるだけでなく、キーによって任意のデータ構造を整列することも可能にする。<br />
<br />
<source lang="lisp"><br />
(sort (list 5 2 6 3 1 4) #'>)<br />
;「 > 関数」を比較オペレータとして用い、リストを整列する<br />
; --> (6 5 4 3 2 1) <br />
<br />
(sort (list '(9 a) '(3 b) '(4 c))<br />
#'(lambda (x y) (< (car x) (car y))))<br />
; リスト内のサブリスト中の最初の要素 (car) に沿ってリストを整列する<br />
; --> ((3 b) (4 c) (9 a))<br />
</source><br />
<br />
====関数定義====<br />
<code>defun</code> マクロは関数を定義する。関数定義は名前と、引数の名前、そして関数本体で構成される。<br />
<br />
<source lang="lisp"><br />
(defun square (x)<br />
(* x x))<br />
</source><br />
<br />
関数定義は、コンパイラに最適化設定や引数のデータ型を指定に関するヒントを与えるための '''宣言'''<ref>{{lang-en-short|declaration}}</ref>や、{{lang|en|LISP}} システムに対話的なドキュメンテーションを与えるための'''ドキュメンテーション文字列'''<ref>{{lang-en-short|docstring}}</ref>を含むことがある。<br />
<br />
<source lang="lisp"><br />
(defun square (x)<br />
"Calculates the square of the number x."<br />
(declare (number x) (optimize (speed 3) (debug 0) (safety 1)))<br />
(* x x))<br />
</source><br />
<br />
無名関数は <code>lambda</code> 式を用いて定義される。{{lang|en|LISP}} 的なプログラミングスタイルでは、高階関数の引数として無名関数を使う場合が多い。<br />
<br />
関数の定義や操作に関する多くのオペレータが存在する。たとえば、関数は <code>compile</code> によって再コンパイルされる場合がある。(いくつかの {{lang|en|LISP}} システムでは、明示的なコンパイル命令があるまで、デフォルトでは関数をインタプリタで実行するものや、オンザフライで関数を実行するたびにコンパイルするものなどがある)<br />
<br />
====総称関数とメソッドの定義====<br />
<code>defgeneric</code>マクロは、総称関数(ジェネリック関数)を定義する。<code>defmethod</code>マクロはメソッドを定義する。総称関数はメソッドの集合である。メソッドはそのパラメータとして渡されたクラスやオブジェクトによって特定化される。総称関数が呼び出されると、マルチメソッドディスパッチ(多重メソッドディスパッチ)により、実際に使用されるメソッドが決定される。<br />
<br />
<source lang="lisp"><br />
(defgeneric add (a b))<br />
(defmethod add ((a number) (b number))<br />
(+ a b))<br />
(defmethod add ((a string) (b string))<br />
(concatenate 'string a b))<br />
(add "Zippy" "Pinhead") ; returns "ZippyPinhead"<br />
(add 2 3) ; returns 5<br />
</source><br />
<br />
総称関数もファーストクラスのデータ型である。<br />
総称関数やメソッドには上に記載したよりも、もっと豊富な機能が存在する。<br />
<br />
{{Main|Common Lisp Object System}}<br />
<br />
====関数名前空間====<br />
関数名のための名前空間は、データ変数のための名前空間とは分離されている。これは {{lang|en|Common Lisp}} と {{lang|en|Scheme}} における主要な違いである。<code>defun</code>、<code>flet</code> そして <code>labels</code> のようなオペレータは関数名前空間へ名前を定義する。<br />
<br />
他の関数への引数として関数名を渡す場合には、<code>function</code> スペシャルオペレータ(通常 <code>#'</code> と略記される)を使う必要がある。最初の <code>sort</code> 引数では、関数名前空間にシンボル <code>&gt;</code> で定義された関数名を <code>#'&gt;</code> というコードで参照している。<br />
<br />
{{lang|en|Scheme}} の評価モデルはより単純で、単一の名前空間のみが存在し、引数部分だけでなくあらゆる位置で、評価順序を問わずフォームは評価される。この事が {{lang|en|Common Lisp}} と {{lang|en|Scheme}} のどちらかの方言で書かれたコードは、ときどき他方の経験を持つプログラマーを混乱させることになる。たとえば、{{lang|en|Common Lisp}} プログラマーの多くは <code>list</code> あるいは <code>string</code> といった説明的な変数名を使用する事を好むが、これらの名称は {{lang|en|Scheme}} ではローカルに関数名を上書きしてしまうという問題を起こすことになる。<br />
<br />
関数に独立した名前空間を持つ事が利点かどうかは、{{lang|en|LISP}} コミュニティにおける論争の源となっている。この論争は一般に「{{lang|en|Lisp-1 vs. Lisp-2}} の議論」と言われる。この用語は [[Richard P. Gabriel|リチャード・ガブリエル]] と [[Kent Pitman|ケント・ピットマン]] らによる二つの手法を広範囲にわたって比較した 1988 年の論文で作られた<ref>[http://www.nhplace.com/kent/Papers/Technical-Issues.html {{lang|en|Technical Issues of Separation in Function Cells and Value Cells}}]</ref>。<br />
<br />
===その他の型===<br />
{{lang|en|Common Lisp}} が備えている他の型は以下の通り:<br />
<br />
*'''パス名''' は [[ファイルシステム]] におけるファイルやディレクトリを表現する。{{lang|en|Common Lisp}} のパス名機能は、ほとんどのオペレーティングシステムのファイル命名規則より一般的なものであり、プログラムが様々なシステムを通してポータブルにファイルにアクセスする事を可能としている。<br />
*入出力'''ストリーム'''は、端末や開かれているファイルのような、バイナリデータ、テキストデータの入力元と出力先を表現する。<br />
*{{lang|en|Common Lisp}} は組込みの [[擬似乱数生成器]](PRNG)を備えている。'''ランダムな状態'''オブジェクトは擬似乱数のソースとして再利用可能であり、ユーザーが乱数の種を与える事や、同じ数列を再生する事を許可している。<br />
*'''コンディション'''<ref>{{lang-en-short|condition}}</ref>はエラーや例外、その他のプログラムが反応する可能性がある有意なイベントを表現するための型である。<br />
*'''クラス'''<ref>{{lang-en-short|class}}</ref>は第一級のオブジェクトである。そして、それ自身がメタクラス<ref>{{lang-en-short|metaclass}}</ref>と呼ばれるクラスのインスタンスである。<br />
<br />
==スコープ==<br />
他のプログラミング言語におけるプログラムと同様に、{{lang|en|Common Lisp}} のプログラムも変数や関数、その他の要素を参照するために名前を用いる。名前が参照するものは、スコープによって決定されている。<br />
<br />
名前と、それが参照する実体との関係を束縛(バインディング<ref>{{lang-en-short|binding}}</ref>)と呼ばれている。<br />
<br />
==マクロ==<br />
{{lang|en|LISP}}系言語における[[マクロ (コンピュータ用語)|マクロ]]は、表面上は関数と同じように使われる。しかし、それは評価される式を表すというよりプログラムのソースコードの変形を表現している。<br />
<br />
マクロはプログラマーに言語内に新しい構文フォームを作る事を可能とする。たとえば、このマクロは [[Perl]] のような言語で馴染みのある <code>until</code> ループのためのフォームを実現する。<br />
<br />
<source lang="lisp"><br />
(defmacro until (test &body body)<br />
`(do ()<br />
(,test)<br />
,@body))<br />
<br />
;; example<br />
(until (= (random 10) 0) <br />
(write-line "Hello"))<br />
<br />
(macroexpand-1 '(until (= (random 10) 0) <br />
(write-line "Hello")))<br />
;; --><br />
;; '(do ()<br />
;; ((= (random 10) 0))<br />
;; (write-line "Hello"))<br />
</source><br />
<br />
すべてのマクロは、内に含むソースコードが評価、あるいはコンパイルされるよりも前に必ず展開される。マクロは[[抽象構文木]](S 式)を受けとり、それを変更して返す関数だと考えることができる。これらの関数は、最終的なソースコードを生成するために評価器やコンパイラよりも前に呼び出される。マクロは通常の {{lang|en|Common Lisp}} で記述され、任意の {{lang|en|Common Lisp}} オペレータ(あるいは自作のオペレータ)を使うことができる。<br />
上の例で使用されているバッククォート記法は一般的なコードテンプレートへの代入を単純化するために {{lang|en|Common Lisp}} によって提供されているものである。<br />
<br />
===変数のキャプチャとシャドウイング===<br />
{{lang|en|Common Lisp}} のマクロには、マクロ展開されたコードに、呼び出し側の文脈で使われているシンボルが出現する'''変数キャプチャ'''という機能がある。これは、プログラマが特殊な意味をもつシンボルを備えたマクロを作ることを可能とする。<br />
<br />
変数キャプチャは予期しない、一風変わったエラーを引き起こす可能性がある。{{lang|en|Scheme}} のような他の {{lang|en|LISP}}系のシステムでは、変数キャプチャを許さないマクロ構文<ref>「健全な(もしくは衛生的な)マクロ」と呼ばれる。</ref>を備えているものもある。{{lang|en|Common Lisp}} では、意図しないキャプチャを避けるために、キャプチャの恐れのないマクロ展開時にユニークな変数を導入する <code>[[gensym]]</code> オペレータを使って回避するのが一般的である。<br />
<br />
その他の問題として、不用意なマクロ展開時のオペレータのシャドウイングがある。たとえば、次のような (不正な) コードである。<br />
<br />
<source lang="lisp"><br />
(macrolet ((do (...) ... something else ...))<br />
(until (= (random 10) 0)<br />
(write-line "Hello")))<br />
</source><br />
<br />
<code>until</code> マクロは <code>do</code> の呼び出しへと展開される事になる。この時、意図しているのは組み込みのマクロ <code>do</code> であるが、このコンテキストでは <code>do</code> はまったく異なる意味を持つことになる。<br />
<br />
{{lang|en|Common Lisp}} では、<code>do</code> のような組み込みオペレータの再定義を禁止することで、オペレータのシャドウイング問題を和らげようとしている。さらに、ユーザーはそれぞれ自分のコードをパッケージに分離する事ができる。組み込みのシンボルは、ユーザーパッケージ内でシャドウイングされてしまっていても、<code>COMMON-LISP</code> パッケージで見つけることができる。<br />
<br />
=={{lang|en|Common Lisp Object System}}==<br />
{{Main|Common Lisp Object System}}<br />
<br />
{{lang|en|Common Lisp}} は [[オブジェクト指向プログラミング]] のための道具として、{{lang|en|Common Lisp Object System}}({{lang|en|[[CLOS]]}})を備えている。これは、現在利用可能な言語の中で、もっとも強力なオブジェクトシステムの一つである。元々アドオン機能として提案された {{lang|en|CLOS}} は、{{lang|en|Common Lisp}} の {{lang|en|[[ANSI]]}} 標準規格の一部として採用された。{{lang|en|CLOS}} は 動的オブジェクトシステムであり、{{lang|en|[[C++]]}} や {{lang|en|[[Java]]}} のような静的な言語のオブジェクト指向機能とは根本的に異なったものである。<br />
<br />
==他の LISP 系言語との比較 ==<br />
<!-- まだまだ不足 --><!--<br />
<br />
単なる雑多な列挙では?<br />
<br />
-->{{lang|en|Common Lisp}} と最も頻繁に比較対照されるのが {{lang|en|Scheme}} である — これら二つは最も有名な {{lang|en|LISP}}系言語だからだ。{{lang|en|Scheme}} は {{lang|en|Common Lisp}} よりも古く、同じ {{lang|en|LISP}} の伝統から生みだされただけでなく、同じエンジニアの[[ガイ・スティール・ジュニア]]<ref>彼は ジェラルド・J・サスマンとともに {{lang|en|Scheme}} を設計した。</ref>が {{lang|en|Common Lisp}} 委員会の議長を務めた。<br />
<br />
<!--{{lang|en|Common Lisp}} は汎用目的のプログラミング言語であり、組み込み言語である {{lang|en|[[Emacs Lisp]]}} や {{lang|en|[[AutoLisp]]}} のような {{lang|en|LISP}} の変種とは対照的である。それ-->以前の多くのLispの方言や実装とは異なり、Common Lisp は Scheme と同様な、スコープは[[静的スコープ]]のみを基本とする仕様である。<br />
<br />
ZetaLisp や Franz Lisp といった Common Lisp の設計に寄与した実装の多くは、インタプリタでは[[動的スコープ]]を、コンパイラでは静的スコープ、という仕様になっていた。Schemeはそういったものとは異なり、静的スコープのみであった。Common Lisp は動的スコープをもサポートしているが、明示的な <code>special</code> 宣言が必要である。ANSI Common Lisp のインタプリタとコンパイラの間にはスコープに関しての相異点は全く存在しない。<br />
<br />
時々、{{lang|en|Common Lisp}} は「{{lang|en|Lisp-2}}」、{{lang|en|Scheme}} は「{{lang|en|Lisp-1}}」と呼ばれることがある。これは {{lang|en|Common Lisp}} が関数名と変数名('''2つ''')にそれぞれ独立した名前を備えている事に起因した名前である。しかし、実際には {{lang|en|Common Lisp}} は <code>go</code> タグやブロック名、<code>loop</code> キーワードなど多くの名前空間を持っているし、マクロをうまく使えば、構文的に名前空間を追加することも出来る。複数の名前空間に関するトレードオフについて、{{lang|en|Common Lisp}} と {{lang|en|Scheme}} のそれぞれを支持する論争が長いあいだ行われている。{{lang|en|Scheme}} では変数名と関数名の衝突を避ける必要があるため、{{lang|en|Scheme}} の関数はよく <code>lis</code> や <code>lst</code>、<code>lyst</code> といった関数名と衝突しないような引数名を取ることになる。一方 {{lang|en|Common Lisp}} では引数として使う場合に、明示的に関数の名前空間を参照する必要がある。これは上にでてきた <code>sort</code> のサンプルのように一般的なことである。<br />
<br />
{{lang|en|Common Lisp}} はまた、真偽値の扱いが {{lang|en|Scheme}} とは異なっている。{{lang|en|Scheme}} は真と偽の表現として <code>#t</code> と <code>#f</code> という特別な値を用いている。{{lang|en|Common Lisp}} は、より古い {{lang|en|LISP}}系言語の伝統に従ってシンボルの <code>t</code> と <code>nil</code><ref><code>nil</code> はまた、空リストをも表現する。</ref>を使っている。{{lang|en|Common Lisp}} においては、<code>if</code> のような条件式において任意の <code>nil</code> でない値が真として扱われる。このことは、いくつかのオペレータが述語として働くと同時に、後の計算に使うための有意な値を返すものとして動作する事を可能としている。<br />
<br />
{{lang|en|Scheme}} の標準規格は [[末尾再帰|末尾再帰の最適化]] を要求しているが、{{lang|en|Common Lisp}} の規格はしていない。ほとんどの {{lang|en|Common Lisp}} 実装は末尾再帰の最適化を提供するが、それでもプログラマーが最適化宣言を使った場合のみである場合が多い。それにも関わらず、一般的な {{lang|en|Common Lisp}} のコーディングスタイルは {{lang|en|Scheme}} スタイルで好まれるようなあらゆる場合に再帰を使うというやり方とは異なっている。{{lang|en|Scheme}} プログラマが末尾再帰で表現するものを、{{lang|en|Common Lisp}} プログラマーは <code>do</code>、<code>dolist</code>、<code>loop</code>、最近だと <code>iterate</code> パッケージを使って反復で表現する。<br />
<br />
==実装 ==<br />
{{lang|en|Common Lisp}} は {{lang|en|Perl}}言語のように唯一の実装による規定されるものではなく、{{lang|en|[[Ada]]}} やC言語のように仕様によって規定されている。<br />
<br />
さらに、実装は標準規格でカバーされていない機能を提供するライブラリとともに配布される傾向がある。そのような追加機能をポータブルに利用可能とする [[フリーソフトウェア]] ライブラリが作成されている。最も顕著なものが、[http://common-lisp.net/ <code>Common-Lisp.net</code>] や [http://clocc.sourceforge.net/ {{lang|en|Common Lisp Open Code Collection}}] プロジェクトである。<br />
<br />
{{lang|en|Common Lisp}} はインクリメンタルな[[コンパイラ]]として実装されるように設計された。関数のインライン展開のような最適化コンパイルのための標準的な宣言が言語規格に提案されている。ほとんどの {{lang|en|Common Lisp}} 実装は関数を[[機械語]]へとコンパイルし、{{lang|en|Lisp}}の環境を含めた[[コアダンプ]]として出力する。その他のコンパイラは、性能では劣るが、移植性に勝る [[バイトコード]] へとコンパイルする。{{lang|en|LISP}}系の言語は[[インタプリタ]]型言語であるという誤解は、そのほとんどが {{lang|en|Common Lisp}} 環境がインタラクティブなプロンプトを提供し、関数をその都度コンパイルするということに起因している。<br />
<br />
{{lang|en|CLISP}} のような、{{lang|en|[[UNIX]]}} 上で動くいくつかの実装は、システムが {{lang|en|Perl}} や[[Unixシェル|{{lang|en|UNIX}}シェル]]インタプリタを透過的に呼び出すのと同様に スクリプトのインタプリタ<ref>http://clisp.cons.org/impnotes/quickstart.html#quickstart-unix</ref>として使うことができる。<br />
<br />
===実装系===<br />
====再配布可能な実装の一覧====<br />
<br />
通常のUnix系 X86コンピュータ、サーバで頻繁に用いられる実装は以下である。<br />
<br />
;{{lang|en|[[Steel Bank Common Lisp]]}} (SBCL)<br />
:後述のCMUCL から分岐して保守性を大幅に強化した処理系<ref>http://sbcl.sourceforge.net/history.html</ref>であり、現在通常のx86コンピュータで最も使用されている実装の一つ。SBCL は、REPLから入力された評価式であっても、インタプリタを介さず全てネイティブコードにコンパイルしてから実行する<ref>最近、インタプリタのサポートも試験的に実装されている。</ref>。CMUCL譲りのコンパイラにより非常に強力な最適化を行うことが出来、生成するコードはC言語のコードを上回ることもある。SBCL は、CMUCL が動作するプラットフォームに加えて、{{lang|en|Linux}}({{lang|en|PowerPC}}、{{lang|en|SPARC}}、{{lang|en|MIPS}})、{{lang|en|Mac OS X}}、{{lang|en|Microsoft Windows}} 上でも動作する。ただし、HP-UX 上では動作しない。<br />
;{{lang|en|[[:en:Clozure_CL|Clozure CL]]}}<br />
:[[フリーソフトウェア|フリー]] な処理系であり、SBCLと並んで、あるいはそれ以上に使用されている実装でもある。「Coral Common Lisp」 「Macintosh Allegro Common Lisp」 「Macintosh Common Lisp」 「OpenMCL」 という複数の改名を経てオープンソース化された<ref>http://ccl.clozure.com/history.html</ref>。その歴史のため、Mac OS の Cocoa API との連携(実装による独自機能)に強みをもつほか、ファイルの遅延ローディング、(SBCLと比べたときの)デバッグメッセージのわかりやすさなどの特色を持つ。今は {{lang|en|Mac OS X}}、{{lang|en|Darwin}}、{{lang|en|Linux}}({{lang|en|PowerPC}}、{{lang|en|Intel}} x86-64)に移植されている。{{lang|en|Intel}} x86-32 や 64ビット版の {{lang|en|Windows}} への移植も進行中。<ref>http://trac.clozure.com/openmcl</ref><br />
<br />
次に、上の2つとは異なるものの、アクティブに改良が続けられており、また独特の性質をもった特筆すべき実装として、次のECLおよびABCLを挙げる。<br />
<br />
;{{lang|en|[[:en:Embeddable_Common_Lisp|Embeddable Common Lisp]]}} (ECL)<br />
:後述のGCLから派生した、[[C言語]]で作成されたプログラムに組み込むために設計された処理系である。lispコードはCのコードに変換された上でコンパイル実行されるので、最低限のCコンパイラしか提供されていない組み込み機器などの環境でも、クロスコンパイルにより利用することが出来る。また、C言語の高速性も受け継いでいる。<br />
;{{lang|en|[[:en:Armed_Bear_Common_Lisp|Armed Bear Common Lisp]]}}<br />
:[[Java仮想マシン|{{lang|en|Java}}仮想マシン]]上で動作する実装である。同マシンの[[Javaバイトコード]]へのコンパイラを備えており、{{lang|en|Common Lisp}} プログラムから {{lang|en|Java}} のライブラリにアクセスする事が可能。この実装系は {{lang|en|Armed Bear J Editor}} のコンポーネントであるが、単独で利用する事もできる。<ref>http://armedbear.org/abcl.html</ref>近年もアクティブに開発されている。<br />
<br />
以下に示すのは、比較的マイナーな処理系である。<br />
開発の頻度が落ちている、そこまで人気ではないなどの点はあるが、安定していて枯れた実装であるとも言える。<br />
<br />
;{{lang|en|[[CMU Common Lisp]]}} (CMUCL)<br />
:[[カーネギーメロン大学]] で開発された実装を起源とする。現在はボランティアグループによりメンテナンスされる。Pythonと呼ばれる(プログラミング言語の Python とは関連なし)高速なネイティブコードコンパイラの起源となった実装である。{{lang|en|Intel}} x86 上の {{lang|en|Linux}} や BSD、{{lang|en|Alpha}} 上の {{lang|en|Linux}}、{{lang|en|Solaris}}、{{lang|en|IRIX}}、HP-UX、{{lang|en|PowerPC}}を含む{{lang|en|Mac OS X}}などで動作する。<br />
;{{lang|en|[[CLISP]]}}<br />
:バイトコードコンパイラを備えた実装である。移植性に富み、多くの {{lang|en|UNIX}} や、{{lang|en|Mac OS X}} などの {{lang|en|UNIX}}に類似したシステム、および {{lang|en|Microsoft Windows}}、その他のオペレーティングシステムで動作する。<br />
;{{lang|en|[[:en:GNU_Common_Lisp|GNU Common Lisp]]}} (GCL)<br />
:{{lang|en|Kyoto Common Lisp}} から発展した[[GNUプロジェクト]]の製品である。完全な {{lang|en|ANSI}} 準拠ではないが、数学ツールの {{lang|en|[[Maxima]]}} や {{lang|en|[[Axiom (数式処理システム)|AXIOM]]}}、{{lang|en|ACL2}} などを含むいくつかの大規模なプロジェクトで採用されている。この処理系は 11 の異なるアーキテクチャ上の {{lang|en|Linux}} で動作し、{{lang|en|Windows}} や {{lang|en|Solaris}}、{{lang|en|FreeBSD}} でも動作する。開発は続いているが、頻度が落ちている。<ref>http://www.gnu.org/software/gcl/</ref><br />
;{{lang|en|Macintosh Common Lisp}}<br />
:デジタルツール社<ref>http://www.digitool.com/</ref>製の実装系である。MCL 5.2 からオープンソース化された。{{lang|en|PowerPC}} 上の {{lang|en|Mac OS X}} で動作する。.<br />
;{{lang|en|Movitz}}<br />
:[[x86]] アーキテクチャ用の実装系であり、オペレーティングシステムに依存しない。<br />
;{{lang|en|Poplog}}<br />
:{{lang|en|Common Lisp}} を備えたバージョンが存在する。{{lang|en|POP-11}} は {{lang|en|Common Lisp}} と {{lang|en|[[Prolog]]}}、{{lang|en|[[ML (プログラミング言語)|Standard ML]]}} を備えており、複数の言語を混在させたプログラミングが可能である。また、全ての言語が逐次的にコンパイルされる。コンパイラと通信する {{lang|en|Emacs}} に類似のエディタが統合されている。<br />
;{{lang|en|Jatha}}<br />
:{{lang|en|Common Lisp}} の大半をサブセットとして実装した {{lang|en|Java}} のライブラリである。<ref>http://jatha.sourceforge.net/</ref><br />
<br />
====商用の実装====<br />
;{{lang|en|Allegro Common Lisp}}<br />
:Franz(フランツ)<ref>http://www.franz.com/</ref>による実装系。<br />
;{{lang|en|LispWorks}}<br />
:リスプワークス<ref>http://www.lispworks.com/</ref>による実装系。<br />
;{{lang|en|Corman Lisp}}<br />
:コーマン・テクノロジーズ<ref>http://www.cormanlisp.com/</ref>による実装系。<br />
;{{lang|en|Scieneer Common Lisp}}<br />
:サイエニア<ref>http://www.scieneer.com/</ref>による実装系。<br />
<br />
==著名なアプリケーション==<br />
===政府機関、非営利団体での利用===<br />
<br />
;{{lang|en|SPIKE}}<br />
:[[ハッブル宇宙望遠鏡]] 運用管理のためのプランニング・スケジューリングシステム。<ref>http://www.stsci.edu/resources/software_hardware/spike/</ref> 角度変更や、指定地点の撮影などのさまざまな指令を、燃料や希望時間帯など多様かつ複雑な制約のもとで、最適に[[スケジューリング]]する。<br />
;{{lang|en|Remote Agent}} (remote intelligent self-repair software, RAX)<br />
:[[:en:Deep_Space_1|NASA Deep Space 1]] に搭載された、自己修復・監視用人工知能。NASA Ames Research Center および [[ジェット推進研究所|NASA JPL]]によって開発された。人間の監視なしで探索機を航行させるための自律エージェント。多数のコンポーネントからなるが、その主要な3つは、EUROPA([[マーズ・エクスプロレーション・ローバー]] のためのプランニングシステム)、EXEC(プラン実行システム)、Livingstone(モデルベース異常診断システム)である。1999年度の {{lang|en|NASA}} ソフトウェア・オブ・ジ・イアー賞を受賞した。<ref>http://ic.arc.nasa.gov/projects/remote-agent/</ref><br />
<br />
===商用===<br />
;Yahoo! ストア<br />
:[[:en:Viaweb]]により作成され、後にYahoo!に買収された。誰でも簡単に使えるウェブストア作成サービスを提供し、顧客の作ったウェブサイトで他のユーザが買い物をするという、史上初めての[[アプリケーションサービスプロバイダ]]である。後に C++ と Perl で書き直された(と発表された)。[[ポール・グレアム]]によればその実態は「C++でLispインタプリタを書いた」というようなものだった、という<ref name="doubt-not-corporate-foolishness">「2003 年 1 月、ヤフーは新しいバージョンの、C++ と Perl で書かれたエディタ(訳注: Viawebのシステムのうち、Lispで書かれていた、サイトを構築するシステムの部分)をリリースした。それは『もはやプログラムは Lisp で書かれていない』というよりも『プログラムを C++ に変換するために Lisp インタプリタを書いた』というようなものであった。私の知る限り、すべてのページ生成テンプレートのソースファイルは依然として Lisp コードのままだった(「グリーンスパンの第10法則」を見よ)。」、[[ポール・グレアム]]、[http://www.paulgraham.com/avg.html Beating the Averages]</ref>。<br />
;[[ジャック×ダクスター]],[[クラッシュ・バンディクー]]等<br />
:[[ノーティードッグ]]によるPlaystation、Playstation2 用のビデオゲーム。[[クラッシュ・バンディクー]]はGOOL(Game Oriented Object Lisp)<ref>http://all-things-andy-gavin.com/2011/03/12/making-crash-bandicoot-gool-part-9/</ref>、ジャック×ダクスターはGOOLを機能的に拡張した全く別の言語[[:en:Game_Oriented_Assembly_Lisp|Game Oriented Assembly Lisp]]によって実装されている。これらは、プレイステーションらの特殊なプロセッサ事情に合わせた自作コンパイラを含んでいる。<br />
;D-Wave 1 量子計算機<br />
:[[D-Wave Systems]] による量子計算機(正しくは断熱量子アニーリング専用ハードウェア)。ホスト[[オペレーティングシステム|OS]]がCommon Lispで作成されている<ref>ページ下部,開発者のコメント http://dwave.wordpress.com/2011/05/20/learning-to-program-the-d-wave-one-software-you-should-install-a-book-you-should-buy/</ref>。ただし、利用者向けのインターフェースはPython APIである。求人ページにおいても、Common Lisp(あるいは他の関数型言語)のプログラミング経験を求人要件としてあげている<ref>http://www.dwavesys.com/careers/senior-software-developer</ref>。<br />
;Orbitz<br />
:[[:en:ITA Software]]によって開発された、有名な旅行予約サイト。ITA Software は2011年に Google に買収され、一部門となっている<ref>http://www.itasoftware.com/about/index.html</ref>。旅行予約には、莫大な数の可能な経路の中から高速に最短・最安の路線を選択する知的探索アルゴリズムが必要であり、そのためにLispが用いられている。<br />
;Mirai<br />
:イズウェア社<ref>http://www.izware.com/</ref>の製品で、統合された 2D/3D コンピュータグラフィックス作成環境である。ポリゴンモデラー、先進的な IK/FK ノンリニアアニメーションシステム、2D/3D ペインティングなどを備えていた。動画やビデオゲーム、軍事シミュレーションの世界では有名である。<ref>http://www.izware.com/mirai/</ref><br />
;Piano<br />
:飛行機のスケジュール設計や競合との比較のためのシステム。<ref>http://www.piano.aero/</ref><br />
;Xanalys<br />
:警察によって使われている世界的なセキュリティや詐欺防止サービスのための原因調査用ソフトウェア。<ref>http://www.xanalys.com/</ref><br />
;ICAD<br />
:ナレッジ・テクノロジーズ・インターナショナル社製の機械設計ソフトウェア。<br />
;General-purpose Declarative Language<br />
:ジェンワークス・インターナショナル社<ref>http://www.genworks.com/</ref>の製品。ウェブベースのエンジニアリング、デザイン、ビジネスアプリケーション作成用開発ツールである<br />
;Igor Engraver<br />
*音楽記譜用プログラム。<ref>http://www.noteheads.com/</ref><br />
<br />
===オープンソース===<br />
;{{lang|en|[[Maxima]]}}<br />
:代数的数式処理[[エキスパートシステム]]。GPL で公開されており、自由に入手することができる。一言で言えば、義務教育レベルの二次方程式から、大学学部レベルの常微分方程式に至るまで、方程式を数学の知識を駆使して式変形し、自動で答えを求めてくれる。[[:en:Richard_Fateman|Richard Fateman]]教授によって作成された[[Macsyma]]の、Common Lisp 上の再実装である。<br />
;ACL2<br />
:定理証明用のシステム<br />
;{{lang|en|Compo}}<br />
:複雑な音楽構造を自然なやり方で表現する事を可能とした言語。<ref>http://compo.sourceforge.net/</ref><br />
;Lisa<br />
:知的エージェント作成のためのルールベースのプロダクションシステム。<ref>http://lisa.sourceforge.net/</ref><br />
<br />
== 脚注 ==<br />
<references/><br />
<br />
==参考文献==<br />
*[http://www.lispworks.com/reference/HyperSpec/ {{lang|en|Common Lisp HyperSpec}}]<br />
*『{{lang|en|LISP}} 原書第3版 I』 著者:P.H. ウィンストン、B.K.P. ホーン 訳:白井 良明、井田 昌之、安部 憲広 - ISBN 4563014648<br />
*『{{lang|en|LISP}} 原書第3版 II』 著者:P.H. ウィンストン、B.K.P. ホーン 訳:白井 良明、井田 昌之、安部 憲広 - ISBN 4563014656<br />
*『{{lang|en|Common Lisp}} 入門』 著者:湯浅 太一、萩谷 昌己 - ISBN 978-4000076852<br />
*『COMMON LISP - COMMON LISP 言語仕様書』 著者:[[ガイ・スティール・ジュニア|Guy L. Steele Jr.]] 共立出版 - COMMON LISP の第1版 - ISBN 4320022718<br />
*『{{lang|en|COMMON LISP}} 第2版』 著者:ガイ・スティール・ジュニア、井田 昌之 共立出版 - {{lang|en|ANSI Common Lisp}} 以前の {{lang|en|Common Lisp}} 規格書 CLtL2 - ISBN 4320025881<br />
*『{{lang|en|ANSI Common Lisp}}』 著者:ポール・グレアム、訳:久野 雅樹,須賀 哲夫 - {{lang|en|ANSI Common Lisp}} を使ったプログラミングの解説書。付録Cに Common Lisp 第1版、第2版とそれ以降の変更点が掲載されている。 - ISBN 4894714337<br />
*『入門 {{lang|en|Common Lisp}} &mdash; 関数型4つの特徴とλ(ラムダ)計算』 著者:新納 浩幸 - ISBN 4839920818<br />
*『{{lang|en|[Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp}}』<br />
*『{{lang|en|On Lisp}}』 著者:ポール・グレアム、訳:野田 開 - ISBN 978-4274066375<br />
*『実践 {{lang|en|Common Lisp}}』 ペーター・ザイベル著、佐野匡俊・水丸淳・園城雅之・金子祐介 共訳 - ISBN 978-4274067211<br />
<br />
==外部リンク==<br />
{{wikibookslang|en|Common Lisp}}<br />
<br />
*[http://www.cliki.net/index {{lang|en|CLiki}}] &mdash; {{lang|en|Common Lisp}} に関するフリーソフトウェアについての掲示板<br />
*[http://www.common-lisp.net/ {{lang|en|Common Lisp software repository}}]<br />
*[http://www.cl-user.net/ {{lang|en|The Common Lisp directory}}] &mdash; {{lang|en|Common Lisp}} に関するすべての情報のリポジトリ<br />
*[http://www.computer-books.us/lisp.php <code>Computer-Books.us</code>] ダウンロード可能な {{lang|en|LISP}} の本の一覧<br />
*[http://www.flownet.com/gat/jpl-lisp.html {{lang|en|Lisping at JPL}}]<br />
*[http://cl-cookbook.sourceforge.net/ {{lang|en|The Common Lisp Cookbook}}] &mdash; 有用なプログラミング手法のコレクション<br />
* [http://www.defmacro.org/ramblings/lisp.html {{lang|en|The Nature of Lisp}}] &mdash; XML との比較によるエッセイ<br />
*[http://www.norvig.com/ {{lang|en|Peter Norvig's page}}] &mdash; {{lang|en|Common Lisp}} に関する興味深いリソースを多数含んでいる<br />
*[http://www.asahi-net.or.jp/~kc7k-nd/onlispjhtml/ {{lang|en|On Lisp}}] &mdash; 和訳版が訳者により公開されている。<br />
<br />
===入門書===<br />
*[http://mypage.iu.edu/~colallen/lp/ {{lang|en|Lisp Primer}}] &mdash; コリン・アレンとマネーシ・ダーガトによる解説<br />
*[http://www-2.cs.cmu.edu/afs/cs.cmu.edu/user/dst/www/LispBook/index.html {{lang|en|Common Lisp: A Gentle Introduction to Symbolic Computation}}] &mdash; 初心者向け、オンラインで利用可能<br />
*[http://www.lisperati.com/casting.html {{lang|en|Casting SPELs in Lisp}}] &mdash; {{lang|en|Common Lisp}} の導入向け漫画<br />
<br />
{{Normdaten}}<br />
{{LISP系言語}}<br />
{{プログラミング言語一覧}}<br />
[[Category:LISP|COMMONLISP]]<br />
[[Category:関数型言語|COMMONLISP]]<br />
[[Category:オブジェクト指向言語|COMMONLISP]]</div>
163.58.172.96
Warning : Cannot modify header information - headers already sent by (output started at /home/users/1/sub.jp-asate/web/wiki/extensions/HeadScript/HeadScript.php:3) in /home/users/1/sub.jp-asate/web/wiki/includes/WebResponse.php on line 46