Во-первых, попробуйте сформулировать то, что вы хотите, на простом английском языке. Вы, наверное, хотите сказать:
У всех есть два родителя, кроме Адама и Евы, у которых их нет.
Что с Лилит? Неважно, давайте придерживаться вашего чтения.
num_parent(Person, 2) :-
dif(Person, adam),
dif(Person, eve).
num_parent(adam, 0).
num_parent(eve, 0).
Как видите, определить это немного громоздко: вы должны дважды упомянуть каждого исключительного человека. Легко совершить ошибку.
С if_/3
, доступным в library(reif)
для SICStus и SWI можно написать короче:
num_parent(Person, Num) :-
if_( ( Person = adam ; Person = eve ), Num = 0, Num = 2 ).
А теперь немного использования:
?- num_parent(eve, Num).
Num = 0.
?- num_parent(X, 0).
X = adam
; X = eve
; false.
?- num_parent(X, 2).
dif(X, eve),
dif(X, adam).
?- num_parent(lilith, 2).
true.
person
false
schedule
23.11.2017
!
? - person DodgyCodeException   schedule 23.11.2017