Exerciții Laboratorul 3, Exercițiul 1

vars/2 — mulțimea variabilelor unei formule

Definiți un predicat vars/2 care este adevărat exact atunci când primul argument este o formulă, iar al doilea argument este lista care reprezintă mulțimea variabilelor care apar în ea.

?- vars(imp(non(a), imp(a, b)), S).
S = [a, b]

Utilizați, pentru implementare, predicatul predefinit atom/1, respectiv predicatul union/3, care calculează reuniunea a două liste, considerate ca fiind mulțimi.

Reamintim reprezentarea formulelor: non/1, and/2, or/2, imp/2.

Te-ai blocat?
editor soluție
?-
Tastează o interogare (ex. father_of(sandra, X).) și apasă Enter — sau apasă pe un caz de test de mai jos.
Cazuri de test (3 — apasă pe unul ca să îl rulezi, sau Verifică pentru toate)
?
vars(imp(non(a), imp(a, b)), S). așteptat: S = [a,b]
?
vars(a, S). așteptat: S = [a]
?
vars(and(p, or(q, non(p))), S). așteptat: S = [p,q]