【问题标题】:Prolog Reciprocal RuleProlog 倒数规则
【发布时间】:2013-03-21 06:39:53
【问题描述】:

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

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

【问题讨论】:

    标签: prolog


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多