anchor.diff:    "Returns a list with the cardinality of node's parents followed by its own cardinality."
     (append (mapcar #'node-cardinality (node-parents node)) (list (node-cardinality node))))
   
  -#+ (or)
  -(defgeneric node-inverse-mapping (node)
  -  (:documentation "Return the mapping from domain-values to their indices. (no longer in potential)"))
  -
  -#+-(defgeneric node-probability (node node-value &rest parent-values)
  -     (:documentation "Compute the probability of (NODE-VALUE PARENT-VALUES) for NODE.")
  -     (:method (node node-value &rest parent-values)
  -       (apply #'aref (node-potential node)
  -	      (compute-node-value-index node node-value parent-values))))
  -
   (defun sort-node-values (node-values)
     (sort (copy-list node-values) #'string<
           :key #'first))
   
  -;; example usage:
  -#+-(node-probability *node-d* (list "B=t" "C=t" "D=f"))
  +;; example usages:
  +#+(or) (node-probability *node-b* '((A t)(B t))) ;; -> 0.2 -> T
  +;; the lookup is commutative
  +#+(or) (node-probability *node-b* '((B t)(A t))) ;; -> 0.2 -> T
   (defgeneric node-probability (node node-values)
     (:documentation "Compute the probability of the given instatiation of a tuple of the nodes cpt. 
      The value list is an alist of node-value pairs, i.e., given in the form:
  
positive.code:              (list name value))
             values))))
    
  ;;; returns the node type for a discrete node
  ;;; it casts node-values into a list and returns something like (MEMBER 1 2 3)
  (defmethod node-type ((node discrete-node))
    `(member ,@(coerce (node-domain-values node) 'list)))
  
negative.code:     (let ((cpt (node-cpt node)))
        (maphash #'(lambda (key-list potential)
                     (format t "~S -> ~S~%" key-list potential)) cpt))))
  
  (defgeneric node-variables (node)
    (:documentation
  