if?
これは簡単だなぁ。ほぼそのまま。
(defun if? (exp) (tagged-list? exp 'if)) (defun if-predicate (exp) (cadr exp)) (defun if-consequent (exp) (caddr exp)) (defun if-alternative (exp) (if (not (null (cdddr exp))) (cadddr exp) nil)) (defun eval-if (exp env) (if (scheme-eval (if-predicate exp) env) (scheme-eval (if-consequent exp) env) (scheme-eval (if-alternative exp) env)))