Domanda

voglio accettare l'input degli utenti, vale a dire [garfield, hates, blacky]. hates/2 non esiste attualmente.

Nel mio database,

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

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

Ma questo non funziona. E 'possibile utilizzare una variabile come predicato, e fatti? O c'è qualche altro modo per raggiungere questo?

È stato utile?

Soluzione

È possibile utilizzare l'operatore (=..)/2 chiamato univ operator :

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

Utilizzo:

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

?- hates(garfield, blacky).
true.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top