【发布时间】:2015-11-25 02:51:47
【问题描述】:
我需要从谓词列表中删除一个项目,但它不起作用。它为我返回 true,但该项目仍然存在。
代码:
eliminar :- limpar,
write('\n*** DELETAR ***\n'),
write('O que deseja deletar ?\n'),
pegarString(X),
doenca(X),
format('~Doença: ~w ~n Sintoma: ~w ~n',[X]),
retract(doenca([X,_]));
write(' ').
pegarString(S) :-
read_line_to_codes(user_input,C),
name(S,C).
perguntadd(X) :- limpar,
write('\n*** ADICIONAR ***\n'),
write('\nDigite o nome da doença que deseja adicionar\n'),
pegarString(X).
adicionar(X) :-
format('Digite o sintoma da doença ~w?~n ',[X]),
pegarString(I),
assertz(doenca([X,I])),
format('~n~w foi adicionado aos registros!~n~n',[X]).
【问题讨论】:
-
请提供一个minimal reproducible example 来证明您的问题。从您当前提供的代码中无法判断发生了什么。
-
ok reissued 现在可以看到所有变量了。
-
在我看来,您可能已经静态定义了
doenca/1。您应该在文件顶部的某处有一个:- dynamic doenca/1.行,我非常怀疑您在同一个规则正文中同时拥有doenca(X)和retract(doenca([X,I])),这无法成功。还有更多来源吗?
标签: dynamic prolog prolog-assert