Frage

Ich möchte die Eingabe der Benutzer akzeptieren, dh [garfield, hates, blacky]. hates/2 existiert derzeit nicht.

In meiner Datenbank,

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

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

Aber das funktioniert nicht. Ist es möglich, eine Variable als Prädikat und Fakten zu verwenden? Oder gibt es eine andere Möglichkeit, dies zu erreichen?

War es hilfreich?

Lösung

Du kannst den ... benutzen (=..)/2 Bediener angerufen UNIV -Operator :

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

Verwendungszweck :

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

?- hates(garfield, blacky).
true.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top