%%   知識情報処理実習 r9の練習問題 解答例

% 1.
male(tom).    
male(bob).    
male(jim).    
female(liz).
female(pat).

gather_men(Men) :- setof(X,male(X),Men).

number_of_men(N) :- gather_men(Men), list_length(Men,N).

list_length([],0).
list_length([_|L],N) :- list_length(L,N1), N is N1+1.

test9_1_1(Men) :- gather_men(Men).
test9_1_2(Men) :- number_of_men(Men).

% 2.
exist_path :- start(X), goal(Y), connected(X,Y).

goal(g).
start(s).

edge(s,a).
edge(s,b).
edge(a,c).
edge(a,d).
edge(b,e).
edge(b,g).
edge(c,g).
edge(d,g).
edge(e,g).

connected(N,M) :- edge(N,M).
connected(N,M) :- edge(N,L), connected(L,M).

test9_2 :- exist_path.