Lisper はじめました(大嘘)

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

Transcript of Lisper はじめました(大嘘)

  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