Lo que ahora compruebo es que X (Y) no es un hecho aceptado en mi pequeña base de datos. Como X (Y) devuelve falso, intentará afirmarlo. (Sé que esto presenta problemas cuando X es una regla y no un hecho)¿Puedo usar variables con assert/1?
ifNotAdd(X,Y):-
not(call(X,Y)),
!,
assert(X(Y)).
Por ejemplo, digamos que este hecho está en la base de datos
mammal(dolphin).
te pido ifNotAdd (mamífero, elefante)
Quiero que vea eso? mamífero (elefante). es falso y luego afirma mamífero (elefante).
Obviamente el "assert (X (Y))". línea está mal, pero ¿con qué lo reemplazo? Estoy rastreando la documentación y los foros de Prolog para obtener la respuesta, pero hasta ahora no tuve suerte. También estoy tratando de escribir algo que lo haga por mi cuenta.
EDIT Necesito editar la base de datos para tener una base de datos dinámica con la que el usuario pueda interactuar. Estoy construyendo una máquina de argumentos y necesito permitir que el usuario le diga al sistema que "conocen el hecho con seguridad" para que el sistema pueda manejar el conocimiento fuera de su dominio.
En la línea de http://en.wikipedia.org/wiki/Reason_maintenance
Cheers,
Ah, ja, usualmente uso no() solo para facilitar la lectura al hackearlo la primera vez aunque esté obsoleto. Debería haber cambiado eso para la publicación. De todos modos, eso es exactamente lo que he estado buscando. No he usado prolog desde la clase en la que lo aprendí hace un tiempo y estoy volviendo a aprender. Olvidé por completo '= ../2', así que eso resuelve eso. Aclararé el programa anterior. –
acerca de su edición: parece una razón legítima para manipular la base de datos:] – m09