Мне нужно удалить элемент из списка предикатов, но это не работает. Он возвращает 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]).
doenca/1
статически. У вас должна быть строка:- dynamic doenca/1.
где-то в начале файла, и мне очень подозрительно, что у вас есть иdoenca(X)
, иretract(doenca([X,I]))
в одном и том же теле правила, что просто не может быть успешным. Есть еще источник? - person Daniel Lyons   schedule 25.11.2015