lisper はじめました(大嘘)

25
Lisper はじめました ひげ A Tour of Lisp Lisp とは History Pure Lisp Lisp の処理系 の開発 使用言語 ?言語 Lisp の設計 今後の展望 Lisper はじめました(大嘘) Lisp の設計と実装 ひげ January 24, 2015

Upload: noob00

Post on 16-Aug-2015

50 views

Category:

Software


1 download

TRANSCRIPT

  1. 1. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp Lisper Lisp January 24, 2015
  2. 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. 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. 4. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp A Tour of Lisp History 1958 MIT
  5. 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. 6. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp A Tour of Lisp History
  7. 7. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp A Tour of Lisp History 1 S eval S eval
  8. 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. 9. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp A Tour of Lisp Pure Lisp AtomList List Atom
  10. 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. 11. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp A Tour of Lisp Pure Lisp cond dene lambda quote
  12. 12. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp Lisp
  13. 13. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp Lisp C C++GC Java Python Ruby Lisp... ...
  14. 14. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp Lisp
  15. 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. 16. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp Lisp D D ... ... Java C++ GC
  17. 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. 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. 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. 20. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp Lisp Lisp S frame
  21. 21. Lisper A Tour of Lisp Lisp History Pure Lisp Lisp Lisp Lisp Lisp
  22. 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. 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. 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. 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