dogsound(wouf). dogsound(wrrouf). dogsound(grrrr). dogsound(grr). dogsound(aoaouuuuuu). dogsound(whimp). catsound(miaw). catsound(miiiiiiaaauuuuuw). catsound(scratch). catsound(fshhhhhhhhtt). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% dogtalk([]). dogtalk([D|Ds]):- dogsound(D), dogtalk(Ds). %%%%%%%%%%%%%%%%%%% separate([],[],[]). separate([C|More],Ds,[C|Cs]):- catsound(C), separate(More,Ds,Cs). separate([D|More],[D|Ds],Cs):- dogsound(D), separate(More,Ds,Cs). %%%%%%%%%%%%%%%%%%% winner([_|Rest],X):- winner(Rest,X). winner([grr],dog). winner([grrrr],dog). winner([wrrouf],dog). winner([wouf],dog). winner([aoaouuuuuu],cat). winner([whimp],cat). winner([miaw],cat). winner([miiiiiiaaauuuuuw],cat). winner([scratch],cat). winner([fshhhhhhhhtt],cat). % --- there are many other ways to define winner /****************** Test ?- dogtalk([wouf,wouf,wouf,grr]). yes ?- separate([miaw,wouf,wouf,wrrouf,grr,fshhhhhhhhtt,scratch,whimp,whimp],Ds,Cs). Cs = [miaw,fshhhhhhhhtt,scratch], Ds = [wouf,wouf,wrrouf,grr,whimp,whimp] ? ; no ?- winner([miaw,wouf,wouf,wrrouf,grr,fshhhhhhhhtt,scratch,whimp,whimp],W). W = cat ? ; no ******************/