
Algernon forms:

  (:RULES  t r1 ... rn)			 Add rules r1 ... rn to frame t. 
  (:SRULES t r1 ... rn)			 Add srules r1 ... rn to frame t. 
  (:DEL-RULE t r)			 Delete the rule r from frame t. 
  (:DEL-SRULE t r)			 Delete the srule r from frame t. 
  (:DEL-RULES t s)			 Delete all rules from slot s of frame t. 
  (:DEL-SRULES t s)			 Delete all srules from slot s of frame t.

  (:W-CONTRA-POSITIVE c1 ... cn)           In the path (c1 ... cn) add contra-positives of rules.  
  (:WO-CONTRA-POSITIVE c1 ... cn)        In the path (c1 ... cn) does NOT add contra-positives of
                                         rules.
  (:IN-OWN-PARTITION c) 		 Queries or asserts predicate in its own partition.
  (:NO-COMPLETION c)			 Suppresses rule completion while querying or asserting c.

  (:THE ?x c1 ... cn)      		 Find or create the ?x such that (c1 ... cn). 
  (:THE (?x1 ... ?xn) c1 ... cn)      	 Find or create the ?x1 ... ?xn such that (c1 ... cn). 
  (:FORC ?x c1 ... cn)      		 Find or create an ?x such that (c1 ... cn). 
  (:FORC (?x1 ... ?xn) c1 ... cn)      	 Find or create an ?x1 ... ?xn such that (c1 ... cn). 
  (:UNP c1 ... cn)			 Succeed if query of (c1 ... cn) fails. 
  (:ALL-PATHS P1 P2)			 Succeed iff all substitutions for path P1 are substitutions for P2. 

  (:ASSUME p)          			 Assume p if can't prove not p. 
  (:RETRIEVE p)         		 Retrieve values but suppresses rule firings. 
  (:ASK p)       			 Ask user for a value for the frame-slot in p.  

  (:CREATE ?x)          		 Make new frame and assign to ?x. 
  (:CREATE ?x a1 ... an)          	 Make new frame with name (a1 ... an) and assign to ?x. 
  (:SHOW t)             		 Show frame t.  

  (:DELETE p)           		 Remove the value p. 
  (:CLEAR-SLOT t s)   			 Remove all values from slot s of frame t.  

  (:DECL-SLOTS (s1 m1) ... (sm mn))	 Declare slot si to hold at most mi values. 
  (:SLOT s (t1 ... tn) d1 ... dn)	 Declare slot s to be of arity n, with argument i a 
					 member of set ti.  d1 ... dn are descriptors.  The 
					 possible slot descriptors are listed below.  

  (:TEST e)           			 Succeed iff e does not evaluate to nil in lisp.
  (:LISP e)				 Evaluate e as lisp form for side effects only.
  (:BIND ?x e)        			 Bind ?x to result of evaluating e (as a lisp expression).
  (:BIND-TO-VALUES ?x t s)               Bind ?x to list of values (known with no assumptions)
                                         in slot s of frame t. 
  (:BRANCH-ON-VALUES ?x e)               Bind ?x to each element in list resulting from the
                                         evaluation of e (as a lisp expression).
  (:APPLY fun e)			 Apply lisp function fun to e. 
  (:NEQ t1 t2)      			 Succeed iff NOT t1 = t2.  

  (:TAXONOMY s)				 Assert set-descriptor s.  A set-descriptor of form
					 (t sd1 ... sdn t1 ... tm) asserts that set t has subsets
					 described by set-descriptors sd1 ... sdn and members t1 ... tm.


Slot descriptors:

 :cardinality n		 Slot can hold at most n values. 
 :partition t		 Slot is in partition t. 
 :backlink s		 Slot is backlinked to the relation s. 
 :inverse s		 Slot is the inverse of the relation s (equivalent to a bi-directional backlink).


Algernon special functions (actually pre-processor macros):

  (:SLOT s)				-- Returns the slot s (if s appeared as an argument to a predicate
					   it would be taken as a reference to the frame with name s).
  (:QUOTE e)				-- Returns the lisp expression e.
  (:LAMBDA ?x p)                        -- Returns (:lambda ?x path), but treats ?x and variables in
                                           path as normal lisp atoms (not Algernon variables).
