Prolog查找所有谓词

时间:2014-02-22 17:19:15

标签: recursion prolog artificial-intelligence prolog-setof

我试图找到一个人的所有兄弟..我已经创建了以下规则..

    find_all_brothers(Z):- findall(X,brother(X,Z),X0),write(X0).

然而,如果一个人有一个以上的兄弟,那么它只会找到一个兄弟..我假设我必须以某种方式使用递归,但我有点卡住了!

1 个答案:

答案 0 :(得分:0)

如果您有以下关系:

brother(sam, bill).
brother(bill, fred).

你想要找到所有法案的兄弟,你需要多做一点:

find_all_brothers(Z) :-
    findall(X, (brother(X, Z) ; brother(Z, X)), X0), write(X0).

为了避免列表中的任何冗余成员,setof将排序并仅提供唯一成员:

find_all_brothers(Z) :-
    setof(X, (brother(X, Z) ; brother(Z, X)), X0), write(X0).