Большинство Прологов хотят, чтобы пункты для каждого конкретного предиката были перечислены вместе, если только вы не совершите магию. Я удивлен, Стригниц и Бос игнорируют это. Измените программу на
% all clauses for wizard/1
wizard(ron).
wizard(X) :- hasBroom(X),hasWand(X).
hasWand(harry).
quidditchPlayer(harry).
hasBroom(X) :- quidditchPlayer(X).
Обратите внимание, что я сохранил пункты для wizard/1
в том же порядке, что и в исходной программе. Для простых баз знаний, таких как эта, порядок не имеет большого значения, но при реализации недетерминированных алгоритмов порядок предложений может определять порядок, в котором генерируются решения.