![]() |
![]() LISPのロゴ | |
パラダイム |
関数型プログラミング、手続き型プログラミング、メタプログラミング、マルチパラダイムプログラミング、リフレクション ![]() |
---|---|
登場時期 | 1960年[1][2][3] |
設計者 | ジョン・マッカーシー |
開発者 | スティーブ・ラッセル、ティモシー・P・ハート、マイク・レビン |
型付け | 強い動的型付け |
方言 |
Arc、AutoLISP、Clojure、Common Lisp、Emacs Lisp、EuLisp、Franz Lisp、Hy、Interlisp、ISLISP、Le Lisp、LFE、Maclisp、MDL、newLISP、NIL、PicoLisp、 Portable Standard Lisp、Racket、Scheme、SKILL、Spice Lisp、T、XLISP、Lisp Machine Lisp |
影響を受けた言語 |
Information Processing Language ![]() |
影響を与えた言語 |
CLIPS、CLU、COWSEL、Dylan、Falcon、 Forth、Haskell、Io、Ioke、JavaScript、 Julia、LOGO、Lua、Mathematica、MDL、 ML、Nu、OPS5、Perl、POP-2、POP-11、Python、R、Rebol、RPL、Ruby、Smalltalk、Tcl |
LISP(リスプ)は、関数型プログラミング言語である。S式と前置記法などが特徴である。
1958年秋から開発を始め[1]、1960年3月にLISP Iのマニュアルが書かれ[2]、1960年4月[3]に初めて論文発表されたLISPは、現在でも広範囲に使用されている高水準プログラミング言語の中ではFORTRAN、COBOLに次いで3番目に古い[4](世界で3番目に作られたプログラミング言語という意味では無く、他の言語が使われなくなったという意味)。
これまでに多数の方言が存在してきたが、今日広く使われているLISP方言は、Common Lisp、Scheme、Clojureなどである。
元々、LISPは、アロンゾ・チャーチのラムダ計算表記法に影響を受け、コンピュータプログラムのための実用的かつ数学的な表記法として作られた。そして、すぐに人工知能研究に好まれるプログラミング言語になった。最初期のプログラミング言語として、LISPは計算機科学にて、木構造、ガベージコレクション、動的型付け、条件分岐、高階関数、再帰、セルフホスティング、コンパイラを含む多くのアイディアを切り開いた[5]。
LISPの名前は、「list processor」に由来している。リストはLISPの主要なデータ構造であり、LISPソースコードはそれ自体がリストからできている。その結果、LISPプログラムはソースコードをデータとして操作することができ、プログラマは、マクロ・システムで新しい構文やLISP埋め込みの新しいDSLを作成できる。
コードとデータの互換性は、LISPにそのすぐに認識できる構文を与える。すべてのプログラム・コードはS式または入れ子のリストとして書かれる。関数呼び出しまたは構文は先頭が関数または演算子の名前で、その続きが引数であるリストとして書かれる。具体的には、3つの引数を取る関数f
は、(f arg1 arg2 arg3)
として呼び出される。
古くから使われているが、FORTRANと同様に、現在のLISPは初期のものから変化している。しかし、FORTRANと比べると変化は小さく、1960年のLISP Iの時点で大半の機能は実装済で[2]、ガーベジコレクションやquoteでコードの中にコードを埋め込みevalで実行する仕組みも最初から存在し、その後実装された主なものは静的スコープ(LISP Iは親スコープの変数束縛がおかしく動的スコープだった[6])とマクロと継続である。また、標準ライブラリには永続データ構造が片方向リストしかなかった[2]。マクロは1963年に実装された[7]。静的スコープは研究され続け、1975年のSchemeでクロージャを使用する形で完全に解決した[8][9]。