这里是我的问题:
一个小俱乐部决定为其成员建立一个紧急信息电话网络。达成了以下安排:
Anne可以给Bill和Mary打电话。Bill可以给Tom和Sue打电话。Tom可以给Liz和Frank打电话。如果必要,Liz也可以给Frank打电话。
将此信息表示为七个Prolog事实的形式
到目前为止,我有这个:
我不明白如何在我的答案中实现这个列表。
将此信息表示为七个Prolog事实的形式
can_phone(anne,bill)
。现在编写递归的Prolog规则,用于谓词message_route,使得当A可以通过列表R中的人使用俱乐部的电话安排向B传递消息时,message_route(A,B,R)
为真。例如,message_route(anne,frank,[anne,bill,tom,liz,frank])
将为真(因为anne
可以给bill
打电话,who可以给tom
打电话,who可以给liz
打电话,who可以给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
,我进行了实验并使其正常工作,这使我能够完成问题的第二部分,而无需将列表限制为特定的人员(R
)。
message_route(A,B) :- can_phone(A,B).
message_route(A,B) :- can_phone(A,X), message_route(X,B).
我不明白如何在我的答案中实现这个列表。