Reader contributions are solicited to expand this section.
Algernon is not Prolog. Despite the superficial
similarities, there are several important differences in the inference algorithms
used. See section 2.3 for a brief description of the inference
algorithms used in Algernon.
Avoid using the non-monotonic special forms. They are
essential in some cases, but we currently do not have a good theory
of non-monotonic reasoning so it is difficult to predict their
behavior without knowledge of the Algernon inference algorithms.
It is a good idea to create a taxonomy and
link your frames and slots into it. Setting up a taxonomy in Algernon can be a
slow process so it is often a good idea to set up the taxonomy and then
take a ``snapshot'' of the knowledge-base (see section
3).
In general it is a good idea to name frames for sets with plurals
(e.g., people) to distinguish them from frames for individuals.
It is also a good idea to maintain some convention for
choosing the names for slots. In the background knowledge-base I have
tried to choose slot names so that (r f1 f2) can be read as ``f1
r f2'' or ``A(n) r of f1 is f2'' (depending on whether r is a
verb or a noun).
In general all rules should be associated with frames (instead
of slots). There are two important exceptions to this rule.
First, some rules are associated with slots because they allow
Algernon to conclude isa relations (and thus access rules). For
example, it would do little good to associate the rule:
with the set people. The second exception are rules associated
with sets of slots (e.g., rules for partial orders).
In the current implementation
:taxonomy and :slot do not get along well. One can define sets
of slots using :taxonomy, but all slots should be created and
defined using :slot, and should be linked to the taxonomy by
asserting explicit isa links.