これが私の質問です。ある小さなクラブが、メンバー間の緊急メッセージ用に電話ネットワークを設定することにしました。次の取り決めが合意されました。アンはビルとメアリーの両方に電話をかけることができます。ビルはトムとスーの両方に電話をかけることができます。トムはリズとフランクの両方に電話をかけることができます。リズは必要に応じてフランクに電話することもできます。
この情報を 7 つのプロローグ ファクトとして表現します
can_phone(anne,bill)
。ここで、述語 message_route の再帰的な Prolog ルールを記述します。これは、クラブの電話手配を使用して、list 内の人々を介して routedにメッセージを渡すことができるmessage_route(A,B,R)
場合に trueになります。たとえば、
true になります (電話できる人、電話できる人、電話できる人、電話できる人のため)。A
B
R
message_route(anne,frank,[anne,bill,tom,liz,frank])
anne
bill
tom
liz
frank
私はこれまでのところこれを持っています:
can_phone(anne,bill).
can_phone(anne,mary).
can_phone(bill,tom).
can_phone(bill,sue).
can_phone(tom,liz).
can_phone(tom,frank).
can_phone(liz,frank).
私のmessage_route
場合、私は実験し、リストを特定の人のリストに制限する必要なしに質問の2番目の部分を完了することができるように、この作業を行いました(R
)。
message_route(A,B) :- can_phone(A,B).
message_route(A,B) :- can_phone(A,X), message_route(X,B).
私の回答でこのリストを実装する方法がわかりません。