6-prolog1
TRANSCRIPT
![Page 1: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/1.jpg)
Prolog1
M.Fatih Amasyalı
Web : http://www.ce.yildiz.edu.tr/myfile.php?id=14
E-mail : [email protected]
![Page 2: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/2.jpg)
2
• Prolog Programlarının özellikleri:
– PROgrammig in LOGic– Semboller üzerinde çalışma– Problemlerin çözümünü tanımlama yerine çıkarım yapma– Doğal dille düşünülen şeylerin kodlanması kolay– Gerçekler ve kurallardan oluşur.– Büyük küçük harfe duyarlıdır.
• Sabitler için Küçük harfler• Değişkenler için Büyük harfler
– Program çıktıları çok sade– Prolog’da olmayanlar
• For döngüleri• Repeat While döngüleri• IF..THEN yapısı• Goto komutu• Diziler• Yukarıdakiler öz yinelemeli fonksiyonlarla sağlanır
![Page 3: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/3.jpg)
3
Dekleratif Programlama
• Prolog Dekleratif programlama dili • Prosedürel programlamada bilgisayara adım
adım ne yapması gerektiğini kodlarız. (Ör: C, Pascal, Java vs.)
• Dekleratif programlamada bir durum tanımlanır. Bu tanıma göre yorumlayıcı yada derleyici bir çözüm üretir.
• Prolog – bir cümlenin doğru / yanlış olduğunu – cümle içinde değişken(ler) varsa cümlenin doğru
olması için o değişken(ler)in değer(ler)inin ne olması gerektiğini söyler.
![Page 4: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/4.jpg)
4
PROLOG MEKANİZMALARI
• Şablon Eşleme
• Otomatik geriye iz sürme
![Page 5: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/5.jpg)
5
Örnek : Aile Ağacı
p am to m
b o b liz
an n p at
jim
![Page 6: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/6.jpg)
6
İlişkileri gerçek(fact)lerle tanımlama
• “Tom, Bob’un ebeveynidir” gerçeğinin prolog’da ifadesi :
parent(tom, bob).
– parent: ilişkinin ismi– tom ve bob: ilişkinin argümanları
![Page 7: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/7.jpg)
7
Aile Ağacı• Tüm aile ağacını aşağıdaki Prolog
ifadeleriyle tanımlarız:parent(pam, bob).
parent(tom, bob).
parent(tom, liz).
parent(bob, ann).
parent(bob, pat).
parent(pat,jim).
p am to m
b o b liz
an n p at
jim
![Page 8: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/8.jpg)
8
Prolog Sorguları
• ?- iliski(a,b).– a ve b arasında iliski adlı ilişki var mı?– cevap YES yada NO
• ?- iliski(A,b).– b ile iliski adlı ilişkiyi doğrulayan A lar
nelerdir?– cevap A lar varsa A lar
yoksa NO
![Page 9: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/9.jpg)
9
İlişkileri sorgulamak-1• Bob, Pat’in ebeveyni mi?
?- parent(bob, pat).
Prolog’un cevabı: yes
• Tom, Ben’in ebeveyni mi? :?- parent(tom, ben).
Prolog’un cevabı: no
![Page 10: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/10.jpg)
10
İlişkileri sorgulamak-2• Liz’in ebeveyni kimdir?
?- ebeveyn(Kim, liz).Prolog’un cevabı : Kim = tom
• Bob’un çocukları kimlerdir??- ebeveyn(bob, Cocuk).Prolog’un cevabı :
Cocuk = ann ; Cocuk = pat ;no
![Page 11: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/11.jpg)
11
İlişkileri sorgulamak-3
• Kimler kimlerin çocuğudur? ?- ebeveyn (Ebeveyn, Cocuk).
Ebeveyn = pam
Cocuk = bob;
Ebeveyn = tom
Cocuk = bob;
Ebeveyn = tom
Cocuk = liz;
…
• Çözümler listesini yarıda kesmek için enter
• Devam ettirmek için ;
![Page 12: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/12.jpg)
12
• Jim’in büyük ebeveyni (grandparent) kimdir?
• Bilgi tabanımızda büyük ebeveyn diye bir ilişki tanımlı değil.
• Büyük ebeveyn ilişkisi iki ebeveyn ilişkisinin ‘ve’ lenmesiyle elde edilebilir.
?- parent(Y, jim), parent(X, Y).X=bobY=pat
İlişkileri sorgulamak-4
X
Y
jim
pa re n t
pa re n t
g ra n dpa re n t
jim’in ebeveynine Y dersek, jim’in ebeveynine Y dersek,
Y’nin ebeveyni jim’in büyük ebeveyni (X) dir.Y’nin ebeveyni jim’in büyük ebeveyni (X) dir.
![Page 13: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/13.jpg)
13
İlişkileri sorgulamak-5• Torun ilişkisi de benzer
biçimde tanımlanabilir.– tom, X’in ebeveyni, – X, Y’nin ebeveyni ise – Y, tom’un torunudur.
?- parent(tom,X), parent(X, Y).
X=bob
Y=ann;
X=bob
Y=pat;
no
to m
X
Y
pa re n t
pa re n t
g ra n dch ildre n
![Page 14: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/14.jpg)
14
İlişkileri sorgulamak-6• Ann ve pat’in ortak ebeveyni var mı?
?- parent(Ebeveyn, ann), parent(Ebeveyn, pat).
Ebeveyn=bob
![Page 15: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/15.jpg)
15
Çocuk ilişkisi
p am to m
b o b liz
an n p at
jim
parent(pam, bob).parent(pam, bob).parent(tom, bob).parent(tom, bob).parent(tom, liz).parent(tom, liz).parent(bob, ann).parent(bob, ann).parent(bob, pat).parent(bob, pat).parent(pat,jim).parent(pat,jim).offspring(bob, pam).offspring(bob, pam).offspring(bob, tom).offspring(bob, tom).offspring(liz, tom).offspring(liz, tom).offspring(ann, bob).offspring(ann, bob).offspring(pat, bob).offspring(pat, bob).offspring(jim, pat).offspring(jim, pat).
![Page 16: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/16.jpg)
16
Çocuk kuralıo f f s prin g
X
Y
pa re n t
parent(pam, bob).parent(pam, bob).parent(tom, bob).parent(tom, bob).parent(tom, liz).parent(tom, liz).parent(bob, ann).parent(bob, ann).parent(bob, pat).parent(bob, pat).parent(pat,jim).parent(pat,jim).
offspring(bob, offspring(bob, pam).pam).offspring(bob, offspring(bob, tom).tom).offspring(liz, tom).offspring(liz, tom).offspring(ann, offspring(ann, bob).bob).offspring(pat, offspring(pat, bob).bob).offspring(jim, offspring(jim, pat).pat).
parent(pam, bob).parent(pam, bob).parent(tom, bob).parent(tom, bob).parent(tom, liz).parent(tom, liz).parent(bob, ann).parent(bob, ann).parent(bob, pat).parent(bob, pat).parent(pat,jim).parent(pat,jim).offspring(Y, X) :- parent(X, offspring(Y, X) :- parent(X, Y).Y).
![Page 17: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/17.jpg)
17
Kurallar
• Kurallar iki parçadan oluşur:– head : böyledir– body : eğer
p ar en t( X , Y)o f f s p r in g ( Y, X ) :-
h ead b o d y
![Page 18: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/18.jpg)
18
Kuralların Çalışması• Veritabanı:
• Çalışma Mekanizması:– offsprings ilişkisi için gerçek ara– Yok => offsprings ilişkisi için kural varsa uygula
– Kuralda X tom’la , Y liz’le eşleştirilerek kuralın bir gerçeklemesi bulunur.
offspring(liz,tom) :- parent(tom,liz).
– parents(tom,liz). gerçeği aranır. Bulunduğunda kuralın eğer kısmı doğrulandığından böyledir kısmı da doğrulanmış olur ve prolog “yes” cevabını verir.
parent(pam, bob).parent(pam, bob).parent(tom, bob).parent(tom, bob).parent(tom, liz).parent(tom, liz).parent(bob, ann).parent(bob, ann).parent(bob, pat).parent(bob, pat).parent(pat,jim).parent(pat,jim).offspring(Y, X) :- parent(X, offspring(Y, X) :- parent(X, Y).Y).
Sorgu:Sorgu:offspring(liz, tom).offspring(liz, tom).
![Page 19: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/19.jpg)
19
Anne ilişkisi
• Tüm X ve Y ler için,
X, Y’nin annesidir Eğer
X, Y’nin ebeveyni ise ve
X kadınsa.
• İlişkinin Prolog’da ifadesi :
mother(X, Y) :- parent(X, Y), female(X).
m o th e r
X
Y
pa re n t
fe m a le
![Page 20: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/20.jpg)
20
Kız Kardeş İlişkisi• Tüm X ve Y ler için,
X, Y’nin kız kardeşidir EğerX ve Y aynı ebeveyne sahip ise ve X bayansa
• İlişkinin Prolog’da ifadesi :sister(X, Y) :-
parent(Z, X), parent(Z, Y), female(X).
• Sorgu:sister(X,pat).
s is t e r
Z
X
pa re n t
Y
pa re n t
femalefemale
![Page 21: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/21.jpg)
21
Hala İlişkisi• parent(pam, bob).• parent(tom, bob).• parent(tom, liz).• parent(bob, ann).• parent(bob, pat).• parent(pat,jim).• female(ann).• female(liz).• female(pat).• male(bob).• male(tom).• sister(X, Y) :- parent(Z, X), parent(Z, Y),
female(X).• hala(Z,Y):-
parent(X,Y),male(X),sister(Z,X).
SORGU:SORGU: ?- hala(X,Y).?- hala(X,Y).
X = lizX = lizY = ann ;Y = ann ;
X = lizX = lizY = pat ;Y = pat ;
NoNo
![Page 22: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/22.jpg)
22
Ata İlişkisi
• Ata ilişkisinin iki türü var:
– Direkt ata
– Dolaylı (endirekt) ata
![Page 23: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/23.jpg)
23
Direkt Ata İlişkisi
pre de ce s s o r
X
Z
pa re n t
• Tüm X ve Z ler için,
X, Z’nin atasıdır Eğer
X, Z’nin ebeveyni
• Prolog ifadesi:predecessor(X, Z) :- parent(X,
Z).
![Page 24: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/24.jpg)
24
Dolaylı (Endirekt) Ata İlişkisi
pre de ce s s o r
X
Y
pa re n t
Z
pa re n t pre de ce s s o r
X
Y 1
pa re n t
Y 2
pa re n t
Z
pa re n t
pre de ce s s o r
X
Y 1
pa re n t
Y 2
pa re n t
Y 3
pa re n t
Z
pa re n t
![Page 25: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/25.jpg)
25
• predecessor(X,Z) :- parent(X,Z).
• predecessor(X,Z) :- parent(X,Y), parent(Y,Z).
• predecessor(X,Z) :- parent(X,Y1), parent(Y1,Y2), parent(Y2,Z).
• predecessor(X,Z) :- parent(X,Y1), parent(Y1,Y2), parent(Y2,Y3), parent(Y3, Z).
• …
Dolaylı (Endirekt) Ata Programı
Problemleri:Problemleri:Uzun …. Uzun …. Büyük büyük büyük …. Büyük büyük büyük ….
Ataları bulamaz.Ataları bulamaz.
![Page 26: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/26.jpg)
26
Yeni Ata Programı• Ata ilişkisini yine ata ilişkisini
kullanarak (öz yinelemeli) tanımlayalım.
Tüm X ve Z ler için,X, Z’nin Ata’sıdır Eğer
Y diye bir kişi varsa ve
(1) X, Y’nin ebeveyni ise ve
(2) Y, Z’nin Ata’sı ise
• Prolog ifadesi:predecessor(X, Z) :- parent(X, Y),
predecessor(Y, Z).
pre de ce s s o r
X
Y
pa re n t
Z
pre de ce s s o r
![Page 27: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/27.jpg)
27
• parent(pam, bob).• parent(tom, bob).• parent(tom, liz).• parent(bob, ann).• parent(bob, pat).• parent(pat,jim).• predecessor(X, Z) :- parent(X, Z).• predecessor(X, Z) :- parent(X, Y),predecessor(Y, Z).
HEDEF / SORGU ?-predecessor(tom, pat).
PR1PR1
PR2PR2
Sonuç Ata İlişkisi
![Page 28: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/28.jpg)
28
Cevap nasıl bulunur?
• Prolog hedefe ulaşmak için programdaki yazılış sırasına göre cümlecikleri kullanır.
Y = b o b
b y ru le p r1 b y ru le p r2
n o
pr e de c e s s o r ( to m , pat)
par e nt( to m , pat)par e nt( to m , Y)
pr e de c e s s o r (Y, pat)
b y fa c t p a re n t(to m , b o b )
pr e de c e s s o r (bo b, pat)
ye s
par e nt(bo b, pat)
b y ru le p r1
![Page 29: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/29.jpg)
29
X’den 1’e yaz
• yazdir(M):-– not(M=0),– write(M),– write(' '),– K is M-1,– yazdir(K).
• yazdir(8).– 8 7 6 5 4 3 2 1 – No
![Page 30: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/30.jpg)
30
X kere h yaz
• hyaz(X):-– not(X=0),– Y is X-1,– put(104),– hyaz(Y).
• ?- hyaz(3).– hhh– No
![Page 31: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/31.jpg)
31
Nereden Nereye?
• yolvar(1,4).• yolvar(1,3).• yolvar(4,2).• yolvar(2,3).• yolvar(3,5).• yolvar(4,6).• yolvar(6,1).• gidilir(X,Y):-
write(X),yolvar(X,Y).• gidilir(X,Y):-
yolvar(X,Z),gidilir(Z,Y).
?- gidilir(1,5).?- gidilir(1,5).14231423YesYes
?- gidilir(4,1).?- gidilir(4,1).4235642356YesYes
?- gidilir(3,1).?- gidilir(3,1).3535NoNo
![Page 32: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/32.jpg)
32
X ayda kaç saniye var?
• eder(asir,100,yil).• eder(yil,4,mevsim).• eder(mevsim,3,ay).• eder(ay,4,hafta).• eder(ay,30,gun).• eder(gun,24,saat).• eder(saat,60,dakika).• eder(dakika,60,saniye).• eder2(X,K,Y):-eder(X,K,Y).• eder2(X,K*K1,Y):-eder(X,K,M),eder2(M,K1,Y).• coz(N1,Obje1,Kac,Obje2):-• (eder(Obje1,M,Obje2);eder2(Obje1,M,Obje2)),• Kac is M*N1.
?- coz(3,ay,Kac,saniye).?- coz(3,ay,Kac,saniye).Kac = 7776000 ;Kac = 7776000 ;NoNo
?- coz(3,ay,Kac,gun).?- coz(3,ay,Kac,gun).Kac = 90 ;Kac = 90 ;NoNo
![Page 33: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/33.jpg)
33
Doğal Dil vs. Prolog
• Bütün çocuklar kısadır.• kisa(X):-cocuk(X).• Bütün erkek çocuklar arabaları sever. • sever(X,araba):-erkek(X),cocuk(X).• Bütün çocukların annesi vardır.• var(X,anne):-cocuk(X).• Sebzeyi hiçbir çocuk sevmez.• sevmez(X,Y):-sebze(Y), cocuk(X). • Çocuğunu döven öğretmeni hiçbir anne sevmez.• sevmez(X,Y):-anne(X,Z),ogretmen(Y,Z),dover(Y,Z).
![Page 34: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/34.jpg)
34
Doğal Dil vs. Prolog 2• Bütün insanlar canlıdır. Ahmet insandır. Dolayısıyla Ahmet canlıdır.• canli(X):-insan(X).• insan(ahmet).• ?-canli(ahmet).• Ahmet 20 metre zıplayabilir. Birisi X metreye zıplayabilirse daha
azlarına da zıplayabilir.• ziplar(ahmet,20).• ziplar(X,Y):-ziplar(X,Z),Z<Y.• ?-ziplar(ahmet,15).• Kendi kalesine gol atan futbolcuyu kendi takımının taraftarları
sevmez, karşı takımınkiler sever. • sevmez(X,Y):-futbolcu(X), taraftar(Y), aynitakim(X,Y),
kendikalesinegolatar(X). • sever(X,Y):- futbolcu(X), taraftar(Y), karsitakim(X,Y),
kendikalesinegolatar(X).
![Page 35: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/35.jpg)
SWI Prolog’la çalışmak
• SWI prolog kurulur.
http://www.swi-prolog.orghttp://www.swi-prolog.org
• Gerçekler ve kurallar .pl uzantılı bir dosyaya kaydedilir.
![Page 36: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/36.jpg)
SWI Prolog’la çalışmak
• .pl uzantılı dosyanın üzerine çift tıklanarak
![Page 37: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/37.jpg)
SWI Prolog’la çalışmak
• Yada SWI prolog açıldıktan sonra file menüsünden dosya ‘consult’ edilerek
![Page 38: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/38.jpg)
SWI Prolog’la çalışmak
• Gerçek ve kurallarımız prolog’a yüklenir. Artık sorgularımız komut satırından girilerek çalıştırılabilir.
![Page 39: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/39.jpg)
39
Özet• Prolog’la nesneler arası ilişkiler kolaylıkla
ifade edilebilir.
• Kullanıcı bilgi tabanındaki verileri kolaylıkla sorgulanabilir.
• İlişkilerin argümanları:– atom : sabit nesneler ör: tom, ann, …– Değişken(variable) : genel nesneler ör: X, Y, …
![Page 40: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/40.jpg)
40
Özet
• Prolog programları cümleciklerden oluşur. 3 tür cümlecik vardır. – Facts (Gerçekler) daima, koşulsuz olarak doğru
olan şeyleri tanımlarlar. – Rules (Kurallar) koşul(lar)a bağlı olarak doğru olan
şeyleri tanımlarlar.– Questions (Sorgular) Kullanıcının veritabanını
sorgulamak için kurduğu cümleciklerdir.
• Prolog nasıl çalışır?• Çeşitli örnekler
![Page 41: 6-prolog1](https://reader033.vdocuments.net/reader033/viewer/2022051413/5540eb74550346bb798b4c1a/html5/thumbnails/41.jpg)
41
Kaynaklar
• PROLOG Programming for Artificial Intelligence, Ivan Bratko, 3rd Edition, Addison-Wesley, 2001
• Tacettin Ayar, Prolog Ders Notları