2015-11-25 20 views
0

我需要從謂詞列表中刪除一個項目,但它不起作用。它對我來說仍然是真的,但該項目仍然存在。PROLOG撤回其不起作用

代碼:

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]). 
+2

請提供一個演示您的問題的[mcve]。從您目前提供的代碼中無法分辨發生了什麼。 – Steven

+0

確定重新發布即可看到所有變量。 – martur94

+0

我認爲你已經靜態定義了'doenca/1'。你應該在文件的頂部有一個': - 動態doenca/1.'行,對於我來說,你有'doenca(X)'和'retract(doenca([X,I] ))在同一個規則體內,這是不可能成功的。有更多的來源嗎? –

回答

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。

+1

我幾乎覺得像分號';'在Prolog代碼行尾應該被編輯器/ IDE強調爲錯誤。 –

+0

humm ..它不工作 – martur94