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?

¿Fue útil?

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
scroll top