相关疑难解决方法(0)

Prolog 双向谓词

我必须在 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)

predicate prolog bidirectional

5
推荐指数
1
解决办法
1593
查看次数

Prolog路径发现

如果我有以下谓词,声明两个房间之间有一扇门:

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)

如果两个房间之间的所有门都打开,那么两个房间之间就有一条通道.

如何编写规则来发现两个房间之间是否存在这样的路径?

prolog

4
推荐指数
1
解决办法
4628
查看次数

标签 统计

prolog ×2

bidirectional ×1

predicate ×1