猜謎題:誰養魚

有五個人分別來自五個不同的國家,他們各自住在不同顏色的房子,有不同的喜好。

誰養魚?


對這小小的問題,有一篇不錯的文章做如此討論: http://amazeingart.com/fun/einstein-quiz-answer.html


不管值得不值得解題,反正,動手操作是大家都會的,可是邏輯形式如何呢?

我的程式,貼在這個網址裡: https://github.com/YauHsien/work/blob/master/src/who_has_the_fish.prolog

我本來想要慢慢寫 15 條判斷規則,不過,思緒轉了一大圈之後,覺得如果太看重規則,我大概會寫出如此累綴的判斷式:


predicate1([Brit, _, red, _, _, _]) :- Brit \= brit, !, fail.
predicate1([brit, _, Red, _, _, _]) :- Red \= red, !, fail.
predicate1(_).

而後來寫完的版本,裡頭使用了簡要的 pattern matching 方式來搜尋情況。我認為這種寫法,是所謂 Prolog-ish 的寫作, to code like a Prolog coder 。

解題過程中,稍微對於題目所寫的 “on the left of the" 和 “next to the" 有一些誤解,導致一時沒有產生唯一解。題目由此網頁取得: https://www.mathsisfun.com/logicpuzzle.html


我的程式執行結果如下圖。

擷取.PNG

廣告

About 黃耀賢 (Yau-Hsien Huang)

熱愛 Erlang ,並且有相關工作經驗。喜歡程式語言。喜歡邏輯。目前用 Python 工作。
本篇發表於 Problem, Prolog, Uncategorized。將永久鏈結加入書籤。