next up previous
Next: 2 インタプリタの実行例 Up: 1 Schemeインタプリタの実現 Previous: 1.3 通常の手続き(関数)の処理

1.4 特殊シンボルと組み込み手続き(関数)の初期化

前節で説明したように car などのリスト処理用基本手続きのほか,数値計算, 入出力処理などを行なう基本手続き,さらに特殊な大域変数などをあらかじめ 定義しておくための手続き init-scheme-interpreter は以下のようになりま す.

(defun init-scheme-interpreter nil
  (set-global-var! 't t)
  (set-global-var! 'nil nil)
  (set-global-var! 'pi pi)
  (set-global-var! 'get (symbol-function 'get))
  (set-global-var! 'put
                   #'(lambda (sym key value)
                       (setf (get sym key) value)))
  (mapc
   #'(lambda (pair)
       (set-global-var! (car pair)
                        (symbol-function (cadr pair))))
   '((+ +) (- -) (* *) (/ /) (abs abs)
     (sqrt sqrt)
     (sin sin) (cos cos) (atan atan)
     (= =) (< <) (> >) (<= <=) (>= >=)
     (cons cons) (car car) (cdr cdr)
     (not not) (append append)
     (list list) (member member)
     (null? null) (eq? eq) (equal? equal) (eqv? eql)
     (read read)
     (write prin1) (display princ) (newline terpri)))
  )


generated through LaTeX2HTML. M.Inaba 平成18年5月6日