all_a/1 și all_symb/2 — listă formată dintr-un singur simbol
Definiți un predicat all_a/1 care primește ca argument o listă și care verifică dacă argumentul său este format doar din a-uri. Scrieți și o formă generală, all_symb/2, care să verifice că toate elementele sunt egale cu un simbol dat. Ce tip de egalitate utilizați?
?- all_a([a, a, a, a]).
true
?- all_a([a, A, a, a]).
A = a
Hint: în varianta generală, folosește operatorul
=pentru a unificaHcuS— așa merge și cândHe variabilă (nu doar când e chiar simbolul respectiv).
Te-ai blocat?
editor
soluție
all_a([a]) :- !.
all_a([a | T]) :- all_a(T).
all_symb([S], S) :- !.
all_symb([H | T], S) :-
H = S,
all_symb(T, S).
?-
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)
?
all_a([a, a, a, a]).
așteptat: true
?
all_a([a, b, a]).
așteptat: false
?
all_symb([x, x, x], x).
așteptat: true