Quello che ho ora controlla che X (Y) non è un fatto accettato nel mio piccolo DB. Poiché X (Y) restituisce false, tenterà di asserirlo. (Mi rendo conto che presenta dei problemi quando X è una regola e non un dato di fatto)Posso usare variabili con assert/1?
ifNotAdd(X,Y):-
not(call(X,Y)),
!,
assert(X(Y)).
Per esempio, diciamo che questo fatto è nel DB
mammal(dolphin).
chiedo ifNotAdd (mammifero, elefante).
Voglio vederlo? mammifero (elefante). è falso e quindi asserisce mammifero (elefante).
Ovviamente il "assert (X (Y))." la linea è sbagliata ma con cosa la sostituisco? Sto recuperando documentazione e forum prolog per la risposta ma senza fortuna finora. Sto anche cercando di scrivere qualcosa che lo farà da solo.
EDIT Ho bisogno di modificare il DB per avere un database dinamico con cui l'utente può interagire. Sto costruendo una macchina argomento e ho bisogno di consentire all'utente di dire al sistema che "conoscono il fatto per certo" in modo che il sistema possa gestire le conoscenze al di fuori del suo dominio.
In vena di http://en.wikipedia.org/wiki/Reason_maintenance
Cheers,
Ah ah, di solito non uso() solo per la leggibilità quando lo hackerò insieme per la prima volta anche se è deprecato. Dovrebbe averlo cambiato per il post. Ad ogni modo è esattamente quello che stavo cercando. Non ho usato prolog dal momento in cui l'ho imparato da un po 'di tempo fa e sto riapprendendo. Totalmente dimenticato '= ../2' in modo che risolva quello. Chiarirò il programma sopra. –
sulla tua modifica: sembra un valido motivo per manipolare il db:] – m09