Как отстаивать новое правило из пользовательского ввода (PROLOG) - PullRequest
1 голос
/ 30 ноября 2011

Я хочу принять ввод пользователя, т. Е. [garfield, hates, blacky]. hates/2 в настоящее время не существует.

В моей базе данных,

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

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

Но это не работает. Можно ли использовать переменную как предикат, так и факты? Или есть другой способ добиться этого?

1 Ответ

4 голосов
/ 30 ноября 2011

Вы можете использовать оператор (=..)/2 с именем оператор univ :

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

Использование:

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

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