anchor.diff:    (null lcons))
   
   (defmethod head ((lcons lcons))
  -  (when (functionp (slot-value lcons 'val))
  -    (setf (slot-value lcons 'val) (funcall (slot-value lcons 'val))))
     (car (slot-value lcons 'val)))
   
   (defmethod head ((lcons list))
     (car lcons))
   
   (defmethod tail ((lcons lcons))
  -  (when (functionp (slot-value lcons 'val))
  -    (setf (slot-value lcons 'val) (funcall (slot-value lcons 'val))))
  -  (cdr (slot-value lcons 'val)))
  +  (funcall (cdr (slot-value lcons 'val))))
   
   (defmethod tail ((lcons list))
     (cdr lcons))
  
positive.code: 
  (defmacro lcons (head tail)
    `(make-instance 'lcons
                    :val (lambda () (cons ,head ,tail))))
  
  (defgeneric empty? (lcons))
  (defgeneric head (lcons))
  
negative.code:       (if (funcall p val)
          (lcons val (filter p (tail lcons)))
          (filter p (tail lcons))))))
  
  (defun lreduce (f lcons)
    (let ((accumulator (head lcons)))
      (setq lcons (tail lcons))
      (loop while (not (empty? lcons))
            do (progn
                 (setq accumulator (funcall f accumulator (head lcons)))
                 (setq lcons (tail lcons))))
      accumulator))
  