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)))