Ciao ragazzi,
qualcuno potrebbe aiutarmi con questo esercizio in Prolog?
Scrivere un predicato Prolog deduci(R,B,B1) che riceva in input una lista di regole R e una lista di fatti B, e che produca in output una nuova lista di fatti B1 ottenuta da B applicando tutte le regole di R fino al raggiungimento di un punto fisso. Ogni regola R viene espressa mediante un simbolo di funzione regola(Cs,D) in cui il primo argomento Cs è una lista di condizioni che, se verificate congiuntamente, rendono vero il secondo argomento D. Ad esempio:
? - deduci( [regola ([p(X), q(X)] , r(X) ) )] , [p(a), p(b), q(a)], B1).
X = a, B1 = [r(a), p(a), p(b), q(a)]
? - deduci( [regola ([p(X), q(X)] , r(X) ) )] , regola([r(Y)], q(b)), [p(a), p(b), q(a)], B1).
X = Y, Y=a, B1 = [q(b), r(a), p(a), p(b), q(a)]
Grazie mille!
|