THIS FILE CONTAINS MISCELLANEOUS COMMENTS ON ASPECTS OF THE CODE, ADDED IN THE COURSE OF CODE DEVELOPMENT. ====================================================== 1. Unification ~~~~~~~~~~~ Unification is general enough to handle formulas with complex arguments, rather than just constants or variables; e.g., we can have (knows-that Grunt (has Grunt banana3)), and this could be unified with (knows-that ?x ?y), or with (knows-that ?x (has ?x ?y)). (Only one of the wffs is expected to have variables, and it is always the left rather than right argument in the unification routines.) As an example of the form of unifiers, the unification of (knows ?x (likes ?y ?x)) with (knows me (likes Grunt me)) results in the unifier ((?X . ME) (?Y . GRUNT)). 2. Initializing the Motivated Explorer's state ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The `initialize-state' program is used for initialization (this calls `make-state-node'). This happens within the context of the roadmap; this must be defined first, including at least one point, and a `place-object' command must be used to position the agent ME at a point in the roadmap grid (possibly just a single point). Once (initialize-state) has been executed, (go!) can be used to trigger the planner, and to advance one action forward. 3. Inference ~~~~~~~~~ When general knowledge is supplied along with an object type being defined (OR IF PROLOG-LIKE RULES ARE ADDED BY HAND TO *GENERAL-KNOWLEDGE*), the system will instantiate that knowledge and perform forward inferences, adding these to the initial state. (Inferences are currently not added in later states, beyond those that were added initially; a place in the code for function `generate-state' -- see lines marked ### -- indicates where we would add a line or two to obtain such inferences.) The depth of forward inference is currently set arbitrarily to 2, via the global variable *inference-limit* -- see the arguments of the call to `all-inferences' within the `initialize-state' rountine. 4. Simplest example ~~~~~~~~~~~~~~~~ The example file `eg-eating-world2.lisp' illustrates many of the above features as simply as possible. 5. Time ~~~~ Currently there is no explicit use of time arguments, i.e., time is implicit (it does get stepped forward by 1 for each action). Its value is stored in *now*. 6. Occluded facts and predicates ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Occluded facts are ones the explorer *wouldn't* know right away -- e.g., whether someone other than ME is hungry, or what others know. This is expressed by designating certain predicates like "hungry" and "know" as occluded -- but note that a fact involving an occluded predicate is only considered an occluded fact if the first argument is not ME. Thus the explorer always knows whether (hungry ME), or whether (know ME ), but if ME is replaced by other arguments, then the fact is occluded.