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:       (if (funcall p val)
          (lcons val (filter p (tail lcons)))
          (filter p (tail lcons))))))
  
negative.code: 
  (defmacro lcons (head tail)
    `(make-instance 'lcons
                    :val (cons ,head (lambda () ,tail))))
  
  (defgeneric empty? (lcons))
  (defgeneric head (lcons))
  