anchor.diff:  ;;; Description: Meta operations that LISA uses to support the manipulation of
   ;;; facts and instances.
   
  -;;; $Id: meta.lisp,v 1.22 2001/04/10 20:50:47 youngde Exp $
  +;;; $Id: meta.lisp,v 1.23 2001/04/10 21:14:23 youngde Exp $
   
   (in-package "LISA")
   
  
positive.code:       (values name))))
  
  (defun import-class (symbolic-name class slot-specs)
    (print symbolic-name)
    (print class)
    (print slot-specs)
    (terpri)
    (values))
  
  #+ignore
  (defun import-class (symbolic-name class slot-specs)
  
negative.code:                  :class-name class-name :slots slots))
  
  (defclass meta-shadow-fact (meta-fact)
    ((effective-slots :reader get-effective-slots))
    (:documentation
     "This class represents meta information for the class shadow-fact."))
  
  (defmethod initialize-instance :after ((self meta-shadow-fact) &key effective-slots)
    (let ((slot-table (make-hash-table)))
      (mapc #'(lambda (slot)
                (setf (gethash (intern (symbol-name slot)) slot-table) slot))
            effective-slots)
      (setf (slot-value self 'effective-slots) slot-table)))
      
  (defun find-effective-slot (self slot-name)
    (declare (type meta-shadow-fact self) (type symbol slot-name))
    (let ((effective-slot (gethash slot-name (get-effective-slots self))))
      (cl:assert (not (null effective-slot)) ()
        "No effective slot for symbol ~S." slot-name)
      (values effective-slot)))
  
  (defun make-meta-shadow-fact (symbolic-name class-name slots)
    (make-instance 'meta-shadow-fact
                   :symbolic-name symbolic-name
                   :class-name class-name
                   :slots
                   (append
                    (mapcar #'(lambda (slot)
                                (intern (symbol-name slot)))
                            slots)
                    `(,:object))
                   :effective-slots slots))
  
  (let ((meta-map (make-hash-table))
        (class-map (make-hash-table)))
  