Comment affirmer la nouvelle règle de l'entrée utilisateur (Prolog)
-
26-10-2019 - |
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?
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