AI クラスのプロローグの宿題で助けが必要です。問題は、アインシュタインのパズルのプロローグ コードを書くことです。自分で書き留める方法は知っていますが、宿題にはいくつかの制約があります。
there are 5 houses
the Englishman lives in the red house
the Spaniard owns the dog
coffee is drunk in the green house
the Ukrainian drinks tea
the green house is immediately to the right of the ivory house
the Old Gold smoker owns snails
Kools are smoked in the yellow house
milk is drunk in the middle house
the Norwegian lives in the first house
the man who smokes Chesterelds lives in the house next to the man with the fox
3 Kools are smoked in the house next to the house where the horse is kept
the Lucky Strike smoker drinks orange juice
the Japanese smokes Parliaments
the Norwegian lives next to the blue house
家は順序付けられているため、リストを使用する必要があることはわかっています。家の特徴もリストを使いたかったのですが、ここで問題が発生しました。
匿名変数house(englishman, red, _, _, _)を使用するつもりでした。しかし、宿題のためにそれを解釈する方法がわかりません。
制約は次のとおりです。次の二項述語記号を使用する必要があります。
owns(N,Pet)
smokes(N, Cigarette).
drinks(N, Drink).
それ以外は、任意の数の述語を自由に使用できます。
これが事実を初期化する方法ですが、この場合のルールの作成方法はわかりません
next_to(X,Y) :- right_of(X,Y); right_of(Y,X).
owns(spaniard, dog).
drinks(ukrainian, tea).
smokes(japanese, parliaments).
right_of(ivory, green).
lives(englishman, red).
owns(X, snail) :- smokes(X, old_gold).
smokes(X, kools) :- owns(X, yellow).
smokes(X, lucky_strike) :- drinks(X, orange_juice).
drinks(X, coffee) :- owns(X, green_house).
少しは理にかなっていますが、同時に完全に間違っているように見えます。これではどこにも行けないと思います。:/