程序不适用于prolog中的evey模式

时间:2015-05-25 15:15:32

标签: prolog counter

我试图找出一个人有多少个孩子。创建了我的示例空间,在查找过程中,我应该计算子项的数量并打印该值。

示例输入/输出:

?- find(joe,Result).
false.

我试图像这样更改find(X,R)

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

然后它的输入/输出变得像那样

?- 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).

1 个答案:

答案 0 :(得分:2)

要查找特定人员的所有孩子的数量,您需要收集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.