这是我的问题:一个小俱乐部决定建立一个电话网络,用于在其成员之间发送紧急信息。同意以下安排:安妮可以给比尔和玛丽打电话。比尔可以给汤姆和苏打电话。汤姆可以给丽兹和弗兰克打电话。如有必要,Liz 也可以给 Frank 打电话。
将此信息表达为形式的七个 Prolog 事实
can_phone(anne,bill)
。现在为谓词 message_route 编写递归 Prolog 规则,message_route(A,B,R)
如果可以使用俱乐部的电话安排,通过 list 中的人员A
将消息传递给B
routed ,则为 true。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
,我已经进行了实验并进行了这项工作,这使我可以完成问题的第二部分,而无需将列表限制为指定的人员列表 ( R
)。
message_route(A,B) :- can_phone(A,B).
message_route(A,B) :- can_phone(A,X), message_route(X,B).
我不明白如何在我的回答中实现这个列表。