我试图找到一个人的所有兄弟..我已经创建了以下规则..
find_all_brothers(Z):- findall(X,brother(X,Z),X0),write(X0).
然而,如果一个人有一个以上的兄弟,那么它只会找到一个兄弟..我假设我必须以某种方式使用递归,但我有点卡住了!
答案 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).