Вы правы, пункты в PROLOG - это предложения Horn.Кроме того, бывает так, что соединение в заголовке предложения, такого как:
detected(proton), detected(electron) :- emissionOf(alpha), emissionOf(beta).
... (которое не является предложением Хорна), фактически эквивалентно следующим двум отдельным Роговые предложения:
detected(proton) :- emissionOf(alpha), emissionOf(beta).
detected(electron) :- emissionOf(alpha), emissionOf(beta).
... поскольку оба факта detected(proton)
и detected(electron)
подразумеваются сочетанием целей тела.
Обратите внимание, что может быть несколько другихэквивалентные способы кодирования того, что вы намерены означать в программе, например, следующее (в качестве примера):
emissionOf(alpha).
emissionOf(beta).
detected(X) :-
emissionOf(alpha),
emissionOf(beta),
(X = proton; X = electron).
Выполнение цели detected(X)
свяжет X
с атомом proton
, затем с electron
при возврате.