LISPとは?

辞典・百科事典の検索サービス - Weblio辞書

初めての方へ

参加元一覧


用語解説|製品情報|動画|文献|全文検索

三省堂 大辞林

三省堂三省堂

リスプ 1 [LISP]

list processorコンピュータープログラム言語の一。記号処理目的とし、人工知能研究に広く用いられている。1960年代初頭、J =マッカーシーにより開発

LISP (リスプ) [list processor]



IT用語辞典バイナリ

IT用語辞典バイナリIT用語辞典バイナリ

LISP

フルスペル:LISt Processing language
読み方リスプ
別名:リスト処理言語

LISPとは、手続き型プログラミング言語要素兼ね備えた関数型プログラミング言語である。

LISPは、マサチューセッツ工科大学MIT)に在籍していた人工知能研究者であるジョン・マッカーシーJohn McCarthy)によって考案され、MIT学生だったスティーブ・ラッセル(Steve Russell)によってプログラミング言語として作り上げられた。生まれ経緯言語仕様から人工知能AI)の分野利用されることが多い。

なお、現在多く使われている多くのLISP処理系当初言語仕様とは大きく異なっているものが多い。LISPには、Common LispCLISP)やEmacs Lisp (ELisp)、Schemeなどがあるが、1996年ANSI標準になったCommon LispLISP言語代表的存在になっている。


参照リンク
GNU CLISP - (clisp.org)
Information Technology - Programming Language - Common Lisp - (ANSI
プログラミングのほかの用語一覧
プログラミング言語の種類:  フォートラン  Java  関数型言語  LISP  なでしこ  ニーモニック  PL/I


ウィキペディア

ウィキペディアウィキペディア

LISP

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2011/11/08 02:07 UTC 版)

LISP
パラダイム マルチパラダイム
関数型手続き型
登場時期 1958年
設計者 ジョン・マッカーシー
開発者 スティーブ・ラッセル、ティモシー・P・ハート、マイク・レビン
型付け 強い動的型付け
方言 Common Lisp, Emacs Lisp, ISLISP, Scheme
影響を与えた言語 LOGO, Perl, Python, Smalltalk, Ruby, Dylan, Mathematica, C#
テンプレートを表示

LISPリスプ)は、プログラミング言語の一種である。括弧を多用する独特の構文を持つ。名称「LISP」はリスト処理を意味する英語「list processing」に由来する。

LISPは比較的容易に実装できるため、非常に多くの方言が存在する。

関数型言語に分類されるが、ほとんどのLISP方言は、変数への束縛だけでなく、代入やデータ構造の破壊的操作も可能という、手続き型言語の性格ももっている。

LISPの特徴として以下のようなものがある。

LISPは、全てのプログラミング言語の中でも2番目に古い高級言語であり、現在でも広く使われている。ただし、最古の高級言語FORTRANと同様に、言語仕様は初期と比べて大きく変化している。

目次

LISPの歴史

ジョン・マッカーシーによるLISPの着想は1956年夏の「Dartmouth summer research project on artificial intelligence」(人工知能についてのダートマス大学夏季研究プロジェクト)にさかのぼる。H. Gelernter、J. R. Hansen、C. L. GerberichがIBM 704上のFORTRANでリスト操作をおこなうサブルーチンのパッケージとして1958年にFLPL(FORTRAN list processing language)を実装した。プログラミング言語としてのLISPは1958年の秋に実装がはじまった。データ構造S式やその関数は、実装するコンピュータに依存しないよう設計した。当初のLISPは、ソースを、その式の計算する機械語プログラム変換する、コンパイラとして実装された。1960年に論文Recursive functions of symbolic expressions and their computation by machine, Part I」(記号表現の再帰的関数とそれらを用いた機械計算、第一部)をACMの学会誌「Communications of the ACM」(コミュニケーションズ・オブ・ジ・ACM)に発表する。

LISPで書かれたLISPインタプリタw:Meta-circular evaluator)であるところのevalについて、マッカーシーはその概略を論文では示している。しかし実装可能であるとは考えていなかった。マッカーシーのもとで大学院生であったスティーブ・ラッセルは論文を読んで、evalを機械語に変換したコードを実装してみせ、マッカーシーを驚かせた。そうしてLISPインタプリタが生まれた。

evalの実現は、チューリングマシンにおける万能チューリングマシンに相当する。(当初LISPプログラムの表現法としていた)M式を、LISP自身が扱うデータ構造に変換したS式は、万能チューリングマシンの入力(テープの初期状態)として与えられるチューリングマシンの記述に相当する。マッカーシーはLISPプログラムのS式による表現を、evalを考えるための論文の中だけのものと考えており、実際のプログラムをS式で書くようになるとは考えていなかった。

LISPは当初IBM 704上で実装されたが、その計算機のレジスタを構成する部分の名前が、LISPの基本操作car(content of adress part of register)、cdr(content of decrement part of register)の由来となった。爾来、ほとんどのLISPの方言において、carcdrはそれぞれlistの最初の要素と、最初の要素以外を返す関数の名前となっている。

その表現力と柔軟性によって、LISPは人工知能のコミュニティで人気を持つようになった。しかし、その実行には大量のメモリ空間を必要とし、ガベージコレクションを行う必要があるという弱点も持っている。この結果、LISPは貧弱なハードウェア上では実行が困難であった。

1970年代には、増加するユーザコミュニティと寛大な政府の資金提供によって、LISPプログラムの実行に特化したLISPマシンが開発された。日本でも富士通FACOMα、青山学院大学で開発されたALPS/1などがある。

