Notation: The italic font is used for non-terminals and the teletype font is used for terminals, (i.e., strings that actually occur in Algernon code).
atomic-formula = (sterm fterm vterm ) (not (sterm fterm vterm ))fterm = variable frame (sterm fterm) (:slot slot)
sterm = variable slot
vterm = fterm number string (:quote expression) (quote expression)
domain = E
frame :number :string :symbol :list path = (form ) plus access path restriction on variables.
rule = (form <- form )
(form -> form )
vars = E
variable (variable ) form = E
atomic-formula (:taxonomy set-descriptor)
(:slot symbol (domain ) slot-descriptor )
(:rules fterm rule )
(:srules fterm rule )
(:eval expression)
(:test expression)
(:boundp variable)
(:unboundp variable)
(:bind variable expression)
(:branch variable expression)
(:funcall function expression )
(:a vars . path)
(:forc vars . path)
(:the vars . path)
(:any . path)
(:cut . path)
(:db atomic-formula)
(:retrieve atomic-formula)
(:unp . path)
(:fail . path)
(:assume atomic-formula)
(:neq fterm fterm)
(:or path )
(:all-paths path path)
(:delete atomic-formula)
(:clear-slot fterm slot)
(:del-rule fterm rule)
(:del-srule fterm rule)
(:del-rules fterm slot)
(:del-srules fterm slot)
(:ask atomic-formula)
(:show fterm)
(:w-contra-positive . path)
(:wo-contra-positive . path)
(:no-completion form)
slot-descriptor = T
:cardinality number :backlink slot
:inverse slot
:comment string
set-descriptor = (fterm set-descriptor fterm )
expression = Any Lisp expression
(:values frame slot)
(:non-values frame slot)
variable = a Lisp symbol whose print name begins with ``?''.
frame = a Lisp symbol that represents a frame in the knowledge-base.
slot = a Lisp symbol declared as a slot in the knowledge-base.
number = a Lisp number.
string = a Lisp string.
symbol = a Lisp symbol.
function = a Lisp function (in a form suitable to be passed to the Lisp function funcall).