카테고리 없음
프롤로그 언어를 이용한 아인슈타인 문제 해결!
평북이
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