Un procesor de limbaj natural elimina semnele de punctuatie si grupeaza
cuvintele dintr-o propozitie in structuri sintactice delimitate de paranteze,
ca in exemplul urmator:

((Masina (pe care (o vezi (linga Mihai)))) (este (masina (pe care (Mihai a cumparat-o)))))

O astfel de descriere poate avea si variabile. Variabilele sunt precedate de
semnul intrebarii si tin locul unui cuvant sau unei structuri. O structura este delimitata
de paranteze si contine in interior zero sau un numar egal de paranteze dreapta si stanga.

Daca apare de mai multe ori in aceeasi expresie, variabila trebuie sa tina locul la acelasi
cuvant sau structura. In exemplul de mai jos, ?ce tine locul cuvantului "masina" iar ?cine tine locul cuvantului "Mihai". 

((?ce (pe care (o vezi (linga ?cine)))) (este (?ce (pe care (?cine a cumparat-o))))))

Sa se scrie un program care primeste doua propozitii structurate prin paranteze
si verifica daca cele doua propozitii pot fi unificate.

Unificarea a doua propozitii este operatia prin care se verifica daca ele sunt identice, atat prin cuvinte cat si prin structura.

De exemplu, urmatoarele doua propozitii unifica:

(Afara (ploua (torential)))
(Afara (ploua (torential)))

iar urmatoarele nu:

(Afara (ploua azi (torential)))
(Afara (ploua (torential)))

Deoarece nu au aceeasi structura, nici urmatoarele doua nu unifica:

(Afara (ploua (torential)))
(Afara (ploua torential))

Daca propozitiile au variabile care apar de mai multe ori, acestea trebuie sa tina locul la acelasi cuvant sau structura, ca in exemplele de mai jos:

Propozitiile:

((Masina (pe care (o vezi (linga Mihai)))) (este (masina (pe care (Mihai a cumparat-o)))))
((?ce (pe care (o vezi (linga ?cine)))) (este (?ce (pe care (?cine a cumparat-o))))))

unifica prin faptul ca variabilele ?cine si ?ce tin locul lui Mihai si masina

Propozitiile de mai jos nu unifica deoarece variabila ?ce nu corespunde la
aceeasi valoare: 

((Masina (pe care (o vezi (linga Mihai)))) (este (masina (pe care (Mihai a cumparat-o)))))
((?ce (pe care (o vezi (linga ?cine)))) (?ce (?ce (pe care (?cine a cumparat-o)))))

Observatii:

1. Nu conteaza daca o litera este mica sau mare. De exemplu, "masina" si "Masina" sunt considerate identice.

2. Cuvintele si propozitiile sunt separate de unul sau mai multe spatii, linie noua ("CR"),  sau de paranteze.

3. Variabilele pot tine locul la structuri care contin, la randul lor, variabile:

(?subiect ?predicat)
((?ce (pe care (o vezi (linga ?cine)))) (este (?ce (pe care (?cine a cumparat-o)))))

?predicat (este (?ce (pe care (?cine a cumparat-o))))
?subiect (?ce (pe care (o vezi (linga ?cine))))



Programul primeste un fisier cu doua propozitii ca mai sus si intoarce:

NU daca ele nu unifica;
DA daca ele unifica si, pe liniile urmatoare, lista perechilor variabila - valoare, daca sunt variabile, ca in exemplele urmatoare:

--------------- Fisier intrare ------------------
(Afara (ploua (torential)))
(Afara (ploua (torential)))
--------------- Rezultat ------------------
DA
---------------------------------------------

--------------Fisier intrare------------------------------------------------------------
((Masina (pe care (o vezi (linga Mihai)))) (este (masina (pe care (Mihai a cumparat-o)))))
((?ce (pe care (o vezi (linga ?cine)))) (?ce (?ce (pe care (?cine a cumparat-o)))))
------------- Rezultat------------------------------------------------------------------
NU
----------------------------------------------------------------------------------------

------------ Fisier intrare-------------------------------------------------------------
((Masina (pe care (o vezi (linga Mihai)))) (este (masina (pe care (Mihai a cumparat-o)))))
((?ce (pe care (o vezi (linga ?cine)))) (este (?ce (pe care (?cine a cumparat-o))))))
----------- Rezultat--------------------------------------------------------------------
DA
?ce masina
?cine Mihai
----------------------------------------------------------------------------------------
