Լ α
α : Robert W. Sebesta , .ϻȣ , ȫǻ, 1999 ( : Concepts of Programming Languages, 4th ed), Page 659~700
Լ αְ Ʈ ߿ Լ α ϱ α ҰѴ. Լ ʸ ξ , Church Լ ȣ Ͽ Լ ⺻ ϸ鼭 Ѵ. , Լ ǿ Ϲ Լ ¸ Ѵ. , Լ α Ұϰ, ̾ ù° Լ LISP LISP Ʈ ȣ Լ ҰѴ. ణ Scheme Ұϰ ⺻ Լ, Ư , Լ (functional form), Scheme ۼ Լ Եȴ. , Scheme Ư¡ Ѵ. Լ α ٸ (Scheme ٸ) ̱ COMMON LISP, ML, Haskell ҰѴ. Լ α Ѵ. , Լ ϰ Ѵ.
å ó 13 ַ ü ̾. Smalltalk ϰ 츮 ü ¸ ´. η ù° ̴.
̿ 缺 κδ von Neumann (1 忡 ) Ѵ. ѰϿ ⺻ (FORTRAN I) Ű ִ. von Neumann ǻ ȿ ̿ϱ Ǿ. Ÿ α κ αӿ ؼ Ƶ̴ ˷, ⺻ ģ Ʈ ߰ ʿ ǰ ִ.
迡 ٸ ϸ, ̵ Ư ǻ ȿ ຸٴ Ư α з̳ п ̴. ݱ, ̵ ۼ α ϴ ־ ȿ Ұ ̵ ó Ǵ Ҵ.
Լ Լ α з ߿ Ÿ ϳ ̴. ̷ Ÿ α Լ α ؼ ȴ.
LISP Լ ۵, ȿ Ų ߿ Ư¡ ߴ. LISP , ϰ Ǵ ǹ̿, Լ ߿ ̴. Scheme ۰, - Ģ ϴ LISP Ļ̴. COMMON LISP LISP 1980 ʹ Ļ ȥ̴. ML LISP Scheme Ÿ Լ ̴. Haskell κ ML ʸ ΰ Լ ̴.
Լ α Ұϴ , Լ α ƴϴ. Լ α ġ ϱ Ǵ ̴. 츮 Լ Լ α Լ α Ÿ ϱ Լ Scheme κ ҰѴ. ڰ ִ α ۼϵ Scheme ڷᰡ ԵǾ. α Լ α ƴ. ̰ ȴ.
Լ ǿ (domain set) ̶ Ҹ Ҹ ġ (range set) ̶ Ҹ (mapping) ̴. Լ Ǵ Բ Ȥ ǿ ġ Ѵ. ǥ Ǵ 쿡 ̺ ȴ. Լ ǿ Ư ҿ ȴ. ǿ ϶. Լ ġ Ҹ Ǵ ȯѴ.
Լ ⺻ Ư ϳ ǥ α Ϲ ݺٴ Ϳ ǽ ȴٴ ̴.
Լ ٸ ߿ Ư ۿ (side effect) , ־ Ѵٴ ̴. α ۿ Ҹ ϴ ȴ. Լ ϱ ִ ϱ Ѵ. ǹ . ۿ .
Լ Ǵ Լ ̸, ȣ ۼ Ű Ʈ, ǥ ۼȴ. ,
cube (x) x * x * x, x Ǽ
ǿ ǿ ġ Ǽ̴. ȣ " ǵȴ" ǹѴ. Ű x ǿ Ҹ Ÿ, Լ ϴ Ư Ҹ Ÿ ȴ. ̰ Լ Ű ٸ ̴.
Լ Լ ̸ ǿ Ư ҿ ν õȴ. ġ Ҵ Ű ǿ ҷ ġȯ Լ ν ´. , cube (2.0) 8.0 Ѵ. ٽ ѹ, Լ ε ȵ Ű ٴ (ε Ű Ư ̸̴) ϴ ߿ϴ. Ű ǿ ҿ εǰ ȴ.
Լ ʱ ̷ Լ ϴ ۾ Լ ϴ ۾ иߴ. Alonzo Church (Church, 1941) ȣ (̸ ) Լ ϴ Ѵ. ٽ (lambda expression) Ű Լ Ѵ. ٽ Լ ü̴. , .
(x) x * x * x
տ Ѵ, Ű ǿ Ҹ Ÿ, Ű Ư ҿ εȴ. ٽ ־ Ű , Ű ȴٰ Ѵ. Լ ϴ. ٽ ó Ÿ.
( (x) x * x * x) (2)
8 ̴.
ٸ Լ ǿ ٽ ̻ Ű ִ.
Լ Ǵ Լ (functional form) Ű Լ ϰų Լ ϴ (Ǵ ) Լ̴. Ϲ Լ ´ ռ Լ (function composition) ̴. ռԼ Լ Ű Ͽ ι° Ű Լ ù° Ű Լ Լ Ѵ. ռ Լ o ڷ Ͽ ۼѴ.
h f o g
,
f (x) x + 2
g (x) 3 * x
(construction) Ű Լ Ʈ ϴ Լ ̴. ڿ , ڴ Լ Ű ڿ Ͽ Ʈ Ǵ Ѵ. ڴ [f, g] ó Լ ȣ (bracket) ȿ μ ǥõȴ. .
g (x) x * x
h (x) 2 * x
i (x) x / 2
, [g, h, i] (4) (16, 8, 2) Ѵ.
- (apply-to-all) ڴ Űμ Լ ϴ Լ ̴. Ʈ ߴٸ, - ڴ Ʈ ִ Լ Ű Ͽ Ʈ Ѵ. - ڴ Ÿ. .
h (x) x * x
(h, (2, 3, 4)) (4, 9, 16) Ѵ.
ٸ Լ ° , Ư ϰ ִ.
Լ α Լ ڴ ̴. ̰ ذῡ ⺻ ٸ ȴ. ǥ ǰ - α ǥõȴ - ȴ. ̷ ʿ α п ȴ. α ǥ κ ؾ Ѵ. , ϱ
(x + y) / (a - b)
(x + y) ȴ. (a - b) Ǵ Ǿ Ѵ. ȭϱ Ͽ, Ϸ ִ ǥ ߰ Ҹ óѴ. ߰ Ҵ 䱸, λ αӿ ȴ.
Լ α ʴ´. ̰ α Ǵ ǻ κ αӸ Ӱ Ѵ. ݺ Ұϴ. ֳϸ, ݺ DZ ̴. ݺ ݺ ƴ϶ ͷ Ǿ Ѵ. α Լ ǿ Լ ̰, Լ ϴ ̷. Լ α ǹ̷а ǥ ǹ̷ ǹ̿ ¸ ʴ´. Լ Ű ־ٸ ϴ. ̰ (referential transparency) ̶ Ѵ. Լ ǹ̷ Ư¡ ϴ Լ ǹ̺ ξ ϴ.
Լ Լ , Լκ Լ ϴ Լ , Լ , Ÿ Ѵ. Ű Լ ؼ Ǵ Ÿ ؼ ȴ. ǵ Լ Լ 䱸Ѵ. Լ ͷ , ϵ ִ.
Ϲ Լ α ѵ Ѵ. , κ Լ ǿ ġ Ѵ. Լ α ϱ ϴ ɰ Լ ȯǴ ŸԿ ´ٴ ̴. FORTRAN Pascal Į ŸԸ ȯ ִ. ߿ , Լ ȯ ٴ ̴. ִ Լ Ѵ. Լ ٸ ɰ Լ ۿ (functional side effect) ɼ̴.
Լ α ߵǾ. ǰ ϰ Ǵ LISP ̴. LISP Լ ϴ FORTRAN Ͽ ϴ Ͱ ణ ϴ. LISP ù° Լ , Ϻ LISP 30 Ǿ, װ Լ ֱ Ÿ ʴ´ٰ ϴ´. , ó ϰ, LISP Ļ -Ÿ , , ݺ Ư¡ Ѵ ( α ൿ ִ ϱ ȴ). ̰Ͱ ణ ̻ ӿ ұϰ, LISP ļ Լ α ⺻ Ÿ Ƿ ġ ִ.
LISP Ÿ ü- (atom) Ʈ - ִ. Ÿ ǹ̿ Ÿ ƴϴ. ǻ, LISP Ÿ . ĺ ¸ ڴ LISP ȣ̴. ġ ڶ ȴ.
Ʈ Ʈ ó ־ ʿ κ̶ DZ LISP Ʈ 2 κ ȸ϶. ᱹ ߵ ó, LISP 䱸 ʴ´. Ʈ Ұȣ (parentheses) ȿ Ҹ ν Ѵ. Ʈ Ҵ ڿ ѵȴ.
(A B C D)
ߺ Ʈ ȣ õȴ. , Ʈ
(A (B C) D (E (F G)))
4 Ҹ Ʈ̴. ù Ҵ A ̰, ι° Ҵ θƮ (B C) ̰, ° Ҵ D ̰, ° Ҵ ι° ҷ θƮ (F G) θƮ (E (F G)) ̴.
, Ʈ Ϲ - Ʈ Ǹ, Ҹ Ÿ. ڸ ǥ - ȣ ġ - Ű ù° ã´. Ʈ Ҹ θƮ ù 带 Ű ù ´. 쿡, ι° ʹ ù 带 Ű ù ´. 쿡, ι° ʹ Ʈ Ҹ Ų. Ʈ ù Ҹ Ű ͷ ȴ.
ΰ Ʈ ǥ 1 . Ʈ Ҵ ϶. Ʈ Ҵ ڰ . ũ NIL ̴. θƮ .
1 LISP Ʈ ǥ
ǵ FORTRAN (ʿ ߰Ͽ) LISP α ȣ ̾. ȣ M-ȣ (M-notation) - Ÿ ȣ (meta-notation) - θ. M-ȣ ۼ α ǹ IBM 704 ڵ α ȯϴ Ϸ ־.
LISP ʱ McCarthy Ϲ ȣ ó Ʈ ó Ű ߴ. McCarthy Ʈ ó ÿ Turing 踦 Ͽ Ϲ Ǿ ̷ ϴ ִٰ Ͼ. McCarthy ȣ Ʈ ó Turing 躸 ڿ ̶ ߴ. ̷ Ϲ 䱸 ߿ ϳ Ǵ Ư ־ Ѵٴ ̴. Turing , ٸ Turing ִ Turing 踦 ִ. κ LISP ٸ Լ ִ LISP Լ Ѵٴ Դ.
LISP Լ ù 䱸 Ͱ ǥǴ Լ ǥ ִ ȣ̴. (1) ȣӿ Ե Ʈ ȣ ̹ LISP ǥ äõǾ. , Ʈ ȣ ǥ ִ Լ ǿ Լ ȣ Ģ ϱ ߴ. Լ ȣ Cambridge Polish Ҹ Ʈ · õǾ.
(Լ_̸ _1 ... _n)
, + ġ Ű ϴ Լ,
(+ 5 7)
12 ȴ.
(1) ȣ Լ Ǹ ϱ õǾ. Լ ٸ Լ ڱ ڽſ ؼ ǵ ̸ Լ ε ϵ Ǿ ߴ. ̷ ̸ Լ ̸ ǥ ϴ Ʈ Ʈ ؼ õǾ.
(Լ_̸ (LAMBDA (_1 ... _n) ǥ)
Լ αֿ ٸ, ̸ Լ ϴ ̻ϰ ϴ . ̸ Լ Լ α (пó) ϴ. , Ű Ʈ ϴ Լ ϴ Լ . Լ DZ ̸ ʿ䰡 . 5.6 ־.
ο ȣ ǥõ LISP Լ S-ǥ (S-expression) - ȣ ǥ (symbolic expression) - ̶ Ҹ. ħ, LISP (Ϳ ڵ) S-ǥ̶ Ҹ. S-ǥ Ʈ ̴. S-ǥ ܼ ǥ̶ Ѵ.
McCarthy ٸ Լ ִ Լ ߴ. Լ EVAL ̶ Ͽ ü ǥ ̴. AI Ʈ - Stephen B. Russel Daniel J. Edwards - EVAL LISP ͷ ִٴ ν߰, ﰢ ߴ (McCarthy et al., 1965)
ﰢ̰, , ġ ʴ ߿ Դ. ù°, ʱ LISP ý EVAL ߰, Ƿ ̴. °, LISP ȹ α ȣ M-ȣ Ǵ ϼ ʾҴ. , S-ȣ LISP ϳ ȣ Ǿ. Ϳ ڵ忡 ȣ 5.7 ߿ ´. °, ǥİ (null) ּҿ (zero) ̻ Ư¡ ϸ鼭 κ ȿ Ǿ.
и 쿬̾ ʱ LISP ý ٸ Ư¡ ̴. Լ ȣȯ濡 ȴ. ƹ ؼ ߰, Ģ ÿ ־ٴ Ϳ ȸ̾. Ģ 1975 LISP κ Ļ Ǿ. Ļ Ģ ϰų αӿ Ģ Ģ ϵ Ѵ.
, Scheme Ϻθ Ѵ (Dybvig, 1996). Scheme ϰ, п αⰡ ְ, Scheme ʹ پ ǻͿ 밡ϱ ⼭ õǾ. Scheme Scheme 4 ̴.
LISP Ļ Scheme 1970 ߹ݿ MIT ǥǾ (Sussman and Steele, 1975). Scheme ũ, Ģ , ϵ ü Լ ؼ Ưȭȴ. ϵ üμ, Scheme Լ ǥ Ʈ Ұ ְ, ְ, Ű ִ. LISP ʱ ̷ ɷ ʾҴ.
ǹ̷ μ Scheme Լ αְ Ϲ α а 뿡 ſ ϴ.
Scheme ۼ κ Լ LISP Լ ణ 䱸Ѵٴ Ϳ ϶.
Scheme ̸ , , ȣ Ư ڷ ȴ. ̸ ڷ ؼ ȵȴ.
Scheme ʹ read-evaluate-write ̴. װ ݺ ڰ ۼ ǥ (Ʈ ) а, ǥ ؼϰ, ÷Ѵ. ͷ ͷ ȴ. Ϳ ڸ ġ, ܼ ڸ ÷Ѵ. Լ ȣ ǥ ȴ. ù°, Ű ǥ Ư ȴ. , Լ Ű ǰ, ÷̵ȴ.
Scheme ⺻ Լ Ѵ. Լ , , , +, -, *, / ̴. * + 0 Ǵ ̻ Ű ´. * Ű ־ ʴ´ٸ, 1 ȯȴ. + Ű ־ ʴ´ٸ, 0 ȯȴ. + Ű Բ Ѵ. * Ű Բ Ѵ. / - Ǵ ̻ Ű ´. 쿡, ù Ű Ű ù Ű . ϴ. .
ǥ 42 (* 3 7) (+ 5 7 8) (- 5 6) (- 15 7 2) (- 24 (* 4 3)) |
42 21 20 -1 6 12 |
Ű ƴ϶, SQST ġ Ű ȯѴ.
Scheme Լ Scheme Լ ؼ 䱸Ǵ ƿƼ Լ EVAL ̴. EVAL Scheme Լ - Լ̵ ƴϵ - ⺻̴. װ Scheme read-evaluate-write evaluate κ óϱ ȣȴ. Լ , EVAL ־ Լ Ű Ѵ. Լ ȣ Ű Լ ȣ ( ִ ), ʿϴ. ȣ, Ű Լ ƴ - ڳ Ʈ - ̴. Ű Լ ƴ и Ǿ ȵȴ.
, Ű (ڿ Ʈ) ־ ڰ ־ Ʈ ϴ Լ ִٰ . ڳ Ʈ Ǿ ȵȴ. ͷ ̴. Ű ϱ , Լ QUOTE (ȭ ܼ Ű ȯ) Ű ־. QUOTE Ѵ.
(QUOTE A) A
ȯѴ.
(QUOTE (A B C)) (A B C) ȯѴ.
QUOTE ȣ Ϲ Ѵ. ̰ ܼ οǴ ǥ տ ǥ (') Ŵμ ȴ. Ƿ, (QUOTE (A B)) ſ '(A B) Ѵ.
ǻ α ̵ Լ̵ ٷ. Ʈ Scheme ⺻ ̹Ƿ Scheme Ʈ ϴ Լ ؾ Ѵ. Ư, Ʈ Ϻθ ϴ ( ǹ̿ Ʈ ϴ) Ʈ ϴ ؾ Ѵ. Լ ֿ Լ DZ , Scheme Լ Ѵ.
Scheme ⺻ Ʈ - CAR CDR ("could-er" Ŀ ) - ִ. CAR Լ ־ Ʈ ù Ҹ ȯѴ. CAR Ѵ.
(CAR '(A B
C)) A ȯѴ.
(CAR '((A B) C D)) (A B) ȯѴ.
(CAR
'A) (A Ʈ ƴ).
(CAR '()) .
CDR Լ CAR ŵ Ʈ ȯѴ.
(CDR '(A B
C)) (B C) ȯѴ.
(CDR '((A B) C D)) (C D) ȯѴ.
(CDR
'A) .
(CDR '(A)) () ȯѴ.
CAR CDR Լ ̸ Ưϴ. ̸ IBM 704 LISP ù Ѵ. 704 ǿ ּҿ Ǿ (decrement) ּ (address) ʵ带 ´. ʵ ּҸ ־. 704 ʵ带 ϴ CAR (ּ -contents of address register) ɾ ߴ. 尡 带 ϰ ֵ Ʈ ϱ ʵ带 ϴ ڿ. Ģ Ͽ, CAR CDR ɾ ȿ Ʈ ڸ ߴ. ̸ LISP Ļ Լ ̾.
CONS ⺻ Ʈ ڴ. - ù° ڴ ڳ Ʈ, ι° ڴ Ʈ - κ Ʈ Ѵ. ù Ű ι° Ű ο CAR ϴ ̴. .
(CONS 'A '())
(A) ȯѴ.
(CONS 'A '(B C)) (A B C) ȯѴ.
(CONS
'() '(A B)) (() A B) ȯѴ.
(CONS '(A B) '(C D)) ((A B) C
D) ȯѴ.
CONS 2 . ǹ̿ CONS CAR CDR ̴ٴ Ϳ ϶. CAR CDR Ʈ иϰ CONS ־ Ʈ κκ Ʈ Ѵ. CONS Ű Ʈ CAR CDR ȴ. Ƿ, lis Ʈ̸,
(CONS (CAR lis) (CDR lis))
Լ̴.
LIST Űκ Ʈ ϴ Լ. װ ó ø CONS Լ ̴.
(LIST 'apple 'orange 'grape)
ϴ.
(CONS 'apple (CONS 'orange (CONS 'grape '() )))
2 CONS
Scheme Լ 3 ߿ Լ EQ?, NULL?, LIST? ̴. ̸ ǵ Լ ǥ ̸ ϶. Լ Ҹ ( Ǵ ) ȯѴ. Scheme Ҹ #T #F ̴. Scheme ʹ #F ſ (empty) Ʈ () ȯѴ. Լ ȯ ƴ Ʈ #T ؼȴ.
EQ? Լ ȣ Ű ´. Ű ̰ #T ȯѴ. , () ȯѴ. .
(EQ? 'A 'A) #T ȯѴ.
(EQ? 'A 'B) () ȯѴ.
(EQ? 'A '(A B)) () ȯѴ.
(EQ? '(A B) '(A B)) () Ǵ #T ȯѴ.
ó, EQ? Ʈ ϴ - #T () ȯ - ̴. EQ? (ΰ ־ ʹ Ҹ ۰?) ǰ Ȯ Ʈ ʴ´. Scheme ý Ʈ , Ʈ ̹ ϴ° Ѵ. Ѵٸ, Ʈ Ʈ ο ̴. , Ʈ EQ? ؼ ȴ. 쿡 Ʈ 縦 Žϴ ƴ. Ʈ ȴ. Ȳ EQ? () Ѵ.
EQ? ȣ ڿ ؼ ġ ڿ ݵ ʴ´ٴ Ϳ ϶. ġ ڸ ϴ . ó, EQ? Ʈ Ű ŷ ʴ´.
LIST? Լ, ó, ڰ Ʈ̸ #T ȯϰ ƴϸ () ȯѴ.
(LIST? '(X Y)) #T ȯѴ.
(LIST? 'X) () ȯѴ.
(LIST? '()) #T ȯѴ.
NULL? Լ Ű Ʈ ϱ Ű ˻ϰ Ʈ̸ #T ȯѴ. .
(NULL? '(A B)) () ȯѴ.
(NULL? '()) #T ȯѴ.
(NULL? 'A) () ȯѴ.
(NULL? '(())) () ȯѴ.
Ű Ʈ ƴϱ () ̴. , , Ʈ Ʈ̴.
Scheme ġ Լ Ѵ. Ϻ̴.
Լ = <> > < >= <= EVEN? ODD? ZERO? |
ǹ
ʴ ũ ۴ ũų ۰ų ¦ΰ? Ȧΰ? (zero) ΰ? |
EQ? ȣ ڿ ġ ڿ ݵ ϴ ƴϴٶ տ ߴ. = Լ ġ ڿ ȣ ڿ ݵ ϴ ƴϴ.
ȣ ġ ؼ ڸ ˻ ִ ϴ. ̷ , Scheme ġ ȣڿ ϴ ٸ Լ (EQV?) ´. EQV? ſ EQ? = ϴ EQ? = EQV? ٴ ̴.
Scheme 2-3 Լ ´.
(DISPLAY ǥ)
(NEWLINE)
Scheme α κ EVAL ֻ- Լ ÷ϴ ̴.
Scheme Ű ȴ. Լ Ű ϵ Ű ʴ´.
տ Ͽ, LISP- Լ ϱ Ʈ · ȣ Ѵ. , ٽ Ʈ
((LAMBDA (L) (CAR (CDR L)))
־ Ű (Ʈ) ι° Ҹ ȯϴ Լ̴. Լ (̸ ִ) Լ Ǵ ȴ. Ű ϴ Ʈ տ Լ μ ȴ. , Լ B Ѵ.
((LAMBDA (L) (CAR (CDR L))) '(A B C))
ٽ Ű ǵ Scheme Լ Ű ο ϶. ǥĿ CDR ȣ Ű L ̴. L ٽij ε (bound variable) Ҹ. ε ٽ ó ȣǾ Ű ε ǥĿ ʴ´.
Ư Լ DEFINE Scheme α 2 ⺻ ʿ - ̸ ε ̸ ǥĿ ε - ȴ. DEFINE Ÿ Ǵ ó δ. ̸ ε ƴ ̸ .
DEFINE , ˰ ǰ, CAR Լ Լʹ ٸ ƮDZ Ư̶ Ҹ .
DEFINE ȣ ǥ εϱ Ǵ ̴. .
(DEFINE ȣ ǥ)
, .
(DEFINE pi 3.14159)
(DEFINE two_pi (* 2 pi))
ǥ Scheme Ϳ ־ pi ־ 3.14159 ÷̵ ̰, two_pi ־ 6.28318 ÷̵ ̴.
DEFINE Լ ٽ ̸ ε۵ ȴ. , ٽ ܾ ٸ ϱ ȴ. Ŀ, DEFINE Űμ Ʈ Ѵ. ù° Ű Լ ̸ Ű ( Ʈ ) Լ ȣ Ÿ̰, ι° Ű (Ʈ) ̸ εǴ ǥ̴. DEFINE Ϲ .
(DEFINE (Լ_̸
Ű)
ü
)
⼭ Ű (comma) ƴ (spaces) иǰ ü Ʈ ǥĵ ̴.
DEFINE ȣ ̸ square ̸ ִ ǥİ εѴ.
(DEFINE (square number) (* number number)
ϴ Ͱ Լ Ѵٸ, ̰ ̴. Լ 25 ÷ ̴.
(square 5)
Լ ϱ Ǿ , Ư DEFINE ǹ̴ . ù Ű Ű κа ι° Ű ü Բ ٽ ϴ ȴ.
Լ DEFINE Ư ̸ ϱ .
(DEFINE × 10)
DEFINE Լ, ǥÿ EVAL ù DEFINE Ű ϴ ̴. x ̹ յ ʾҴٸ, ̰ ̴.
ܼԼ ٸ μ .
(DEFINE (second 1st) (CAR (CDR 1st)))
, ̸ second ٽĿ εȴ.
((LAMBDA (1st) (CAR (CDR 1st)))
Լ ȴٸ, ó ִ.
(second '(A B C))
B ȯѴ.
Scheme 帧 ۱ Լ 帧 ۱ ߴ. Լ ǿ 帧 α ۼ α 帧 ſ ٸ. Լ 帧 ϴ ǵǴ ݸ鿡 Լ ߹ ʰ 帧 (recursion) ǥ Ѵ. , Լ (factorial function) ǵȴ.
ǽ (ȣ ǥ) Ʈ ӿ ϶. ȣ ǥ (guarded expression) ȣ ǥ ȴ. ǽ õ ǥ ̴. ϳ ־ Ű Ǵ Ű Ʈ ؼ ̴.
Scheme DZ - 2 - ð - ´. ̰͵ Ư̴. 2 - (IF) 3 Ű - , then_ǥ, else_ǥ - ´. IF ȣ .
(IF then_ǥ else_ǥ)
, .
(DEFINE (factorial
n)
(IF (= N 0)
1
(*
n (factorial (- n 1)))
))
Լ ° ־ factorial ¿ ϶.
Scheme ڴ COND ȴ. COND ǽ ణ Ϲȭ ̴. װ ̻ ÿ Ѵ. ٸ ǽ ٸ Ű Ƿ, COND Ű 䱸 ʴ´. COND Ű ù ǥ ǥ ̴.
COND Ϲ .
(COND
(_1
ǥ {ǥ} )
(_2 ǥ {ǥ} )
...
(_n ǥ {ǥ}
)
(ELSE ǥ {ǥ} )
)
ELSE ̴.
COND ǹ̴ . Ű ó #T ϳ ȴ. , #T ˷ ù ǥ ǰ ǥ COND ȯȴ. #T COND ϶. , #T ǥ ǰ COND ȯȴ. , #T COND Ű ϴ ǹ̰ ִ. Ư ELSE-#T ǹ - Ȳ Ϲ ȴ.
COND Ű ͵ #T Ǵ ʴ´ٸ, COND () ȯѴ. COND Ada case ó "otherwise" ù 缺 ϶.
Scheme Լ Ѵ. α ܼ Ʈ ó ذѴ.
־ ڰ ־ ܼ Ʈ ΰ ϴ (Ҽ - membership problem) . ܼ Ʈ θƮ ʴ Ʈ̴. Լ member Ǿٸ, װ ִ.
(member 'B '(A B C))
#T ȯѴ.
(member 'B '(A C D E)) () ȯѴ.
ݺ ϸ, Ҽ ־ ڿ ־ Ʈ Ҹ, ߰ߵ Ǵ Ұ , ѹ ϳ ܼ ϴ ̴. Ͽ ִ. Լ ־ ڿ Ʈ CAR ִ. ϸ, #T ȯȴ. յ , ڴ Ʈ ߰ߵ ִ. , Լ Ʈ Űμ Ʈ CDR Ͽ ڽ ȣϿ ȣ ȯؾ Ѵ. , ͷκ - Ʈ ȣ Ʈ̰ () ȯǰų ߰ߵǾ #T ȯǴ - ִ.
Ͽ, Լ óؾ 3 - Է Ʈ, ڿ Ʈ CAR , ڿ Ʈ CAR ġ ( ȣ ) - ִ. 3 찡 Ȯ COND 3 Ű̴. ELSE Ǵ Ʈ ̴. Լ ̴.
(DEFINE (member atm
lis)
(COND
((NULL?
lis) '())
((EQ? atm (CAR
lis)) #T
(ELSE (member atm
(CDR lis)))
))
ܼ Scheme Ʈ-ó Լ̴. Լ, Ʈ ִ ʹ ѹ Ҿ óȴ. Ҵ CAR ؼ ó Ʈ CDR Ͽ ӵȴ.
Ʈ CAR ̱ ˻ (equality) ˻ ̷ ϶.
ٸ μ, ־ Ʈ Ѱ ϴ . Ʈ ܼϴٸ, ģġ , ش . ܼ Ʈ ϴ Լ .
(DEFINE (equalsimp
lis1 lis2)
(COND
((NULL?
lis1) (NULL? lis2))
((NULL?
lis2) '())
((EQ? (CAR lis1)
(CAR lis2))
(equalsimp (CDR lis1) (CDR lis2)))
(ELSE '())
))
COND ù Ű ؼ ٷ ù ù Ʈ Ű Ʈ ̴. ù Ʈ Ű ó Ʈ ܺȣ ִ. ȣ Űμ Ű CDR ϱ , ù Ʈ ȣ ڽ Ҹ ϰ ߴٸ ̷ ȣ ù Ʈ Ʈ ִ. ù Ʈ Ʈ , ι° Ʈ Ʈ ˻Ǿ Ѵ. ٸ, (ó Ǵ ȣ CAR ), NULL? Ȯ #T ȯѴ. ι° Ʈ Ʈ ƴ϶, װ ù Ʈ ũ NULL? ؼ () ȯǾ Ѵ. Լ ؼ ȯǴ ƴ Ʈ #T ؼȴٴ ȸ϶.
ù Ʈ Ʈ ƴϰ ι° Ʈ Ʈ 츦 ٷ. Ȳ ù Ʈ ° Ʈ Ŭ Ѵ. ù 찡 ù Ʈ Ʈ 츦 óϱ ° Ʈ ˻Ǿ Ѵ.
° Ʈ Ǵ ˻ϴ ̴ܰ. ƴ Ʈ CAR μ ̰ Ѵ. ٸ, Ʈ . ʹ Ʈ CDR ȴ. ڰ ߰ߵ Ѵ. ̰ ϸ, и ϱ⸦ ʴ´. Ʈ 찡 Ǿ Լ () ȴ.
equalsimp Ű Ʈ ϰ Ȥ Ű ̸ Ȯϰ ϶.
Ϲ Ʈ ϴ , θƮ Ǿ ϱ , ̰ ణ ϴ. θƮ ° ־ Ʈ ¿ ϱ , ̰ ɷ ٽ Ȳ̴. ־ Ʈ ϴ Ұ Ʈ , κ - CAR CDR - иǾ Ͱ ȴ. ̰ - (divide-and-conquer) Ϻ ̴. ־ Ʈ ϴ Ұ ڶ, ܼ EQ? Ͽ ִ.
Լ ̴.
(DEFINE (equal lis1
lis2)
(COND
((NOT
(LIST? lis1)) (EQ? lis1 lis2))
((NOT
(LIST? lis2)) '())
((NULL? lis1)
(NULL? lis2))
((NULL? lis2)) '())
((equal (CAR lis1) (CAR lis2))
(equal (CDR
lis1) (CDR lis2)))
(ELSE '())
))
COND ó Ű ϳ Ʈ Ȳ óѴ. ° ° Ǵ Ʈ Ʈ ̴. μӵ 찡 Ʈ CAR ϴ ´. ټ° COND ſ ̷Ӵ. Űμ Ʈ CAR ȣ̴. ȣ #T ȯϸ, ʹ ٽ Ʈ CDR ȴ. ̰ Ʈ Ʈ ϴ Ѵ.
equal Ǵ Ʈ ƴ ǥ ֿ Ѵ. equal ý Լ EQUAL? ϴ. EQUAL? EQ? EQV? ξ ʿ ( Ű ° ˷ ) Ǿ Կ ϶.
ٸ Ϲ ʿ Ʈ ΰ ־ Ʈ Ҹ ϴ Ʈ ϴ ̴. ̰ Ϲ append Scheme Լ ȴ. ̰ ù Ʈ Ҹ ι° Ʈ ڿ CONS ݺ ν ִ. append Ȯϰ ϱ .
(append '(A B) '(C D)) (A B C D) ȯѴ.
(append '((A B) C) '(D (E F))) ((A B) C D (E F)) ȯѴ.
append Ǵ .
(DEFINE (append lis1
lis2)
(COND
((NULL?
lis1) lis2)
(ELSE (CONS (CAR lis1)
(append (CDR lis1) lis2)))
))
member Լ ϴ quess Scheme Լ . Ʒ ִ б װ ϴ ϵ õ϶. Ű ܼ Ʈ ϶.
(DEFINE (guess lis1
lis2)
(COND
((NULL?
lis1) '())
((member (CAR lis1)
lis2)
(CONS
(CAR lis1) (quess (CDR lis1) lis2)))
(ELSE
(quess (CDR lis1) lis2)
))
quess Ű ܼ Ʈ Ѵ. quess Ű Ʈ Ҹ ϴ ܼ Ʈ Ѵ. , Ű Ʈ ̶, quess Ÿ Ʈ Ѵ.
LET ̸ ӽ÷ ǥ εǴ ϴ Լ̴. װ ǥĿ ǥ μ ϱ ȴ. , ̸ ٸ ǥ ȴ. Ϲ .
(LET (
(̸_1
ǥ_1)
(̸_2 ǥ_2)
...
(̸_n
ǥ_n)
ü
)
LET ǹ̴ ó n ǥ ǰ ̸ εȴٴ ̴. , ü ǥ ȴ. LET ü ǥ ̴. LET Ѵ.
(DEFINE (quadratic_roots
a b c)
(LET (
(root_part_over_2a
(/ (SQRT (-
(* b b) (* 4 a c))) (* 2 a)))
(minus_b_over_2a
(/ (- 0 b) (* 2 a)))
)
(DISPLAY
(+ minus_b_over_2a root_part_over_2a))
(NEWLINE)
(PISPLAY
(- minus_b_over_2a root_part_over_2a))
))
÷ϱ DISPLAY Լ ϱ DISPLAY Լ quadratic_roots .
Ada declare LET ο Ѵ. ǰ, ǰ, ȴ. LET Ҵ , LET ִ. , LET ε .
LET LAMBDA ǥ ̴. ϴ.
(LET ((alpha 7)) (*
5 alpha))
((LAMBDA (alpha) (* 5 alpha)) 7)
ù° ǥĿ, 7 LET alpha εȴ. ι° ǥĿ 7 LAMBDA ǥ Ű ؼ alpha εȴ.
Scheme Ǵ Ϲ Լ - Լ ռ - - Ѵ.
Լռ
Լռ LISP ϳ Լ ̴. Scheme LISP Ļ Լ ¸ Ѵ. ռ Լ EVAL ϴ ̴. -ο Ʈ Լ ȣ ؼȴ. Լ ȣ Ű Ǵ 䱸Ѵ. ̰ ǥ Ʈ Ѵ. ̰ Ȯ ռ Լ ǹϴ ̴. ռ Լ Ѵ.
(CDR (CDR '(A B C)))
(C) ȯѴ.
(CAR (CAR '((A B) B C))) A ȯѴ.
(CDR (CAR
'((A B C) D))) (B C) ȯѴ.
(NULL? (CAR '(() B C))) #T ȯѴ.
(CONS
(CAR '(A B)) (CDR '(A B))) (A B) ȯѴ.
ȣ Լ ̸ ͷ ͷμ DZ⺸ٴ Ǿϱ ο ϶.
- Լ
Լ α Ϲ Լ ´ - Լ ̴. ̰ Ű - Լ Ʈ - mapcar ̴. mapcar ־ Լ ־ Ʈ ҿ Ͽ Ʈ ȯѴ. mapcar Scheme Ǵ .
(DEFINE (mapcar fun
lis)
(COND
(NULL?
lis) '())
(ELSE (CONS (fun (CAR
lis)) (mapcar fun (CDR lis))))
))
Լ ¸ ǥϴ mapcar ¿ ϶. ̰ Scheme ǥ ̴.
mapcar μ, Ʈ Ҹ ϱ⸦ Ѵٰ . ̰ ִ.
(mapcar (LAMBDA (num) (* num num num)) '(3 4 2 6))
ȣ (27 64 8 216) ȯѴ.
mapcar ù Ű LAMBDA ǥӿ ϶. EVAL LAMBDA ǥ , ̸ Լ ϰ ̸- Լ ¸ Լ Ѵ. ǥĿ, ̸ Լ Ű Ʈ ҿ ǰ Ʈ ȯȴ.
α Ͱ ´ٴ α ̿ ִ. α Լ EVAL ȣ ֱ ٸ α Ͽ ִ.
ϳ ġ ڸ Ѵ. κ Scheme ý, Ű ġ ڸ Ͽ ȯϴ + Ҹ ġ ڿ Լ Ѵ. , (+ 3 7 10 2) 22 ȯѴ.
α ġ Ʈ Ѵٰ . + ġ Ʈ ƴ ġ Ű ֱ + Ʈ . , Ʈ ϱ Ͽ Ʈ CAR CDR տ ݺ ϴ Լ ۼ ִ. Լ .
(DEFINE (adder lis)
(COND
((NULL?
lis) 0)
(ELSE (+ (CAR lis) (adder
(CDR lis))))
))
ٸ ذå Ű · + ȣϴ Լ ۼϴ ̴. ̰ + ġ Ʈ ϱ CONS ν ȴ. , Ʈ EVAL Ѵ.
(DEFINE (adder lis)
(COND
((NULL?
lis) 0)
(ELSE (EVAL (CONS '+ lis)))
))
+ Լ ̸ CONS EVAL + ϴ οǾ. μ, ȣ
(adder '(3 4 6))
adder Ʈ ϰ Ѵ.
(+ 3 4 6)
, Ʈ EVAL Ǹ, EVAL + ȣϿ 13 ȯѴ.
Scheme ʱ , EVAL Լ α ܰ ִ ǥ Ѵ. Scheme ֽ (Scheme 4) ǥ Ǵ ϴ EVAL ι° Ű 䱸Ѵ. ϱ Ͽ, Ű Ͽ ⼭ ̻ ʴ´.
ٸ LISP Ļ Scheme κ Ư¡ ϰ ִ. , ̸ εǰ, ε Ŀ ִ. ̰ Լ SET! Ͽ ȴ.
(SET! pi 3.11593)
SET! Լ ε ȯѴ.
LISP Լ Ʈ . CAR CDR и , ־ Ʈ . ֳϸ, ̰ Լ ȣ Ư¡ - ۿ - 䱸ϱ ̴. Scheme ۿ (side effect) ϴ Լ, SET-CAR! SET-CDR!, Ѵ. .
(DEFINE 1st (LIST
'A 'B))
(SET-CAR! 1st 'C)
(SET-CAR! 1st '(D))
SET-CAR! 1st ε Ʈ (A B) (C B) Ѵ.
SET_CDR! Ʈ (C B) (C D) Ѵ.
Scheme Ư¡ ȿ Scheme ԵǾ, Լ ακ Ż . α Ī (aliasing) ɼ ۿ Լ ٸ ð ٸ ϴ ϱ , α ϱⰡ . , .
(DEFINE count
0)
(DEFINE (inc_count number)
(SET! count
(+ count number))
)
inc_count Ʒ ȣ , ٸ Ѵ.
(inc_count 1)
1
(inc_count
1)
2
COMMON LISP (Steele, 1984) Scheme Ͽ LISP 1980 ʹ Ļ Ư¡ ϳ ϱ źߴ. ̱ ſ ũ ̴. LISP ̹Ƿ , Լ, ⺻ LISP ̴.
Ģ ܼ Ģ Ư Ͽ. COMMON LISP Ѵ. Ʈ Ģ , "special" ν, Ģ ȴ.
COMMON LISP Ư¡ : ڵ, 迭, Ҽ, Ʈ Ÿ , , Լ ȭϴ Ű, , Scheme Ư¡ - Ư Scheme SET!, SET-CAR!, SET-CDR! ϴ ϴ Լ - ü Ư¡ ִ.
Scheme LISP Ļ Բ COMMON LISP Ϲ ϴ PROG Լ Ѵ. ̺ Լ - GO RETURN - ݺ ϱ ԵǾ. GO PROG ȿ ִ ̺ űµ ȴ. RETURN PROG ̴. PROG Ϲ .
(PROG ( )
ǥ_1
. . .
ǥ_n
)
NIL ʱȭǰ, PROG , PROG ൿȸ Ѵ. ִٸ, PROG ġ Ѵ (ȴ). PROG ǥ ̺ óȴ. GO PROG ǥ Ʈ ȿ ִ ̺ Ű Ѵ. RETURN PROG Ǵ Ű ´.
PROG LISP Ļ ȣȯ ϱ LISP ǿ ԵǾ ϶. COMMON LISP PROG ɷ ϱ ִ. , COMMON LISP ݺ DOTIMES DOLIST, PROG1, PROG2, PROGN ´.
SETQ Scheme SET! Ǵ COMMON LISP Լ̰, DEFUN DEFINE COMMON LISP ̴. Ʈ Ҽӿ Լ ݺ . ݺ ڿ 5.5 Ͱ ־.
(DEFUN iterative_member
(atm 1st)
(PROG ()
loop_1
(COND
((NULL
1st) (RETURN NIL))
((EQUAL
atm (CAR 1st)) (RETURN T))
)
(SETQ
1st (CDR 1st))
(GO loop_1)
))
(DEFUN recursive_member
(atm 1st)
(COND
((NULL
1st) NIL)
(EQUAL atm (CAR
1st)) T)
(T (recursive_member
atm (CDR 1st)))
))
T Ҹ COMMON LISP ̰, NIL Ҹ ̰, ATOM Ű ΰ ϴ Լ̰, Ʈ Ʈ ڷ ֵʿ ϶.
ٸ μ, Ʈ ̸ ϴ ݺ Լ .
(DEFINE iterative_length
(1st)
(PROG (sum)
(SETQ
sum 0)
again
(COND
((ATOM 1st (RETURN sum)))
)
(SETQ
sum (+ 1 sum))
(SETQ 1st (CDR
1st)
(GO again)
))
(DEFUN recursive_length
(1st)
(COND
((NULL
1st) 0)
(T (+ 1 (recursive_length
(CDR 1st))))
)
)
ǹ̿, Scheme COMMON LISP ݴ. Scheme Ģ ϱ ξ ۰ ϴ. COMMON LISP ȵǾ AI 뿡 ϰ Ǵ . , Scheme Լ αֿ ȴ. Scheme ũ Լ ǰ ִ. ſ ū ǰ COMMON LISP ߿ LISP Ļ ȣȯ ϴ 䱸̴.
ML (Milner et al., 1990) Scheme Լ α . ML ߿ 鿡 LISP Scheme LISP Ļʹ ٸ. ML LISP ٴ Pascal Ѵ. ML Ÿ , Ÿ ߷ ( ʿ䰡 ǹ) ϸ, Ÿ . ǥ Ÿ ð ִ. ̰ Ÿ Scheme ѷ ̷. ML ó Ÿ ϴ ġ Ѵ. ML ߿ Ư¡ 2 忡 ־. 4 ML Ǵ Ͱ Ÿ ߷ 信 Ұ ϰ ִ.
ML , ̸ εȴ.
val ο_̸ = ǥ ;
, .
val distance = time * speed ;
ʱ ٴ . val ̸ ε, ̸ Ŀ ε . ۽, ǹ̿ ִ. , ̸ ι° val εѴٸ, ̸ ȯ濡 . , Ÿ ʿ䰡 . val ۿ ʴ´. ܼ ̸ Ȳ ÷ϰ, LISP LET ó, װ εѴ. val Ϲ let ǥĿ ǰ, Ϲ .
let val ο_̸ = ǥ_1 in ǥ_2 end
, .
let
val
pi = 3.14159
in
pi * radius * radius
end ;
ML Ʈ Ʈ ´. LISP ʴ. ML Ÿ, 迭, ڵ Ʃ (tuple) ´.
ML Լ .
fun Լ_̸ (_Ű) = Լ_ü_ǥ ;
, .
fun square (x : int) = x * x ;
x Ÿ Ϸ ؼ , Լ Ǵ ʴ´.
fun square (x) = x * x ;
ڸ ϴ Լ Լ . =, <>, Ҹ ڸ ڸ ϴ Լ . Ʈ , =, <>, Ʃ (Ʃ ϴ ڿ Ҹ ϴ ) ϴ Լ Լ ִ.
ML 帧 ǥ̴.
if E then then_ǥ else else_ǥ
E Ҹ Ǿ Ѵ. ǥ ϳ ȴ. ML Ÿ ȯ (type coercion) .
ڳ ǿ Ÿ ϱ ܼ ġǾ Ѵ.
Haskell (Thompson, 1996) ϰ, Ģ̰, Ÿ̰, Ÿ ߷ Ѵٴ 鿡 ML ϴ. Haskell Լ̶ - ۿ - ML ٸ. , ۿ ʰ Ư¡ ʴ´. ̰ Haskell ٸ α иŲ. ٸ Ư Haskell ML иѴ. ù°, Haskell (lazy evaluation) - ǥ 䱸 ʴ´ - ٸ Ѵ. °, Haskell Ʈ ϴ Ʈ ϴ ִ. ̰ Ʈ (list comprehension) ̶ θ. Haskell ٸ Ư¡ Miranda ΰ ִ (Turner, 1996).
ڵ Haskell 1.4 ۼǾ.
Լ Ǹ . Լ ǿ Լ Լ ̸ ܼ Ű ۼʿ ϶.
fact 0 = 1
fact n = n * fact (n - 1)
Ǵ Լ ǰ ̻ ش. ⼭ ٸ Ű Ű Īν õȴ. Ű и Ű ü յȴ. Ű ̸ Ͽ յ Ű յȴ. , յ Ű 캯 ǥĿ ̸ ȴ. ǵ Լ- Ű - κԼ̴.
Ī Ͽ, n ° Ǻġ ϴ Լ ִ.
fib 0 = 1
fib
1 = 1
fib (n + 2) = fib (n + 1) + fib n
ȣ (guard) Լ ǰ Ǵ Ȳ ϱ Լ ǿ ÷ ִ. , .
fact n
|
n == 0 = 1
| n > 0 = n * fact (n - 1)
Ǵ, Ű Լ ϴ ϱ , Ǻ Լ ̴. , Ű Ѵ n ̱ , Ī Ѵ. ԼǸ ǥ̶ Ѵ.
otherwise ǥĿ Ÿ ִ. , .
fun n
|
n < 100 = 0
| n > 100 = 2
|
otherwise = 1
Ʈ ȣ (bracket) ۼȴ.
colors = ["blue", "green", "red", "yellow"]
Haskell Ʈ Ѵ. , Ʈ ++ ְ, : CONS ڷ Ǹ, .. (arithmetic series) ȴ. , .
5 : [2, 7, 9]
[5, 2, 7, 9] ȴ.
[1, 3..11] [1, 3, 5, 7, 9, 11] ȴ.
[1,
3, 5] ++ [2, 4, 6] [1, 3, 5, 2, 4, 6] ȴ.
Ʈ ϴ Լ .
sum [] = 0
sum
(a : x) = a + sum x
product [] = 1
product
(a : x) = a * product x
, a : x CAR () μ a CDR () μ x Ʈ Ѵ. sum ־ Ʈ ȯѴ. product ־ Ʈ ȯѴ. sum product ǥ Haskell Լ̴. product Ͽ, Լ ۼ ִ.
fact n = product [1..n]
length Լ ־ Ʈ ȯѴ. ,
length (colors) 4 ȯѴ.
Haskell where ε ǥ ڿ ȴٴ ϰ ML let val ϴ. , ۼ ִ.
quadratic_root
a b c =
[minus_b_over_2a - root_part_over_2a,
minus_b_over_2a
+ root_part_over_2a]
where
minus_b_over_2a
= - b / (2.0 * a)
root_part_over_2a
= sqrt (b ^ 2 - 4.0 * a * c) / (2.0 * a)
Ʈ Ÿ Ʈ ϴ Ѵ. Ʈ п ϱ ϴ . Ϲ .
[ü | ]
, [n * n * n | n <-- [1..50]]
1 50 3 Ʈ Ѵ. ̰ "n 1 50 n * n * n Ʈ" д´. (generator) ̴. װ 1 50 Ѵ. ٸ 쿡, ´ Ҹ - ̰ Ʈ (test) Ҹ - ̴. ȣ Ʈ ġȯ ãų Ʈ İ ϴ ˰ ϴ ȴ. , n ־ , n Ʈ ȯϴ Լ .
factors n = [i | i [1..n div 2], n mod i == 0]
, quicksort ˰ Ʒ Haskell .
sort [] = []
sort
(a : x) = sort [b | b x, b <= a]
++ [a] ++
sort [b | b x, b > a]
quicsort Ǵ ۼ ˰ ª.
ư. Scheme Լ Ű Լ ȣDZ Ǿ Ѵٴ ȸ϶. Լ Ű Լ ϴ ʿ Ǿ Ѵٴ ǹѴ. Լ Ű , Լ Ư ù Ű ʴ´ٸ, ù° Ű ʴ´. , Ű Ϻθ Լ Ǿ Ѵٸ, ä ´. , Ű, Ѵٸ, ѹ Ѵ.
Ѵٴ ִ ɼ Ѵ. ̰ ߿ ϳ ϴ ̴. , .
positives = [0..]
evens
= [2, 4..]
squares = [n * n | n [0..]]
, ǻ͵ δ Ʈ Ҹ Ÿ , ȴٸ ʴ´. , ˰ Ѵٸ, Ҽ Լ squares Ʈ ˻ ִ. ־ Ʈ ־ Ҹ ϴ ϴ member Լ ִٰ . װ ִ.
member squares 16
True ȯѴ. squares Ǵ 16 ߰ߵ ̴. member Լ ۼǴ ʿϴ. Ư, װ ٸ,
member [] b =
False
member (a : x) b = (a == b) || member x b
־ member squares Ȯϰ ̴. ʴٸ, squares Ǵ, ־ Ʈ ã鼭, Ѱ迡 squares ̴. Լ, ã ϴ ū ߰ߵ Ž ϰ False ȯϸ鼭, Ʈ Ҽӿ ˻縦 Ѵ.
member2 (m : x)
n
| m < n = member2 x n
|
m == n = True
| otherwise =
False
ƴϴ. ǥ° ¥ и ϴ. , ξ ӵ ߱ϴ ſ ǹ̷̴.
α 35 ̻ 2 - 3 Լ ϰ Ǿ. ̰ ߿ LISP ̴. Կ ұϰ, APL κ Լ ¸ ϱ Լ ȴ.
APL ϵ ýۿ ̸ پ ǰ ִ. APL α д о߿ ڿ ġ ۼϴ α о̴. 迭 , APL 迭 ϴ ش Ǹ ̴.
LISP 뼺 ְ . ó 15 , ϴ ̻ ַ ڿ ؼ Ǿ. , 1960 1970 ʹݿ з - LISP η ٸ α η - Ǵ Ϲ̾.
忡 Ѵ, LISP ȣ Ʈ-ó ( AI о) ߵǾ. AI 뿡, LISP Ļ ǥ ̴.
AI ַ LISP Ͽ о߰ ߴǾ. ٸ - ַ α - , κ ý LISP ߵǾ. LISP ǥ, н, ڿ ó, Ʒ ý, ð о߿ е̴.
AI о ۿ, LISP ̴. , ȣ ϴ ȣ ý, MACSYMA ó, EMACS ؽƮ ͵ LISP ۼǾ. LISP ý Ʈ LISP ۼ ο ǻ̴. LISP پ о߿ ý ϴ Ǿ.
Scheme Լ ϴ ϰ ȴ. Scheme п α ġ ȴ. ML Haskell , κ, ̳ п ѵǾ.
Լ αְ Լ α - ϰ ǰ ϰ Ǵ - ǰ ʷ ־.
Լ αְ α ϴ ڿ. von Neumann ʷ ϱ , ϴ αӴ ٷ Ѵ. ȿ , α . Լ , ȭ ʿ䰡 αӴ ʿ䰡 . ȿ ̴. ٸ , αֺ 뵿 䱸ϴ α̴. ̰ ̰ Լ α Ȯ ̶ ϴ´.
Լ ſ ִ. LISP Ʈ ̴. ξ ϴ. Լ ǹ̷ ǹ̷а Ͽ ϴ.
ü ϱ ư ϱ ƴ. , ü ½ũ α å Ada ½ũ . Լ α Ͽ ִ. , αӰ ü ִ ؼ ȴ. ǥ ü ȸ ڿ ǥѴ. ȭ α ɻ簡 ƴϴ. å Ѵ´.
, αӴ α ü κ ϰ, κ ٽ ½ũ ۼѴ. ̰ ̴. Լ α ýۿ ؼ ü κ . α Ǵ ϵ ϰ ϰ . ü α ϴ ƴ.
Լ ϱ ǰ ϴ (named) Ǵ (unnamed mapping) ̴. Լ Լ Ű, ȯ (Ǵ ) Ǵ Լ ¸ Ͽ ִ. Լ α Լ ϰ ִ. ¿ ϱ ʴ´. Լ , ǽ, , Լ ϱ Լ ¸ Ѵ. LISP Լ ۵Ǿٸ, ȿ Ű Ͽ ټ Ư¡ ÷ߴ.
LISP ù AI 뿡 Ʈ-ó ʿ伺 ܳ. LISP AI о߿ ϰ Ǵ .
LISP ù ߰̾. EVAL LISP Լ ۼ ִٴ ϱ ߵǾ.
LISP Ϳ LISP α ̱ , α ٸ α ϰ ϴ ϴ. EVAL ̿뼺 α ϴ Ѵ.
Scheme Ģ ϴ LISP ܼ Ļ. LISP , Scheme ֿ Լ Ʈ ϰ ϴ Լ, ǽ Լ, , ȣ, Ʈ ܼ Լ Ѵ. Scheme ־ Ʈ Ҹ Ѵ.
COMMON LISP 1980 ʹ LISP Ļ κ Ư¡ ϵ Ŀٶ LISP- . COMMON LISP Ģ ϰ Ư¡ Ѵ.
ML LISP ٴ Pascal ϴ ̰ Ÿ Լ α . ML Ÿ ߷ ý۰ ó ϰ ML Ÿ ϴ .
Haskell ML , Լ̴. . Haskell ǥ Ͽ ȴ. Ʈ μ Haskell α Ʈ óϵ Ѵ.
LISP ֿ о߰ AI , ٸ ذ о߿ ǰ ִ.
ؼ Լ , von Neumann 迡 ȿ Լ ü μ ϴ ִ.
LISP ǥ ù McCarthy (1960) ߰ߵ ִ. 1960 ߹ݺ 1970 ϰ McCarthy et al. (1965) Weissman (1967) Ǿ ִ. ణ ǥȭ COMMON LISP Steele (1984) Ǿ. Ű Ҿ Scheme Rees Clinger (1986) ǵǾ. Dybvig (1996) Scheme αֿ ڷ̴. ML Milner et al. (1990) ǵǾ. Ullman (1994) ML Ǹ Թ ̴. Haskell α Thompson (1996) ҰǾ.
Ϲ Լ αֿ Ǵ Henderson (1980) ߰ߵ ִ. Լ Peyton Jones (1987) Ǿ.
1. Լ ¿ Ͻÿ.
2. LISP Ÿ ΰ?
3. EQ?, EQV?, = ΰ?
4. Scheme DEFINE Լ Լ ΰ?
5. DEFINE ΰ?
6. COND ǹ̸ Ͻÿ.
7. LET ǹ̸ Ͻÿ.
8. Ư¡ κ LISP Ļ ÷Ǿ°?
9. COMMON LISP Scheme 鿡 ݴΰ?
10. Scheme , COMMON LISP, ML, Haskell Ǵ Ģ ΰ?
11. ML Scheme ٸ ΰ?
12. ML Ÿ ߷ ΰ? (4 ÿ)
13. Scheme ſ ٸ Haskell Ư¡ ΰ?
14. ǹϴ°?
1. Ʈ Ű Ʈ ȯϴ Scheme Լ ۼϽÿ.
2. ־ Ʈ (structurally equality) ˻ϴ Scheme Լ ۼϽÿ. Ʈ Ʈ ´ٸ (ڴ ٸ) ٰ Ѵ.
3. Ÿ ܼ Ʈ Ű ȯϴ Scheme Լ ۼϽÿ.
4. ־ ڰ ŵ Ʈ ȯϴ Ű - ڿ Ʈ - Scheme Լ ۼϽÿ. ȯ Ʈ ŵ ڴ ͵ .
5. Ű Ʈ ϰ ι° Ұ ŵ Ʈ ȯϴ Scheme Լ ۼϽÿ. ־ Ʈ Ҹ ʴ´ٸ, Լ () ȯؾ Ѵ.
6. FP (Backus, 1978) John Backus а 忡 Scheme Ư¡ FP Ǵ Ư¡ Ͻÿ.
7. Scheme Լ EVAL APPLY Ǹ ã, Ͻÿ.
8. ̰ α ȯ ϳ LISP INTERLISP ý̴. ý "The INTERLISP Programming Environment," by Teitelmen and Masinter (IEEE, Computer, Vol. 14, No. 4, April 1981) Ǿ ִ. а ýۿ LISP ۼϴ INTERLISP ϴ Ͻÿ ( Ϲ INTERLISP ʴ´ٰ Ѵ).
9. LISP αֿ å ϰ PROG Ư¡ LISP ϴ ϴ Ͻÿ.
10. Լ Ʈ ƴ ִ. , ȣ (sequence of symbols) ִ. Scheme CAR, CDR, CONS Լ ſ Լ °?
11. Scheme Լ ϴ°?
(define (y s lis)
(cond
((null?
lis) '() )
((equal? s (car
lis)) lis)
(else (y s (cdr
lis)))
))
12. Scheme Լ ϴ°?
(define (x lis)
(cond
((null?
lis) 0)
((not (list? (car
lis)))
(cond
((eq?
(car lis) nil) (x (cdr lis)))
(else
(+1 (x (cdr lis))))))
(else
(+ (x (car lis)) (x (cdr lis))))
))