Artificial Intelligence A Modern Approach (2nd Edition): Figure 9.6, page
288.
function FOL-BC-ASK(KB, goals, theta) returns a set of substitutions
input: KB, a knowledge base
goals, a list of conjuncts forming a query (theta already applied)
theta, the current substitution, initially the empty substitution {}
local variables: answers, a set of substitutions, initially empty
if goals is empty then return {theta}
qDelta <- SUBST(theta, FIRST(goals))
for each sentence r in KB where STANDARDIZE-APART(r) = (p1 ˆ ... ˆ pn => q)
and thetaDelta <- UNIFY(q, qDelta) succeeds
new_goals <- [p1,...,pn|REST(goals)]
answers <- FOL-BC-ASK(KB, new_goals, COMPOSE(thetaDelta, theta)) U answers
return answers
Figure 9.6 A simple backward-chaining algorithm.