Prolog倒数规则

Prolog倒数规则,prolog,Prolog,我相信这是相当基本的,虽然我在这里无法通过搜索找到它 我在学习prolog,发现了一个规则示例:(表示邻接) 现在,这让我觉得有点浪费,因为我们知道邻接是一种互惠关系,它应该足够定义每对中的一个,然后定义: adj(X, Y) :- adj(Y, X), !. 我理解为什么这种简单化的尝试不起作用;如果X和Y不相邻,它将落入一个无限循环。但是,我还没有完全弄清楚如何修改它,使其在所有情况下都能工作。您应该引入一个替代名称,并使用该名称编写逻辑代码。比如说 adj(1, 2). adj(

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

我在学习prolog,发现了一个规则示例:(表示邻接)

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

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

我理解为什么这种简单化的尝试不起作用;如果X和Y不相邻,它将落入一个无限循环。但是,我还没有完全弄清楚如何修改它,使其在所有情况下都能工作。

您应该引入一个替代名称,并使用该名称编写逻辑代码。比如说

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

is_adj(X,Y) :- adj(X,Y) ; adj(Y,X).
adj(1, 2).
adj(1, 3).
adj(3, 4).

is_adj(X,Y) :- adj(X,Y) ; adj(Y,X).