2013-04-02 5 views
0

Windows 7 용 SWI Prolog를 사용하고 있으며 과제 중 하나가 기본 논리 퍼즐입니다. 우리는 소스 코드를 포함하여 별도의 문제에 대한 샘플 솔루션을 제공 받았습니다.swi prolog solve

"그것의 동점"문제. 그러나 나는 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. 

답변

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. 

?-