Как утверждать новое правило от пользовательского ввода (Prolog)
-
26-10-2019 - |
Вопрос
Я хочу принять ввод пользователей, т.е. [garfield, hates, blacky]
.
hates/2
в настоящее время не существует.
В моей базе данных,
process:-
read(Input_List),
add_rule(Input_List).
add_rule([X, Predicate, Y]):-
assertz(Predicate(X, Y)).
Но это не работает. Можно ли использовать переменную в качестве предиката и факты? Или есть другой способ достичь этого?
Решение
Вы можете использовать (=..)/2
оператор позвонил Университетский оператор :
add_rule(X, Predicate, Y) :-
Fact =.. [Predicate, X, Y],
assertz(Fact).
Применение :
?- add_rule(garfield, hates, blacky).
true.
?- hates(garfield, blacky).
true.
Не связан с StackOverflow