문제

I am trying to find all the brothers of a person.. I have created the following rule..

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

This works however, if a person has more then one brother then it will only find a single brother.. I'm assuming I have to use recursion somehow but I'm a little stuck!

도움이 되었습니까?

해결책

If you have relationships such as:

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

And you want to find all of bill's brothers, you'll need to do a little more:

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

To avoid any redundant members of the list, setof will sort and provide only unique members:

find_all_brothers(Z) :-
    setof(X, (brother(X, Z) ; brother(Z, X)), X0), write(X0).
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top