LISPでLISPを実装する

2007-07-05

http://cogsci.ucsd.edu/~batali/lisp-course/lisp-in-lisp-1.html LISPでLISPを実装する前の、簡単な計算機の実装がなかなかいい感じ:

(defun calc-loop ()
(format t "~%calc> ")
(let ((form (read)))
(unless (eql form 'quit)
(print (calc-eval form))
(calc-loop))))

(defun calc-eval (form)
(if (atom form)
form
(apply (first form) (calc-eval-args (rest form)))))

(defun calc-eval-args (forms)
(when forms
(cons (calc-eval (first forms))
(calc-eval-args (rest forms)))))

俗に言う read-eval-print ループ。read がS式のパースをしてくれちゃってるのはあるが、簡単なプログラムでできちゃうんだね。 これと同様に、S式のパースさえ作ってしまえば簡単にLispを実装できそう。