Prolog Programlama BİRLEŞİM VE ARAMA (UNIFICATION & SEARCH) Birleşim (Unification) Geçtiğimiz derste verdiğimiz örnekler içerisinde; kedi(X) şeklinde bir sorgulama yapıldığında bu sorgunun kedi(garfield) ile birleşerek X değişkeninin garfield atom değerine sahip olabildiğini görmüştük. Prolog’un Temel Yapıları Temel Yapılar Terimler Değişkenler Sabitler Örn: ayşe Atomlar öğrenci Sayılar 15 33.8 Önermeler Bileşik Terimler Örn: öğrenci(ayşe). Örn: X _ Gerçekler Örn: öğrenci(ayşe). Kurallar Sorgular Örn: ?gelecek(ayşe). Örn: gelecek(X):öğrenci(X). Birleşim İşlemi • İki Prolog teriminin birleşim gerçekleştirebilmesi için: • Ya bu terimler birbirinin aynı olmalıdır, • Ya da bu terimler içlerinde başka terimlerin değerlerini aldığında iki terimin aynılığını sağlayacak değişkenler barındırmalıdır. Birleşim İşlemi • Buna göre: • garfield ile garfield • 42 ile 42 • kedi(garfield) ile kedi(garfield) birleşebilmektedir. • Bu aynı zamanda: • garfield ile tom ya da • kedi(garfield) ile kedi(tom) terimlerinin birleşemeyeceği anlamına gelir. Birleşim İşlemi • Aşağıdaki terimler için durum ne olur? • tom ile X • kedi(Z) ile kedi(tom) • seviyor(ali,X) ile seviyor(X,ayşe) Değer Atama (Instantiation) Prolog’da iki terim birleştirilirken gerekli tüm işlemler yerine getirilirek birleşim işleminden sonra bu sağlanır. terimlerin birbirine eşit olması Formal Definition 1. If T1 and T2 are constants, then T1 and T2 unify if they are the same atom, or the same number 2. If T1 is a variable and T2 is any type of term, then T1 and T2 unify, and T1 is instantiated to T2 (and vice versa) 3. If T1 and T2 are complex terms then they unify if: 1. They have the same functor and arity, and 2. all their corresponding arguments unify, and 3. the variable instantiations are compatible. =/2 ?- ali = ali. yes ?- ali = hasan. no ?- =/2 ?- ali = X. X=ali yes ?- Prolog Nasıl Bir Yanıt Verir? ?- X=ali, X=hasan. Bileşik Terimlerde Birleşim ?- k(s(g),Y) = k(X,t(k)). X=s(g) Y=t(k) yes ?- Bileşik Terimlerde Birleşim ?- k(s(g),t(k)) = k(X,t(Y)). X=s(g) Y=k yes ?- ?- seviyor(X,X) = seviyor(ali,ayşe). no ?- dikey(çizgi(nokta(X,Y), nokta(X,Z))). yatay(çizgi(nokta(X,Y), nokta(Z,Y))). ?dikey(çizgi(nokta(1,1),nokta(1,3))). yes ?dikey(çizgi(nokta(1,1),nokta(3,2))). no ?- dikey(çizgi(nokta(X,Y), nokta(X,Z))). yatay(çizgi(nokta(X,Y), nokta(Z,Y))). ?- yatay(çizgi(nokta(1,1),nokta(1,Y))). Y = 1; no ?- dikey(çizgi(nokta(X,Y), nokta(X,Z))). yatay(çizgi(nokta(X,Y), nokta(Z,Y))). ?- yatay(çizgi(nokta(2,3),Nokta)). Nokta = nokta(_554,3); no ?- f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). ?- k(Y). f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). ?- k(Y). Y=X ?- f(X), g(X), h(X). f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). ?- k(Y). Y=X ?- f(X), g(X), h(X). f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). Y=X ?- f(X), g(X), h(X). X=a ?- g(a), h(a). ?- k(Y). f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). Y=X ?- f(X), g(X), h(X). X=a ?- g(a), h(a). ?- k(Y). ?- h(a). f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). Y=X ?- f(X), g(X), h(X). X=a ?- g(a), h(a). ?- k(Y). ?- h(a). f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). Y=X ?- f(X), g(X), h(X). X=a ?- g(a), h(a). ?- k(Y). ?- h(a). X=b ?- g(b), h(b). f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). Y=X ?- f(X), g(X), h(X). X=a X=b ?- g(a), h(a). ?- g(b), h(b). ?- h(a). ?- h(b). ?- k(Y). f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). Y=X ?- f(X), g(X), h(X). X=a X=b ?- g(a), h(a). ?- g(b), h(b). ?- h(a). ?- h(b). ?- k(Y). Y=b f(a). f(b). g(a). g(b). h(b). k(X):- f(X), g(X), h(X). ?- k(Y). Y=X ?- f(X), g(X), h(X). X=a X=b ?- g(a), h(a). ?- g(b), h(b). ?- h(a). ?- h(b). ?- k(Y). Y=b; no ?-