bound-variables
is a list of variables (each starting with
?
) which are already bound.
body
is a rule body consisting of the same kind of statements that make up the right hand side of a forward or backward chaining rule.
This macro enables rule syntax to be embedded within Lisp. The
body
is executed just as if it were the right hand side of a rule. All variables in the body (denoted by
?
) are taken to be unbound unless found in the list
bound-variables
in which case its value is taken from the Lisp variable of the same name. It is similar to the function
any
but can be compiled for efficiency.
T
if the body succeeds (that is, all statements are successfully executed), else
nil
(if the statements fail).
(defun my-fn (?x)
"prints all the lists which append to give ?x and
then returns NIL"
(with-rule-actions (?x)
(append ?a ?b ?x)
((format t "~%~S and ~S append to give ~S"
?a ?b ?x))
(fail)))