카테고리 없음

프롤로그 언어를 이용한 아인슈타인 문제 해결!

평북이 2022. 9. 15. 23:31

평북이가 프롤로그 언어를 이용한 아인슈타인 문제를 해결했습니다!

 

프롤로그 언어 작업한 곳은 다음과 같습니다!

 

SWISH -- SWI-Prolog for SHaring

 

swish.swi-prolog.org

 

소스코드

 

<소스코드>

/* 전제
벽지 색깔이 다른 집이 일렬로 5채 있다.
각 집마다 서로 다른 국적을 가진 사람이 살고 있다.
다섯 사람은 어떤 음료를 마시고, 어느 담배를 피우고, 어느 동물을 기르고 있다.
어느 두 사람도 마시는 음료, 피우는 담배, 기르는 동물은 일치하지 않는다.
집 국적 음료 담배 동물
*/
adjacent(A, B, List) :- nextto(A, B, List); nextto(B, A, List).
find(Fishowner):-
  length(Houses, 5),                                                          
  member(house(red, english, _, _, _), Houses),                               % 1. 영국인은 빨간 집에 산다.
  member(house(_, swedish, _, _, dog), Houses),                               % 2. 스웨덴인은 개를 기른다.
  member(house(_, danish, tea, _, _), Houses),                                % 3. 덴마크인은 차를 마신다.
  nextto(house(green, _, _, _, _), house(white, _, _, _, _), Houses),         % 4. 초록 집은 하얀 집의 바로 왼쪽에 있다.
  member(house(green, _, coffee, _, _), Houses),                              % 5. 초록 집에 사는 사람은 커피를 마신다.
  member(house(_, _, _, pall_mall, bird), Houses),                            % 6. 펠멜(Pall mall) 담배를 피우는 사람은 새를 기른다.
  member(house(yellow, _, _, dunhill, _), Houses),                            % 7. 노란 집 사람은 던힐(Dunhill) 담배를 피운다.
  nth1(3, Houses, house(_, _, milk, _, _)),                                   % 8. 한 가운데 사는 사람은 우유를 마신다.
  nth1(1, Houses, house(_, norwegian, _, _, _)),                              % 9. 노르웨이인은 첫 번째 집에 산다.
  adjacent(house(_, _, _, blend, _), house(_, _, _, _, cat), Houses),         % 10. 블렌드(Blend) 담배를 피우는 사람은 고양이를 기르는 사람의 옆집에 산다.
  adjacent(house(_, _, _, _, horse), house(_, _, _, dunhill, _), Houses),     % 11. 말을 기르는 사람은 던힐 담배를 피우는 사람의 옆집에 산다.
  member(house(_, _, beer, blue_master, _), Houses),                          % 12. 블루매스터(Blue master) 담배를 피우는 사람은 맥주를 마신다.
  member(house(_, german, _, prince, _), Houses),                             % 13. 독일인은 프린스(Prince) 담배를 피운다.
  adjacent(house(_, norwegian, _, _, _), house(blue, _, _, _, _), Houses),    % 14. 노르웨이인은 파란 집 옆에 산다.
  adjacent(house(_, _, _, blend, _), house(_, _, water, _, _), Houses),       % 15. 블렌드 담배를 피우는 사람은 생수를 마시는 사람과 이웃이다.
  member(house(_, Fishowner, _, _, fish), Houses).                            % 그렇다면, 물고기를 기르는 사람은 어느 나라 사람일까?

 

<결과화면>

<참고문헌>

 

GitHub - DonaldKellett/Einsteins-Riddle-Prolog: Einstein's Riddle (aka Zebra Puzzle) formulated as a Prolog program.

Einstein's Riddle (aka Zebra Puzzle) formulated as a Prolog program. - GitHub - DonaldKellett/Einsteins-Riddle-Prolog: Einstein's Riddle (aka Zebra Puzzle) formulated as a Prolog program.

github.com

<프롤로그 언어 문법>

 

member/2

 

www.swi-prolog.org