Как отстаивать новое правило из пользовательского ввода (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.
Другие вопросы по тегам