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