LISPは実装の容易さゆえに非常に多くの方言を生んだ。マクロを用いれば文法構造それ自体を拡張できるので、ある意味では利用者ごとに方言があるとさえいってよい。大きく分けてMACLISP系とInterlisp系の二つの主流が存在し、後のLISP方言に影響を与えている。

1980年代1990年代には、たくさんのLISP方言を一つの言語に統合しようという努力がなされた。その結果として設計された新しい言語Common Lispは基本的にそれらの方言のスーパーセットであり、それらを置き換えることになった。1994年ANSIはCommon Lispの標準仕様「ANSI X3.226-1994 情報技術プログラミング言語 Common LISP」を出版した。しかし、このときまでには、全盛期に比べるとLISPの市場は小さくなっていた。

一方で1970年代中ごろには、LISPベースでプログラミングに必要な言語機能を極限まで抽象化したschemeが発生し、こちらも現在の主流の一つになっている。

LISPは現在でも広く使われている年代物の言語の一つである。

文法

LISPは「式指向」の言語である。他の多くの言語とは違って、は区別されず、すべてのコードとデータは式として書き下される。式が評価されたとき、それは1つの値(または値のリスト)を生成する。式は他の式に埋め込まれることができる。

マッカーシーの1958年の論文では、2つのタイプの表現が導入されている。内部のデータ構造の表現であるS式(記号式、: symbolic expression、sexp)と、S式を引数に取りS式を返す関数を表す、外部表現であるM式(メタ式、: meta expression)である。マッカーシーは、S式はプログラムの処理対象のデータの表現に使い、LISPプログラムの表現にはM式を使った。S式によるプログラムの表現は論文の中のみのものと考えていた。しかし、S式で表現されたプログラムを評価するevalが実装され、S式で表現することでプログラムをプログラムで操作できるという利点があり、今日ではほとんどすべてのLISP言語でM式は使用されておらず、プログラムとデータの両方にS式を使用する。

LISPの用いる S式は括弧を大量に使用するため、批判を受けることもある。「LISP は 『lots of irritating superfluous parentheses』(過剰でいらいらさせる大量の括弧)に由来する」というジョークもある。しかし、S式による構文はLISPの能力を生み出してもいる。この構文は極めて正規化されているので、コンピュータによる操作が容易に行うことができる。

式への依存が、LISPに優れた柔軟性を与えている。LISPの関数は、それ自身がリストとして書かれており、データとまったく同様に扱うことができる。LISPのプログラムは他のLISPプログラムを処理するように書くことができる。これは、メタプログラミングと呼ばれる。多くの LISP方言はこの機能をマクロシステムで活用しており、言語自身の機能をほとんど際限なく拡張することを可能にしている。

LISPでのリストは空白と括弧で区切られた要素で記述される。たとえば、

(1 2 "foo")

1, 2, "foo"の値を要素として持つ1つのリストである。これらの値は暗黙の型を持つ。これらは2つの整数と1つの文字列であるが、そのように宣言されている必要はない。空のリスト()nilとも書ける。

式は前置記法のリストとして書かれる。最初の要素はフォーム(関数、演算子、マクロ、特殊フォームのいずれか)の名前である。リストの残りは引数である。たとえば、関数listはその引数をリストとして返す。つまり式

(list 1 2 "foo")

は評価されてリスト(1 2 "foo")を返す。

もし引数のどれかが式であれば、それを含む式が評価される前にそれが再帰的に評価される。たとえば、

(list 1 2 (list 3 4))

はリスト(1 2 (3 4))に評価される。つまり、3番目の引数はリストであり、リストはネストできるのである。

算術演算も同様に処理される。式

(+ 1 2 3 4)

は10に評価される。この式は中置記法では"1+2+3+4"と等価である。

特殊形式(special form)は制御構造など、引数の位置にあるものを通常のようには評価しないような機能を提供する。たとえば、ifは3つの引数をとり、 第一引数の値が真なら第二引数に、偽なら第三引数に評価される。ここで真とはnil以外、偽とはnilのことである。したがって式

(if nil
  (list 1 2 "foo")
  (list 3 4 "bar"))

(3 4 "bar")に評価される。言うまでもないが、nilのところに自明でない式が来ることによって有用になる。

特殊形式lambdaによって

(lambda (x y)
  (+ x y))

のようにして、関数を表現する。この例は、ラムダ計算における (λx y.(x + y)) をLISPで表現したものである。

特殊形式defunは、このような関数に、名前を付けて定義するために用いられる。defunの引数は引数のリストと、関数として評価される式である。




「LISP」の続きの解説一覧




固有名詞の分類




LISPのページへのリンク
「LISP」の関連用語
LISPのお隣キーワード
モバイル
モバイル版のWeblioは、下記のURLからアクセスしてください。
http://m.weblio.jp/
» モバイルで「LISP」を見る
_ _   


LISPのページの著作権
Weblio 辞書情報提供元は参加元一覧にて確認できます。

  
三省堂三省堂
Copyright (C) 2001-2012 Sanseido Co.,Ltd. All rights reserved.
株式会社 三省堂三省堂 Web Dictionary
IT用語辞典バイナリIT用語辞典バイナリ
Copyright © 2005-2012 Weblio 辞書 IT用語辞典バイナリさくいん。 この記事は、IT用語辞典バイナリLISPの記事を利用しております。
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのLISP (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2012 Weblio RSS