0

我需要从谓词列表中删除一个项目,但它不起作用。它对我来说返回 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]).
4

1 回答 1

0

第一条中的低级问题:

...
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('  ').

另外,我会考虑更好的设计来存储 doenca/2 而不是 doenca/1。

于 2015-11-25T07:58:25.367 回答