gpt4 book ai didi

序言:对称规则

转载 作者:行者123 更新时间:2023-12-01 11:30:03 28 4
gpt4 key购买 nike

我正在关注一个要求定义对称关系的 Prolog 教程。

例如,假设您在知识库中有以下事实:

colleague(john,bob).

您还希望 colleague(bob,john) 是真实的,对于所有同事的事实也是如此。

教程说使用以下规则......
colleague(X,Y) :- colleague(Y,X).

但是当我在使用以下查询时这样做会出现问题......
| ? - colleague(john,X).
X = bob ? ;
X = bob ? ;
X = bob ? ;
X = bob ? ;
...

| ? - colleague(bob,X).
X = john ? ;
X = john ? ;
X = john ? ;
X = john ? ;
...

我想我明白为什么会这样 - 规则是无限递归的?但是我在修复它时遇到了问题。这就是我要的...
| ? - colleague(john,X).
X = bob ? ;
no

| ? - colleague(bob,X).
X = john ? ;
no

我在这里查看了非常相似问题的其他答案,但无法对其进行排序。我试过在规则的末尾使用 cut ,这似乎表现更好,但仍然重复一次,因为知识库中包含的事实:
colleague(X,Y) :- colleague(Y,X), !.

_
| ? - colleague(john,X).
X = bob ? ;
X = bob ? ;
no

| ? - colleague(bob,X).
X = john ? ;
no

任何想法我做错了什么?

最佳答案

我认为您必须将规则与事实区分开来。例如:

known_colleague(bob,john).
colleague(X,Y) :- known_colleague(X,Y);known_colleague(Y,X).

关于序言:对称规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32909397/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com