anchor.diff:  (defmacro (ignore x)
     `(quote ,x))
   
  -(defmacro (when condition body)
  -    `(if ,condition (progn ,@body)))
  +;; Usage: (when (< x 2) (set! x 2)) ??
  +(defmacro (when condition . body)
  +    `(if ,condition (progn ,@body) nil))
  +
  +(defmacro (unless condition . body)
  +    `(if ,condition nil (progn ,@body)))
  +
  +(defmacro (cond condition . body)
  +    `(if ,condition nil (progn ,@body)))
  +
  +(defmacro (and-list body)
  +  `(if ,body
  +     (if (null? (car ,body))
  +       nil
  +       (and-list (cdr ,body)))
  +     T))
  +
  +(define (and . body)
  +  (and-list body))
  +
  +(defmacro (or-list body)
  +  `(if ,body
  +     (if (null? (car ,body))
  +       (and-list (cdr ,body))
  +       T)
  +     nil))
  +
  +(define (or . body)
  +  (or-list body))
   
   ;;; String operations
  -
   (define (string-not-lessp a b)
     (string-lessp b a))
   
  
positive.code:   (let ((old* *))
      (lambda xs (foldl old* 1 xs))))
  
  (define fact
   (lambda (n)
     (if (< n 2)
         1
       (* n (fact (- n 1))))))
  
negative.code:                     (list 'quasiquote (cdr x)))))
        (list 'quote x)))
  
  (defmacro (let defs . body)
    `((lambda ,(map car defs) ,@body)
      ,@(map cadr defs)))
  