1

我敢肯定这是相当基本的,虽然我无法通过搜索在这里找到它。

我正在学习prolog,并找到了一个带有规则的示例:(表示邻接)

adj(1, 2).    adj(2, 1).
adj(1, 3).    adj(3, 1).
adj(3, 4).    adj(4, 3).

现在,这让我觉得有点浪费,因为我们知道邻接是一种互惠关系,只定义每一对中的一个就足够了,然后定义:

adj(X, Y) :-
    adj(Y, X), !.

我理解为什么这种简单化的尝试行不通;如果 X 和 Y 不相邻,它会陷入无限循环。但是,我还没有完全弄清楚如何修改它以在所有情况下工作。

4

1 回答 1

3

您应该引入一个替代名称并使用它来编码您的逻辑。例如

adj(1, 2).
adj(1, 3).
adj(3, 4).

is_adj(X,Y) :- adj(X,Y) ; adj(Y,X).
于 2013-03-20T22:39:53.320 回答