程序不适用于序言中的每个模式

procedure doesn't work for evey pattern in prolog

我试着找出一个人有多少 children。创建了我的示例 space 并在查找过程中我应该计算 children 的数量并打印值。

样本input/output:

?- find(joe,Result).
false.

我试过这样改变find(X,R)

find(X,R) :-
   R is 0 .
   R is R+1 ,    
   father(X,Y).
   write(R).

然后input/output就变成了这样

?- find(joe,R).
R = 0.

我尝试了我对 prolog 的了解,但我认为我对完成这项任务知之甚少。欢迎所有建议。感谢您的关注。

:- [library(clpr)].

mother(susan, sue).
father(joe, eric).
father(joe, smith).
father(joe, barrack).
father(sue, john).
father(eric, bill).
father(bill, george).

find(X,R):-
   R is 0,
   R is R+1 ,
   father(X,Y).

要求出一个人所有children的个数,需要收集father(Father, Children)mother(Mother, Children)的所有解并统计。例如:

number_of_childrens(Person, N) :-
    findall(Children, (father(Person, Children); mother(Person, Children)), Childrens),
    length(Childrens, N).

例如:

?- number_of_childrens(joe, N).
N = 3.