Dynamic PROLOG收回它不工作

Dynamic PROLOG收回它不工作,dynamic,prolog,prolog-assert,Dynamic,Prolog,Prolog Assert,我需要从谓词列表中删除一项,但它不起作用。对我来说,它返回真值,但项目仍然存在 代码: 第一条中的低级问题: ... format('~Doença: ~w ~n Sintoma: ~w ~n',[X]), retract(doenca([X,_])); write(' '). 特别是“;”看起来可疑。我想你想要的是 forall(retract(doenca([X,Sintoma])), format('~Doença: ~w ~n Sintoma: ~w ~n',[X,Si

我需要从谓词列表中删除一项,但它不起作用。对我来说,它返回真值,但项目仍然存在

代码:


第一条中的低级问题:

...
format('~Doença: ~w ~n Sintoma: ~w ~n',[X]),
retract(doenca([X,_]));
write('  ').
特别是“;”看起来可疑。我想你想要的是

forall(retract(doenca([X,Sintoma])),
       format('~Doença: ~w ~n Sintoma: ~w ~n',[X,Sintoma])),
write('  ').

此外,我会考虑更好的设计来存储DOUNC/ 2,而不是DOUNCa/1。< /P>请提供一个演示您的问题的方法。根据您当前提供的代码,无法判断发生了什么。好的,重新发布的代码现在可以看到所有变量。在我看来,您可能已经静态定义了doenca/1。你应该有一个:-动态doenca/1。在文件顶部的某个地方,我很怀疑doencaX和retractdoenca[X,I]在同一个规则体中,这是不可能成功的。还有更多的来源吗?我几乎感觉像分号;在Prolog代码行的末尾,编辑器/IDE应突出显示为错误。

forall(retract(doenca([X,Sintoma])),
       format('~Doença: ~w ~n Sintoma: ~w ~n',[X,Sintoma])),
write('  ').