Wszelkie przetwarzanie danych w Prologu występuje w ramach operacji uzgodnienia. Polega na tworzeniu struktur, budowaniu ich przy pomocy zmian wskaźników. Efektem jest skonstruowana struktura.
Powiedzmy, że chcemy stworzyć strukturę, która przedstawia zamówienie w pewnej firmie. Dysponujemy numerem zamówienia, datą, nazwami klientów. <rys2>
Złożona struktura jest tworzona przez zdefiniowanie funktora, który transformuje zbiór iloczynu kartezjańskiego prostych danych w zbiór struktur. Przykładowym zamówieniem jest ZAM(I217, 20080312, 'XYZ').
Przypuśćmy, że mamy teraz w zamówieniu zagnieżdżony funktor zwracający datę: Zam(l217, data(2008,03,12), 'XYZ'). Chcemy zdobyć zamówienia z zeszłego miesiąca. Jak to robimy?
zamow_miesiac(zam(Nr, data(D,M,R), Klient), M)
W zależności, co chcemy zrobić, możemy zastosować zdefiniowany selektor po numerze miesiąca w różny sposób.
?_zamow_miesiac(zam(l217, data(17,03,2008), 'XYZ'), M) - otrzymanie miesiąca danego zamówienia, jeżeli zamówienie jest zmienną związaną.
Jeżeli miesiąc jest zmienną związaną, zaś zamówienie nie jest, to dostajemy listę zamówień z określonego miesiąca.
Dla funktorów występujących w tym samym miejscu w wywołaniu, kontrola typu w czasie wywołania polega na porównaniu funktorów celu i reguły. Jeżeli funktory są identyczne, następuje uzgodnienie. Inaczej otrzymujemy błąd. Procedura uzgadniania jest rekurencyjna, możemy dowolnie zagnieżdżać uzgodnienie.
Jeżeli w celu występuje zmienna, w regule pewien funktor, to zmienna zostaje związana z wynikiem działania funktora.
[ Po prostu uzgadnianie w Prologu - dokładnie tak, jak na wykładzie z IW ]
Domyślnym funktorem dla pary obiektów w Prolog jestNp. wyrażenie: ,(a,b) reprezentuje parę obiektów. Listę można również zdefiniować jako parę: .(a,[j) dla listy jednoelementowej, dla większej liczby elementów, np. dla dwóch: .(a,.(b,[])) . Każda lista jest widoczna jako para, której pierwszym elementem jest pewien obiekt, a drugim inna lista.
Porównanie funktorów dla par odbywa się zgodnie ze schematem:
.(XI, Rl) .(a, ,(b,[]))
Taka wewnętrzna reprezentacja powoduje, że lista musi być "rozbierana" od przodu.
MEMBER(X,L):- L=[X|R]. MEMBER(X,[X|R]). MEMBER(X,[X|J)
Ostatnia konstrukcja tego pierwszego zdania zawiera symbol specjalny oznaczający