0

I am using SWI Prolog for windows 7 and one of my assignments is a basic logic puzzle. We have been given a sample solution to a seperate problem - including its source code.

Its the "Its a tie" problem. However I do not know how to get results using the Solve:- predicate. After consulting the .pl file do I have to input a specific command to the console or anything like that?

Thanks for any help.

Source Code (I did not write this code) :

% Problem #1, "It's a tie", Dell Logic Puzzles, October 1999
% Each man (mr so-and-so) got a tie from a relative.
tie(cupids).
tie(happy_faces).
tie(leprechauns).
tie(reindeer).

mr(crow).
mr(evans).
mr(hurley).
mr(speigler).

relative(daughter).
relative(father_in_law).
relative(sister).
relative(uncle).

solve :-
tie(CrowTie), tie(EvansTie), tie(HurleyTie), tie(SpeiglerTie),
all_different([CrowTie, EvansTie, HurleyTie, SpeiglerTie]),

relative(CrowRelative), relative(EvansRelative),
relative(HurleyRelative), relative(SpeiglerRelative),
all_different([CrowRelative, EvansRelative, HurleyRelative, SpeiglerRelative]),

Triples = [ [crow, CrowTie, CrowRelative],
            [evans, EvansTie, EvansRelative],
            [hurley, HurleyTie, HurleyRelative],
            [speigler, SpeiglerTie, SpeiglerRelative] ],

% 1. The tie with the grinning leprechauns wasn't a present from a daughter.
\+ member([_, leprechauns, daughter], Triples),

% 2. Mr. Crow's tie features neither the dancing reindeer nor the yellow happy faces.
\+ member([crow, reindeer, _], Triples),
\+ member([crow, happy_faces, _], Triples),

% 3. Mr. Speigler's tie wasn't a present from his uncle.
\+ member([speigler, _, uncle], Triples),

% 4. The tie with the yellow happy faces wasn't a gift from a sister.
\+ member([_, happy_faces, sister], Triples),

% 5. Mr Evans and Mr. Speigler own the tie with the grinning leprechauns
%    and the tie that was a present from a father-in-law, in some order.
( (member([evans, leprechauns, _], Triples),
   member([speigler, _, father_in_law], Triples)) ;

  (member([speigler, leprechauns, _], Triples),
   member([evans, _, father_in_law], Triples)) ),

% 6. Mr. Hurley received his flamboyant tie from his sister.
member([hurley, _, sister], Triples),

tell(crow, CrowTie, CrowRelative),
tell(evans, EvansTie, EvansRelative),
tell(hurley, HurleyTie, HurleyRelative),
tell(speigler, SpeiglerTie, SpeiglerRelative).

% Succeeds if all elements of the argument list are bound and different.
% Fails if any elements are unbound or equal to some other element.
all_different([H | T]) :- member(H, T), !, fail.
all_different([_ | T]) :- all_different(T).
all_different([_]).

tell(X, Y, Z) :-
write('Mr. '), write(X), write(' got the '), write(Y),
write(' tie from his '), write(Z), write('.'), nl.
alexeidebono
  • 99
  • 2
  • 6
  • 12

1 Answers1

0

After consulting the file, just type the name of the predicate, with the arguments in parentheses (if there are any), followed by a period. If you have more than one predicate in your query, separate them by commas. In your case (I called the file solve.pl):

?- [solve].
% solve compiled 0.00 sec, 18 clauses
true.

?- solve.
Mr. crow got the cupids tie from his daughter.
Mr. evans got the leprechauns tie from his uncle.
Mr. hurley got the reindeer tie from his sister.
Mr. speigler got the happy_faces tie from his father_in_law.
true ;
false.

?-