Все, что вы написали, синтаксически допустимо, но из ваших комментариев не похоже, что оно делает то, что вы хотите.
specialCustomer(x).
Здесь вы говорите, что specialCustomer (x) имеет значение true (а specialCustomer (any_else) имеет значение false).
totalSpend(x,500) :- specialCustomer(x).
Здесь вы говорите, что totalSpend (x, 500) имеет значение true, если specialCustomer (x) имеет значение true. Поскольку вы уже определили особого клиента как истинного, с тем же успехом вы могли бы написать
totalSpend(x,500).
Ваш комментарий выглядит так, как будто вы думаете, что деталь перед :-
является условием для детали после нее, но все наоборот.
totalSpend(bob,500).
Здесь вы спрашиваете, истинно ли totalSpend (bob, 500), но поскольку для bob нет правила, оно будет ложным.
Обратите внимание, что x
и bob
являются символами, а не переменными. Так что specialCustomer(x)
будет правдой, но specialCustomer(bob)
не будет.