我必须在 Prolog 中创建家庭关系来完成一项作业,我偶然发现了这个问题。
man(john).
woman(lisa).
married(john,lisa).
?- married(john,X).
X = lisa.
?- married(X,john).
false.
Run Code Online (Sandbox Code Playgroud)
如何使这个谓词以两种方式起作用?如果约翰嫁给了丽莎,那么丽莎也嫁给了约翰。
对于事实,我只能使用性别、父母和已婚:
man(john).
woman(lisa).
parent(john,steve).
parent(lisa,steve).
married(john,lisa).
Run Code Online (Sandbox Code Playgroud)
这个要求使得这个解决方案对我来说无法使用。我不能只添加关系,wife(lisa,john).因为我必须自己定义妻子、丈夫等。
wife(X,Y) :- woman(X),married(X,Y).
Run Code Online (Sandbox Code Playgroud) 如果我有以下谓词门,声明两个房间之间有一扇门:
door(office, hall).
door(kitchen, office).
door(hall, "dining room").
door(kitchen, cellar).
door("dining room", kitchen).
Run Code Online (Sandbox Code Playgroud)
并且谓词门户宣布门的状态:
doorstate(hall, office, closed).
doorstate(hall, "dining room", opened).
doorstate("dining room", kitchen, opened).
doorstate(kitchen, office, opened).
doorstate(kitchen, cellar, opened).
Run Code Online (Sandbox Code Playgroud)
如果两个房间之间的所有门都打开,那么两个房间之间就有一条通道.
如何编写规则来发现两个房间之间是否存在这样的路径?