Как утверждать новое правило от пользовательского ввода (Prolog)

StackOverflow https://stackoverflow.com/questions/8326111

Вопрос

Я хочу принять ввод пользователей, т.е. [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.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top