Document

advertisement
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
?-
Download