【发布时间】:2019-01-29 16:48:26
【问题描述】:
当推理电机被激活以进行必要的推理时,会生成一个无限循环。
规则和事实已根据我正在使用的元解释器的特定语法定义。
规则是一个五元组,其中第二个字段是规则的结果,而第三个字段是激活规则的条件。
循环是通过nextID这个词更新id(I1)引起的,我用这个来确保每次assert id都递增这是我的知识库:
规则:
rule(1,[gn(Name,Surname,I1),retract(nextID(I)),nextID(I1)],
and([person(Name,Surname),nextID(I),call_p(I1 is I+1),Name=='john']),1,1).
事实:
fact(1,nextID(0),1).
fact(2,person(john,black),1).
我应该如何修改规则以不创建无限循环?
【问题讨论】:
-
不,不是语法错误
-
nextID (0)是无效的语法。应该是nextID(0)。其他所有复合词都是一样的(Name == 'john'除外)。 -
在 Prolog 中编写复合项时,仿函数和左括号之间不能有空格。因此,例如,您想要
fact(1, nextID(0), 1).而不是fact (1, nextID (0), 1).但是由于您显然已经运行了此代码并遇到了循环,我想您在这里输入的方式与实际情况不同。 -
空格来自复制和粘贴,但我向你保证,在代码中没有。
-
然后空格会返回语法错误,而在我的情况下,语法是正确的,但问题正在执行中