anchor.diff:  ;;; resolution strategies for Lisa's RETE implementation. NB: The code here is
   ;;; raw and inefficient; it will change soon.
   
  -;;; $Id: strategies.lisp,v 1.7 2000/12/15 16:57:23 youngde Exp $
  +;;; $Id: strategies.lisp,v 1.8 2000/12/15 20:38:18 youngde Exp $
   
   (in-package :lisa)
   
  
positive.code: 
  (defmethod initialize-instance :after ((self indexed-priority-list)
                                         &key (priorities 500))
    (setf (slot-value self 'priority-list)
      (make-array (1+ priorities) :adjustable t :fill-pointer t))
    (setf (slot-value self 'delta (/ priorities 2))))
  
  (defun insert-activation (plist activation)
    (with-accessors ((vector get-priority-list)
                     (index get-index)
                     (activations get-activations)) plist
      (let* ((salience (get-salience (get-rule activation)))
             (slot (+ salience (get-delta plist)))
             (queue (aref vector slot)))
        (setf (aref vector slot)
          (apply (get-insertion-function plist) activation queue))
        (index-salience)
        (setf (gethash (hash-code (get-token activation))) activation))))
  
  (defclass depth-first-strategy (strategy)
    ()
  
negative.code: (defgeneric remmove-activations (strategy))
  
  (defclass indexed-priority-list ()
    ((priority-vector :reader get-priority-vector)
     (inodes :initform nil
             :accessor get-inodes)
     (delta :accessor get-delta)
     (insertion-function :initarg :insertion-function
                         :reader get-insertion-function)
  