Prolog互惠规则

时间:2013-03-20 21:55:44

标签: prolog

我确信这是相当基本的,虽然我在这里找不到它。

我正在学习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不相邻,它会陷入无限循环。但是,我还没有弄清楚如何修改它以适用于所有情况。

1 个答案:

答案 0 :(得分:3)

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

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

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