0

我正在为 Windows 7 使用 SWI Prolog,我的一项任务是一个基本的逻辑难题。我们已经获得了一个单独问题的示例解决方案 - 包括它的源代码。

它的“它的一个领带”问题。但是我不知道如何使用 Solve:- 谓词获得结果。在查阅 .pl 文件后,我是否必须向控制台输入特定命令或类似的命令?

谢谢你的帮助。

源代码(我没有写这个代码):

% 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.
4

1 回答 1

0

查阅文件后,只需键入谓词的名称,括号中的参数(如果有的话),后跟一个句点。如果您的查询中有多个谓词,请用逗号分隔它们。在你的情况下(我称之为文件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.

?- 
于 2013-04-02T12:12:11.317 回答