(defun init-scheme-proc (x) (if (atom x) (init-scheme-proc (list x x)) (set-global-var! (car x) (make-fn :name (car x) :code (seq (gen 'prim (cadr x)) (gen 'return)))))) (defparameter *scheme-procs* '(+ - * / abs sqrt sin cos atan = < > <= >= cons car cdr not append list member read random name! (null? null) (eq? eq) (equal? equal) (eqv? eql) (compile scheme-compile) (exit scheme-exit) (number? numberp) (even? evenp) (odd? oddp) (write prin1) (display princ) (newline terpri))) (defun set-global-var! (var value) (setf (get var 'scheme-global-value) value)) (defun name! (fn name) (when (and (fn-p fn) (null (fn-name fn))) (setf (fn-name fn) name)) name)という具合に定義して,
(defun init-scheme-compiler () (init-scheme-macros) (set-global-var! nil nil) (set-global-var! t t) (mapc #'init-scheme-proc *scheme-procs*) )という具合にinit-scheme-compilerを再定義します.