anchor.diff:    obj will be in the specified state."))
   
   
  +(defgeneric n-event-choosed (obj)
  +  (:documentation "Notify obj that its imminent event has been choosed
  +  for being executed."))
  +
  +
  +(defgeneric n-destroy (obj)
  +  (:documentation "Notify obj that it's about to be destroyed."))
  +
  +
  +
   (defclass identifiable ()
     ((id
  -    :initarg :id
  -    :initform (error ":id missing")
       :accessor id-of
       :type fixnum
       :documentation "Unique id")))
  +
  +
  +(let ((id-counter 0))
  +
  +  (defmethod initialize-instance :after ((obj identifiable) &key)
  +    (setf (id-of obj)
  +	  (incf id-counter))))
  +
  +
  +
  +
  +(defclass event (identifiable)
  +  ((time
  +    :initarg :time
  +    :initform (error ":time missing")
  +    :accessor time-of
  +    :type fixnum)
  +   (action
  +    :initarg :action
  +    :initform (error ":action missing")
  +    :accessor action-of
  +    :type function)))
  +
  +
   
   
   (defclass object (identifiable)
  
positive.code:     :accessor description-of
      :type string)
     (events
      :initarg :events
      :initform (error "missing :events")
      :accessor events-of
      :type list)))
  
  
  (defclass simulator (object)
    ((objects
      :initarg :objects
      :initform ()
      :type list)))
  
  
  (defclass simulated (object)
    nil)
  
negative.code: (in-package :de-sim.core)
  
  
  (defgeneric imminent-event-time (obj)
    (:documentation "Returns time and owner of the next event to be
    executed belonging to obj."))
  
  
  (defgeneric subscribe (sub obj state notification)
  