LISP

出典: フリー百科事典『ウィキペディア(Wikipedia)』
LISP
登場時期 1960年 (64年前) (1960)[1][2][3]
設計者 ジョン・マッカーシー
開発者 スティーブ・ラッセル、ティモシー・P・ハート、マイク・レビン
型付け 強い動的型付け
方言 ArcAutoLISPClojureCommon LispEmacs LispEuLispFranz LispHyInterlispISLISPLe LispLFEMaclispMDLnewLISPNILPicoLisp
Portable Standard LispRacketSchemeSKILLSpice LispTXLISPLisp Machine Lisp
影響を与えた言語 CLIPSCLUCOWSELDylanFalcon
ForthHaskellIoIokeJavaScript
JuliaLOGOLuaMathematicaMDL
MLNuOPS5PerlPOP-2POP-11PythonRRebolRPLRubySmalltalkTcl
テンプレートを表示

LISPS

1958[1]19603LISP I[2]19604[3]LISP使FORTRANCOBOL3[4]3使

使LISPCommon LispSchemeClojure

LISPLISP[5]

LISPlist processorLISPLISPLISPLISPDSL

LISPS3f(f arg1 arg2 arg3)

使FORTRANLISPFORTRAN1960LISP I[2]quoteevalLISP I[6][2]1963[7]1975Scheme使[8][9]

LISPの歴史[編集]

ジョン・マッカーシー(上)、スティーブ・ラッセル(下)

LISP1958MIT[1][10]1960ACMCommunications of the ACMRecursive Functions of Symbolic Expressions and Their Computation by Machine, Part I[3]II eval  meta-circular evaluatoren:Meta-circular evaluator 19551956IPLLISP使

 meta-circular evaluator LISPLISPLISPLISP

meta-circular evaluator LISPMLISPSLISPSevalS

LISPIBM 704car[ 1]cdr[ 2]LISPcarcdrlist

1960LISP I[2]1962LISP 1.5[11]1960LISP I[2]1960LISP IM apply[f;x;p]  f x p S[2]1964 The Programming Language LISP: Its Operation and Applications MS[12]

LISPPDP-10PDPLISPPDP-6124bitLISP 1.536bit[13]LISPAISHRDLUMicro PlannerMACLISP

1968LISPREDUCE[14]MacsymaLISPLISPLISPLISPLISP

LISP19701980MACLISPInterlispLISP

1975LISPSchemeScheme使[8][9]SchemeML1973Standard MLOcamlHaskell

19801990LISP1984Common Lisp1994ANSICommon LispANSI X3.226-1994 American National Standard for Programming Language Common LISPLISP

LISP使

LISP処理系と派生言語のタイムライン[編集]

LISP系言語の大まかな流れ
1960 1965 1970 1975 1980 1985 1990 1995 2000 2005 2010 2015 2020
LISP LISP I, 1.5, 2
Maclisp Maclisp
Interlisp Interlisp
ZetaLisp Lisp Machine Lisp
Scheme Scheme
NIL NIL
Common Lisp Common Lisp
T T
Emacs Lisp Emacs Lisp
AutoLISP AutoLISP
ISLISP ISLISP
EuLisp EuLisp
PicoLisp PicoLisp
Racket Racket
Arc Arc
Clojure Clojure
LFE LFE
Hy Hy

文法[編集]


LISP

