1. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp
Lisper Lisp January 24, 2015
2. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp
Outline 1 A Tour of Lisp Lisp History Pure Lisp 2 Lisp Lisp 3
3. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp A
Tour of Lisp Lisp 2 LISt Processing ; n (define (sum n) (if (eq n
0) 0 (+ (sum (- n 1))1)))
4. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp A
Tour of Lisp History 1958 MIT
5. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp A
Tour of Lisp History MIT IBM704 1 36 15 1 2
6. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp A
Tour of Lisp History
7. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp A
Tour of Lisp History 1 S eval S eval
8. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp A
Tour of Lisp Pure Lisp eval Lisp Atom List 2 atom, eq, cons, car,
cdr 5 cond, dene, lambda, quote 4 eval
9. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp A
Tour of Lisp Pure Lisp AtomList List Atom
10. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp A
Tour of Lisp Pure Lisp atom Atom eq2 cons2 List carList
cdrList
11. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp A
Tour of Lisp Pure Lisp cond dene lambda quote
12. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp
Lisp
13. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp Lisp
C C++GC Java Python Ruby Lisp... ...
14. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp
Lisp
15. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp Lisp
D C/C++ Java C Facebook /* Hello World! */ import std.stdio; void
main() { write("Hello World!"); }
16. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp Lisp
D D ... ... Java C++ GC
17. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp Lisp
Lisp Pure Lisp S S eval, apply, print S S Atom List Atom nil List
List
18. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp Lisp
Lisp Atom Atom value Exp eq(Exp exp) { if(exp == this) return
True.gen; return Nil.gen; }
19. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp Lisp
Lisp Atom Atom static new gen gen static Atom[string] list; static
Exp gen(string key) { if (key in list) return list[key]; return new
Atom(key); }
20. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp Lisp
Lisp S frame
21. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp Lisp
Lisp
22. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp Lisp
Lisp eval apply 5 4 eval S S apply S S
23. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp Lisp
Lisp eval apply eval[e;a]=[ atom[e]->cdr[assoc[e;a]];
atom[car[e]]-> [eq[car[e];QUOTE]->cadr[e]; eq[car[e];COND]
->evcon[cdr[e];a]; T->apply[car[e];evlis[cdr[e];a];a]];
T->apply[car[e];evlis[cdr[e];a];a]] apply[fn;x;a]=[
atom[fn]->[eq[fn;CAR] ->caar[x]; eq[fn;CDR] ->cdar[x];
eq[fn;CONS]->cons[car[x];cadr[x]]; eq[fn;ATOM]->atom[car[x]];
eq[fn;EQ] ->eq[car[x];cadr[x]]; T->apply[eval[fn;a];x;a]];
eq[car[fn];LAMBDA]-> eval[caddr[fn];pairlis[cadr[fn];x;a]];
eq[car[fn];LABEL] ->
apply[caddr[fn];x;cons[cons[cadr[fn];caddr[fn]];a]]]
24. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp Lisp
Lisp eval apply Atom symbol List cdr cdr Atom override Exp eval(Env
env) { return this; }List override Exp eval(Env env) { return
exp1.eval(env).apply(exp2, env); }
25. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp set
cdr Lisp pi e Euler S n = Sn+1 (Sn+1 Sn)2 Sn1 2Sn +Sn+1