Question

Je veux accepter l'entrée des utilisateurs, à savoir [garfield, hates, blacky]. hates/2 n'existe pas actuellement.

Dans ma base de données,

process:-
    read(Input_List),
    add_rule(Input_List).

add_rule([X, Predicate, Y]):-
    assertz(Predicate(X, Y)).

Mais cela ne fonctionne pas. Est-il possible d'utiliser une variable comme prédicat, et les faits? Ou est-il un autre moyen d'y parvenir?

Était-ce utile?

La solution

Vous pouvez utiliser l'opérateur (=..)/2 appelé opérateur univ :

add_rule(X, Predicate, Y) :-
    Fact =.. [Predicate, X, Y],
    assertz(Fact).

Utilisation:

?- add_rule(garfield, hates, blacky).
true.

?- hates(garfield, blacky).
true.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top