Common Lisp
Common Lisp(コモン・リスプ)は、コンピュータ・プログラミング
パラダイム |
マルチパラダイムプログラミング、オブジェクト |
---|---|
| |
ANSI X3J13 | |
| |
Allegro Common Lisp、ABCL、CLISP、Clozure Common Lisp、CMU Common Lisp、Corman Lisp、Embeddable Common Lisp、GNU Common Lisp、LispWorks、Movitz、Scieneer Common Lisp、Steel Bank Common Lisp、Symbolics Common Lisp | |
CLtL1、CLtL2、ANSI Common Lisp | |
LISP、Lisp Machine Lisp、Maclisp、Scheme、Interlisp | |
Clojure、Dylan、Eulisp、ISLISP、SKILL、newLISP、PicoLisp、Stella、SubL | |
プラットフォーム | クロスプラットフォーム |
ウェブサイト |
common-lisp |
LISP |
Lispの
関数 型 だけでなく、手続 き型 的 な言語 要素 に関 しても標準 化 している。関数 単位 の細 かで反復 的 なコンパイルにより、効率 的 な実行 を可能 にすると同時 にREPLによる動的 で迅速 な開発 をサポートする。関数 オブジェクト、複素数 、有理数 、多倍 長 整数 などを一 級 オブジェクトとして持 つ。- すべてはオブジェクト。マルチメソッド
機能 をサポートした強力 な動的 オブジェクトシステムCommon Lisp Object Systemを備 える。 - assert
関数 による基本 的 なテスト駆動 開発 が可能 。 - 「
例外 /ハンドラ」の処理 をさらに一 段階 分離 した「Condition/Restart/Handler」による例外 処理 。 - マクロ(プログラムによるコンパイル
時 のコード変換 )やリーダーマクロ(特定 の文字 に対 して新 しく構文 を拡張 する)といった標準 機能 により言語 を拡張 可能 。
構文
意味
評価 順
(F A1 A2)
のようなSF
がF
がマクロならば、まずマクロを
;; 2 と 2 を足 す
(+ 2 2)
→ 4
;; 与 えられた数 を二乗 する関数 を定義
(defun square (x)
(* x x))
;; 関数 を実行
(square 3)
→ 9
静的 スコープ
データ型
Common Lispの
(array fixnum (5 * 7))
は、データ
Compound Typeでは、
(defun mod3 (n)
(= (/ n 3) 0))
(deftype mod3 ()
`(and fixnum (satisfies mod3)))
しかし、Common LispにはHaskellにおけるような
アトム ATOM
Common Lispにおけるアトムとは、(not cons)
として
数値 (type NUMBER)
- NUMBER
- COMPLEX
- REAL
- FLOAT
- SINGLE-FLOAT
- DOUBLE-FLOAT
- RATIONAL
- INTEGER
- SIGNED-BYTE
- UNSIGNED-BYTE
- FIXNUM
- BIGNUM
- INTEGER
- RATIO
- FLOAT
Common Lisp は
文字
Common Lisp の
シンボル
シンボルt
と nil
によって
データ構造
シーケンス
Common Lisp におけるシーケンス
car
スロットはリストのcdr
スロットはcdr
だけは nil を
配列
Common Lisp は
ビットベクタとベクタはシーケンスのsubtypeでもある。
その他
ハッシュテーブルはデータオブジェクト
関数
Common Lisp では、sort
;;「 > 関数 」を比較 オペレータとして用 い、リストを整列 する
(sort (list 5 2 6 3 1 4) #'>)
→ (6 5 4 3 2 1)
;; リスト内 のサブリスト中 の最初 の要素 (car) に沿 ってリストを整列 する
(sort (list '(9 a) '(3 b) '(4 c))
(lambda (x y) (< (car x) (car y))))
→ ((3 b) (4 c) (9 a))
関数 定義
defun
マクロは
(defun square (x)
(* x x))
(defun square (x)
"Calculates the square of the number x."
(declare (number x) (optimize (speed 3) (debug 0) (safety 1)))
(* x x))
lambda
compile
によって
総称 関数 とメソッドの定義
defgeneric
マクロは、defmethod
マクロはメソッドを
(defgeneric add (a b))
(defmethod add ((a number) (b number))
(+ a b))
(defmethod add ((a string) (b string))
(concatenate 'string a b))
(add "Zippy" "Pinhead")
→ "ZippyPinhead"
(add 2 3)
→ 5
関数 名前 空間
defun
、flet
そして labels
のようなオペレータは
function
スペシャルオペレータ(#'
とsort
>
で#'>
というコードで
Scheme のlist
あるいは string
といった
その他 の型
Common Lisp が
- パス
名 は ファイルシステム におけるファイルやディレクトリを表現 する。Common Lisp のパス名 機能 は、ほとんどのオペレーティングシステムのファイル命名 規則 より一般 的 なものであり、プログラムが様々 なシステムを通 してポータブルにファイルにアクセスする事 を可能 としている。 入出力 ストリームは、端末 や開 かれているファイルのような、バイナリデータ、テキストデータの入力 元 と出力 先 を表現 する。- Common Lisp は
組込 みの擬似 乱数 生成 器 (PRNG)を備 えている。ランダムな状態 オブジェクトは擬似 乱数 のソースとして再 利用 可能 であり、ユーザーが乱数 の種 を与 える事 や、同 じ数列 を再生 する事 を許可 している。 - コンディション[
注釈 13]はエラーや例外 、その他 のプログラムが反応 する可能 性 がある有意 なイベントを表現 するための型 である。 - クラス[
注釈 14]は第 一 級 のオブジェクトである。そして、それ自身 がメタクラス[注釈 15]と呼 ばれるクラスのインスタンスである。
スコープ
マクロ
LISP
マクロはプログラマーに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
すべてのマクロは、
Common Lisp Object System
Common Lisp は オブジェクト
他 の LISP 系 言語 との比較
Common Lisp と
Lisp Machine Lisp や MACLISP といった Common Lisp のspecial
go
タグやブロックloop
キーワードなどlis
や lst
、lyst
といったsort
のサンプルのように
Common Lisp はまた、#t
と #f
というt
と nil
[if
のようなnil
でない
Scheme のdo
、dolist
、loop
実装
Common Lisp は、
Common-Lisp.net
や Common Lisp Open Code Collection プロジェクトである。
Common Lisp の
CLISP のような、UNIX
処理 系
再 配布 可能 な実装 の一覧
- Steel Bank Common Lisp (SBCL)
後述 のCMUCL から分岐 して保守 性 を大幅 に強化 した処理 系 [6]であり、現在 通常 のx86コンピュータで最 も使用 されている実装 の一 つ。SBCL は、REPLから入力 された評価 式 であっても、インタプリタを介 さず全 てネイティブコードにコンパイルしてから実行 する[注釈 19]。CMUCL譲 りのコンパイラにより非常 に強力 な最適 化 を行 うことが出来 、生成 するコードはC言語 のコードを上回 ることもある。SBCL は、CMUCL が動作 するプラットフォームに加 えて、Linux(PowerPC、SPARC、MIPS)、Mac OS X、Microsoft Windows上 でも動作 する。ただし、HP-UX上 では動作 しない。- Clozure Common Lisp (CCL)
- フリー の
処理 系 であり、SBCLと並 んで使用 されている実装 。祖先 はMacintoshをプラットフォームとするMacintosh Common Lispという商用 の処理 系 であったが、他 のOSプラットフォームへオープンソースとしてフォークされるようになり混同 を避 けるためClozure CLと改名 した[7]。その歴史 のため、Mac OS の Cocoa API との連携 (実装 による独自 機能 )に強 みをもつほか、ファイルの遅延 ローディング、デバッグメッセージのわかりやすさなどの特色 を持 つ。現在 は Mac OS X、Darwin、Linux(PowerPC、Intel x86-64)Windows に移植 されている。[8] - Embeddable Common Lisp (ECL)
後述 のGCLから派生 した、C言語 で作成 されたプログラムに組 み込 むために設計 された処理 系 である。lispコードはCのコードに変換 された上 でコンパイル実行 されるので、最低限 のCコンパイラしか提供 されていない組 み込 み機器 などの環境 でも、クロスコンパイルにより利用 することが出来 る。また、C言語 の高速 性 も受 け継 いでいる。- Armed Bear Common Lisp (ABCL)
- Java
仮想 マシン上 で動作 する実装 である。同 マシンのJavaバイトコードへのコンパイラを備 えており、Common Lisp プログラムから Java のライブラリにアクセスする事 が可能 。この処理 系 は Armed Bear J Editor のコンポーネントであるが、単独 で利用 する事 もできる。[9]近年 もアクティブに開発 されている。 - CMU Common Lisp (CMUCL)
- カーネギーメロン
大学 で開発 された実装 を起源 とする。現在 はボランティアグループによりメンテナンスされる。Pythonと呼 ばれる(プログラミング言語 の Python とは関連 なし)高速 なネイティブコードコンパイラの起源 となった実装 である。Intel x86上 の Linux や BSD、Alpha上 の Linux、Solaris、IRIX、HP-UX、PowerPCを含 むMac OS Xなどで動作 する。 - CLISP
- バイトコードコンパイラを
備 えた実装 である。移植 性 に富 み、多 くの UNIX や、Mac OS X などの UNIXに類似 したシステム、および Microsoft Windows、その他 のオペレーティングシステムで動作 する。 - GNU Common Lisp (GCL)
- Kyoto Common Lisp から
発展 したGNUプロジェクトの製品 である。完全 な ANSI準拠 ではないが、数学 ツールの Maxima や AXIOM、ACL2 などを含 むいくつかの大 規模 なプロジェクトで採用 されている。この処理 系 は 11 の異 なるアーキテクチャ上 の Linux で動作 し、Windows や Solaris、FreeBSD でも動作 する。[10] - Macintosh Common Lisp (MCL)
- デジツール
社 [11]製 の処理 系 である。MCL 5.2 からオープンソース化 された。PowerPC上 の Mac OS X で動作 する。 - Movitz
- x86 アーキテクチャ
用 の処理 系 であり、オペレーティングシステムに依存 しない。 - Poplog
- Common Lisp を
備 えたバージョンが存在 する。POP-11 は Common Lisp と Prolog、Standard ML を備 えており、複数 の言語 を混在 させたプログラミングが可能 である。また、全 ての言語 が逐次 的 にコンパイルされる。コンパイラと通信 する Emacs に類似 のエディタが統合 されている。 - Jatha
- Common Lisp の
大半 をサブセットとして実装 した Java のライブラリである。[12] - Corman Lisp
- Windows
用 の統合 開発 環境 。コーマン・テクノロジーズ[13]による商用 処理 系 だったが、2015年 にオープンソース化 [14]
商用 の実装
- Allegro Common Lisp
- Franz(フランツ)[15]による
処理 系 。 - LispWorks
- LispWorks(リスプワークス)[16]による
処理 系 。 - Scieneer Common Lisp
- Scineneer(サイエニア)[17]による
処理 系 。
著名 なアプリケーション
政府 機関 、非 営利 団体 での利用
- SPIKE
- ハッブル
宇宙 望遠鏡 運用 管理 のためのプランニング・スケジューリングシステム。[18]角度 変更 や、指定 地点 の撮影 などのさまざまな指令 を、燃料 や希望 時間 帯 など多様 かつ複雑 な制約 のもとで、最適 にスケジューリングする。 - Remote Agent (remote intelligent self-repair software, RAX)
- NASA Deep Space 1 に
搭載 された、自己 修復 ・監視 用 人工 知能 。NASA Ames Research Center および NASA JPLによって開発 された。人間 の監視 なしで探索 機 を航行 させるための自律 エージェント。多数 のコンポーネントからなるが、その主要 な3つは、EUROPA(マーズ・エクスプロレーション・ローバー のためのプランニングシステム)、EXEC(プラン実行 システム)、Livingstone(モデルベース異常 診断 システム)である。1999年度 の NASA ソフトウェア・オブ・ジ・イアー賞 を受賞 した。[19]
商用
- Yahoo! ストア
- en:Viawebにより
作成 され、後 にYahoo!に買収 された。誰 でも簡単 に使 えるウェブストア作成 サービスを提供 し、顧客 の作 ったウェブサイトで他 のユーザが買 い物 をするという、史上 初 めてのアプリケーションサービスプロバイダである。後 に C++ と Perl で書 き直 された(と発表 された)。ポール・グレアムによればその実態 は「C++でLispインタプリタを書 いた」というようなものだった、という[20]。 - ジャック×ダクスター,クラッシュ・バンディクー
等 - ノーティードッグによるPlayStation、PlayStation 2
用 のビデオゲーム。クラッシュ・バンディクーはGOOL(Game Oriented Object Lisp)[21]、ジャック×ダクスターはGOOLを機能 的 に拡張 した全 く別 の言語 Game Oriented Assembly Lispによって実装 されている。これらは、プレイステーションらの特殊 なプロセッサ事情 に合 わせた自作 コンパイラを含 んでいる。 - D-Wave 1
量子 計算 機 - D-Wave Systems による
量子 計算 機 (正 しくは断熱 量子 アニーリング専用 ハードウェア)。ホストOSがCommon Lispで作成 されている[22]。ただし、利用 者 向 けのインターフェースはPython APIである。求人 ページにおいても、Common Lisp(あるいは他 の関数 型 言語 )のプログラミング経験 を求人 要件 としてあげている[23]。 - Orbitz
- ITA Softwareによって
開発 された、有名 な旅行 予 約 サイト。ITA Software は2011年 に Google に買収 され、一部 門 となっている[24]。旅行 予約 には、莫大 な数 の可能 な経路 の中 から高速 に最短 ・最 安 の路線 を選択 する知的 探索 アルゴリズムが必要 であり、そのためにLispが用 いられている。 - Mirai
- イズウェア
社 [25]の製品 で、統合 された 2D/3D コンピュータグラフィックス作成 環境 である。ポリゴンモデラー、先進 的 な IK/FK ノンリニアアニメーションシステム、2D/3D ペインティングなどを備 えていた。動画 やビデオゲーム、軍事 シミュレーションの世界 では有名 である。[26] - Piano
飛行機 のスケジュール設計 や競合 との比較 のためのシステム。[27]- Xanalys
警察 によって使 われている世界 的 なセキュリティや詐欺 防止 サービスのための原因 調査 用 ソフトウェア。[28]- ICAD
- ナレッジ・テクノロジーズ・インターナショナル
社 製 の機械 設計 ソフトウェア。 - General-purpose Declarative Language
- ジェンワークス・インターナショナル
社 [29]の製品 。ウェブベースのエンジニアリング、デザイン、ビジネスアプリケーション作成 用 開発 ツールである - Igor Engraver
音楽 記 譜 用 プログラム。[30]
オープンソース
- Maxima
代数 的 数式 処理 エキスパートシステム。GPL で公開 されており、自由 に入手 することができる。微分 方程式 や不定 積分 のように解 が式 であるものは、人間 が解 くのと同 じように、式 の形 で解 を返 すことができる。Richard Fateman教授 によって作成 されたMacsymaの、Common Lisp上 の再 実装 である。- ACL2
定理 証明 用 のシステム- Compo
複雑 な音楽 構造 を自然 なやり方 で表現 する事 を可能 とした言語 。[31]- Lisa
知的 エージェント作成 のためのルールベースのプロダクションシステム。[32]
注釈
- ^ ごくまれに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/
参考 文献
- Common Lisp HyperSpec
- 『LISP
原書 第 3版 I』著者 :P.H. ウィンストン、B.K.P. ホーン訳 :白井 良明 、井田 昌之 、安部 憲 広 - ISBN 4563014648 - 『LISP
原書 第 3版 II』著者 :P.H. ウィンストン、B.K.P. ホーン訳 :白井 良明 、井田 昌之 、安部 憲 広 - ISBN 4563014656 - 『Common Lisp
入門 』著者 :湯浅 太一 、萩谷 昌己 - ISBN 978-4000076852 - 『COMMON LISP - COMMON LISP
言語 仕様 書 』著者 :Guy L. Steele Jr.共立 出版 - COMMON LISP の第 1版 - ISBN 4320022718 - 『COMMON LISP
第 2版 』著者 :ガイ・スティール・ジュニア、井田 昌之 共立 出版 - ANSI Common Lisp以前 の Common Lisp規格 書 CLtL2 - ISBN 4320025881 - 『ANSI Common Lisp』
著者 :ポール・グレアム、訳 :久野 雅樹 ,須賀 哲夫 - ANSI Common Lisp を使 ったプログラミングの解説 書 。付録 Cに Common Lisp第 1版 、第 2版 とそれ以降 の変更 点 が掲載 されている。 - ISBN 4894714337 - 『
入門 Common Lisp —関数 型 4つの特徴 とλ (ラムダ)計算 』著者 :新 納 浩幸 - ISBN 4839920818 - 『
実用 Common Lisp著者 :ピーター・ノーヴィグ - ISBN 978-4798118901』 - 『On Lisp』
著者 :ポール・グレアム、訳 :野田 開 - ISBN 978-4274066375 - 『
実践 Common Lisp』 ペーター・ザイベル著 、佐野 匡 俊 ・水 丸 淳 ・園 城 雅之 ・金子 祐介 共 訳 - ISBN 978-4274067211
外部 リンク
- Welcome to Common-Lisp.net!
公式 ウェブサイト - CLiki — Common Lisp に
関 するフリーソフトウェアについての掲示板 - Common Lisp software repository
- The Common Lisp directory — Common Lisp に
関 するすべての情報 のリポジトリ Computer-Books.us
ダウンロード可能 な LISP の本 の一覧 - Lisping at JPL
- The Common Lisp Cookbook —
有用 なプログラミング手法 のコレクション - The Nature of Lisp — XML との
比較 によるエッセイ - Peter Norvig's page — Common Lisp に
関 する興味深 いリソースを多数 含 んでいる - On Lisp —
和訳 版 が訳者 により公開 されている。
入門 書
- Lisp Primer — コリン・アレンとマネーシ・ダーガトによる
解説 - Common Lisp: A Gentle Introduction to Symbolic Computation —
初心者 向 け、オンラインで利用 可能 - Casting SPELs in Lisp — Common Lisp の
導入 向 け漫画