anchor.diff:      :type fixnum
       :documentation "When this event must be executed.")
   
  -   (action
  -    :initarg :action
  +   (causes
  +    :initarg :causes
  +    :initform (error "missing :causes")
  +    :accessor causes-of
  +    :type list
  +    :documentation "List of objects that will cause this event to
  +    happen.")
  +
  +   (!action
  +    :initarg :!action
       :initform (error "missing :action")
  -    :reader action-of
  +    :reader !action-of
       :type function   ; FIXME: must fully specify signature.
  -    :documentation "Implements the behaviour of this event.")))
  +    :documentation "Implements the behaviour of this event, taking the
  +    world as its only argument and modifying it.
  +    NOTE: function can modify the world structure only, NOT the
  +    structure of world's elements. This is because they are shared
  +    with the old instances of world that are kept in the history.")))
  +
  +
  +(defclass object (identifiable)
  +  ((effects
  +    :initform ()
  +    :accessor effects-of
  +    :type list
  +    :documentation "List of events this object is causing.")))
   
   
   (defclass world (identifiable)
  
positive.code: ;;      copyright notice, this list of conditions and the following
  ;;      disclaimer in the documentation and/or other materials
  ;;      provided with the distribution.
  
  
  (declaim (optimize debug safety (speed 0)))
  
  (defpackage :org.altervista.rjack.desim
    (:nicknames :ds)
    (:use :common-lisp)
    (:export :event
  	   :world
  	   :run))
  
  
negative.code:     (push new-world (history-of new-world))
      (assert (eql this ev) nil
  	    "executing event should be the first in the event list.")
      (funcall (!action-of ev) new-world)
      new-world))
  
  
  