1960[3]2S: symbolic expressionsexpSSM(: meta expressionS使LISPM使SSevalSLISPM使S使

LISPS使LISP  lots of irritating superfluous parenthesesSLISP

LISPLISPLISPLISP LISP

LISP
(1 2 "foo")

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

評価[編集]

ここでは Lisp の方言の一つである Common Lisp を例に説明する。現実の実装では、上記のリストを直接処理系に入力するとエラーが起きる。

CL-USER> (1 2 "foo")
; in: 1 2
;     (1 2 "foo")
; 
; caught ERROR:
;   illegal function call

(1 2 "foo")''(1 2 "foo")LISP

list
(list 1 2 "foo")

は評価されてリスト'(1 2 "foo")を返す。このことを念頭に置いて、もう一度最初に挙げた式を振り返ると、

(1 2 "foo")
; 1 という関数名は存在しない

という仕組みでによりエラーが返されたことがわかるだろう。

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

(list 1 2 (list 3 4))

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

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

(+ 1 2 3 4)

10

special formif3 nilnil
(if (evenp 5)
  (list 1 2 "foo")
  (list 3 4 "bar"))

(3 4 "bar")evenpt nil5(evenp 5)if(list 3 4 "bar")

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

(λx y.(x + y))LISP

defundefun

純LISP[編集]


1980LISPLISPLispkit LispSECD5nilteval


car

cdr

cons

eq

atom


cond

quote

define(label)

[]


LISP (Common Lisp) LISP

LISP


(defun factorial (n)
  (if (<= n 1)
    1
    (* n (factorial (- n 1)))))

下記は別のやり方であり、末尾再帰になっている。

(defun factorial (n &optional (acc 1))
  (if (<= n 1)
    acc
    (factorial (- n 1) (* acc n))))

再帰と対照的な概念である反復による計算の例として、Common Lispの代表的な繰り返し構文であるloopマクロを使った例を示す。

(defun factorial (n)
  (loop for i from 1 to n
        for fac = 1 then (* fac i)
        finally (return fac)))

loopはマクロであり、これが展開されて最終的にはプリミティブな構文の組み合わせに翻訳される。

以下の関数は引数にリストをとり、そのリストの要素の順番を逆にしたものに評価される(LISPは実際には同じことを行うビルトイン関数を普通持っている)。

(defun reverse (l &optional acc)
  (if (atom l)
    acc
    (reverse (cdr l) (cons (car l) acc))))

オブジェクト指向システム[編集]


LISP

MITFlavors

FlavorsCLOS(The Common Lisp Object System)

CLOS(method combination)(FIXME)LISPCommon Lisp

[]


AutoLISP/Visual LISP - AutoCAD

Cambridge LISP - IBMAmiga

Clojure - JavaLISP

Common Lisp - ZetaLISPFranz LispInterLISP

ELisp -LISP Emacs Lisp

Emacs Lisp - GNU Emacs

Franz LISP - Franz, Inc

InterLisp - BBNBBN LISPInterLispLISPInterLisp-DInterLISP65Atari6502

KLISP - 1967西TOSBAC-3400LISP

LISP ILISP 1.5 - MIT

Lispkit LISP - SECD使

MACLisp - MITMACAppleMacintoshLISP

MockLisp - Gosling Emacs (Unipress Emacs) LISP

Oak LISP - Scheme

RPL - Reverse Polish LISP(LISP)Forth

Scheme - LISP

SKILL - EDA使

ZetaLisp - LISP使MACLISP

LISP - 

xyzzy - Microsoft Windowsxyzzy Lisp

[]

注釈[編集]

  1. ^ : content of address part of register
  2. ^ : content of decrement part of register

出典[編集]



(一)^ abcThe implementation of LISP. www-formal.stanford.edu. 202447

(二)^ abcdefgMcCarthy et al. LISP I Programmer's Manual.  Software Preservation Group. softwarepreservation.org. 202447

(三)^ abcdRECURSIVE FUNCTIONS OF SYMBOLIC EXPRESSIONS AND THEIR COMPUTATION BY MACHINE (Part I) (12-May-1998). www-formal.stanford.edu. 202447

(四)^ SICP: . 20151020 Lisp使. Fortran.

(五)^ Paul Graham. . 20151020

(六)^ From LISP 1 to LISP 1.5. www-formal.stanford.edu. 202447

(七)^ Hart, Timothy P. (1963). MACRO definitions for LISP (Report). Massachusetts Institute of Technology. hdl:1721.1/6111

(八)^ abSussman, Gerald Jay; Steele, Guy Lewis (1975). Scheme: An Interpreter for Extended Lambda Calculus (Report). Massachusetts Institute of Technology. hdl:1721.1/5794

(九)^ abSussman, Gerald Jay; Steele Jr, Guy L (1998). Scheme: A interpreter for extended lambda calculus. Higher-Order and Symbolic Computation (Springer) 11 (4): 405439. doi:10.1023/A:1010035624696. https://doi.org/10.1023/A:1010035624696. (Paid subscription required)

(十)^ ANSI Common Lisp2002911ISBN 4-89471-433-7 

(11)^ McCarthy et al. LISP 1.5 Programmer's Manual.  Software Preservation Group. softwarepreservation.org. 202447

(12)^ Berkeley and Bobrow, editors. The Programming Language LISP: Its Operation and Applications.  Software Preservation Group. softwarepreservation.org. 202447

(13)^  Peter J Hurley. The History of TOPS or Life in the Fast ACs. 2016106

(14)^ REDUCE: The First Forty Years

関連項目[編集]

外部リンク[編集]