Cómo afirmar una nueva regla de la entrada del usuario (Prolog)
-
26-10-2019 - |
Pregunta
Quiero aceptar la entrada de los usuarios, es decir [garfield, hates, blacky]
.
hates/2
No existe actualmente.
En mi base de datos,
process:-
read(Input_List),
add_rule(Input_List).
add_rule([X, Predicate, Y]):-
assertz(Predicate(X, Y)).
Pero esto no funciona. ¿Es posible usar una variable como predicado y hechos? ¿O hay alguna otra forma de lograr esto?
Solución
Puedes usar el (=..)/2
operador llamado operador de la UNIV :
add_rule(X, Predicate, Y) :-
Fact =.. [Predicate, X, Y],
assertz(Fact).
Uso:
?- add_rule(garfield, hates, blacky).
true.
?- hates(garfield, blacky).
true.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow