/* Test data */ test_puzzle(Name,Solution) :- structure(Name,Structure), clues(Name,Structure,Clues), queries(Name,Structure,Queries,Solution), solve_puzzle(puzzle(Clues,Queries,Solution),Solution). structure(test,[friend(N1,C1,S1), friend(N2,C2,S2), friend(N3,C3,S3)]). clues(test,Friends, [(did_better(Man1Clue1, Man2Clue1, Friends), % Clue 1 name_(Man1Clue1, michael), sport(Man1Clue1,basketball), nationality(Man2Clue1,american)), (did_better(Man1Clue2, Man2Clue2, Friends), % Clue 2 name_(Man1Clue2, simon), nationality(Man1Clue2,israeli), sport(Man2Clue2,tennis)), (first(Friends,ManClue3),sport(ManClue3,cricket)) ]). queries(test, Friends, [ member(Q1,Friends), name_(Q1,Name), nationality(Q1,australian), % Query 1 member(Q2,Friends), name_(Q2,richard), sport(Q2,Sport) % Query 2 ], [['The Australian is', Name], ['Richard plays ', Sport]] ). did_better(A,B,[A,B,C]). did_better(A,C,[A,B,C]). did_better(B,C,[A,B,C]). name_(friend(A,B,C),A). nationality(friend(A,B,C),B). sport(friend(A,B,C),C). first([X|Xs],X). /* solve_puzzle(Puzzle,Solution) :- Solution is a solution of Puzzle, where Puzzle is puzzle(Clues,Queries,Solution). */ solve_puzzle(puzzle(Clues,Queries,Solution),Solution) :- solve(Clues), solve(Queries). solve([Clue|Clues]) :- Clue, solve(Clues). solve([]). % Program 14.6: A puzzle solver %?-test_puzzle(test,Solution).