Sunuyu indir
Sunum yükleniyor. Lütfen bekleyiniz
1
Prolog Programlama Dili
Hafta_7 Prolog Programlama Dili
2
Prolog Programlama Dili
Prolog = “PROgramming in LOGic” Prolog mantıksal ve dekleratif (bildirgesel) bir programlama dilidir. Prosedürel programlamada adım adım ne yapılması gerektiği kodlanır. (Ör: C, Pascal, Java vs.) Dekleratif programlamada bir durum tanımlanır. Bu tanıma göre yorumlayıcı ya da derleyici bir çözüm üretir. Prolog kodları bir yorumlayıcı tarafından yorumlanarak sonuç elde edilir; Tamamen mantık tabanlıdır bir dildir. Problem çözümü için mantıklı bir çözüm bulunur ve problem çözülür.
3
Prolog Programlama Dili
Problemlerin çözümünü tanımlama yerine çıkarım yapılır. Doğal dille düşünülen şeylerin kodlanması kolaydır. 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 kullanılır. (değişkenler daima büyük harf veya bir ‘_’ ile başlar.) Program çıktıları çok sadedir.
4
Prolog Programlama Dili
PROLOG Programlama Dilinde Olmayan Özellikler: Aşağıdaki maddeler Prosedürel Programlama Dillerinde bu yapılar vardır aksine PROLOG' da yoktur ve bu yapıların olmaması işleri zorlaştırmaz. For döngüleri Repeat While döngüleri IF..THEN yapısı Go to komutu Diziler öz yinelemeli fonksiyonlarla yukarıdakiler sağlanabilir
5
Prolog Programlama Dili
Prolog, program satırları içinde sorulan bir soruyu veya hipotezi doğrulamak için, doğruluğu önceden bilinen ve veri olarak yüklenmiş olan bilgi kümesini sorgulayıp hipotezin doğruluğu hakkında karar vermeye çalışır. PROLOG Gerçekler (Facts), Kurallar (Rules) ve Sorgular (Queries) olmak üzere 3 yapıdan oluşur. Gerçekler, koşulsuz olarak doğru olan "şeyleri" tanımlar. Kurallar, koşullara bağlı olarak doğru olan "şeyleri" tanımlar. Sorgular, kullanıcının veri tabanını sorgulamak için kurduğu cümlelerdir.
6
Prolog Programlama Dili
Prolog ile program yazarken, ilk önce nesneler ve bu nesneler arasındaki ilişkiler tanımlanır. Prolog mantığında bir ilişki, bu ilişkinin ismi ve bunu takiben parantez içinde yazılan nesne veya nesnelerden oluşan basit ifadelerle özetlenir. ‘Ahmet gülleri sever’ cümlesindeki Ahmet ve gül kelimeleri nesne, ‘sevmek’ ise bu iki nesne arasındaki ilişkidir. Bu ilişkinin ne zaman doğru olacağını belirleyen ifadeye ise Kural denir. Konuşma Dili Prolog’daki Karşılığı Ahmet bir insandır insan(Ahmet). Gül kırmızıdır kirmizi(gul). Ahmet, gülü kırmızı ise sever sever(Ahmet, gul) if kirmizi(gul).
7
Prolog Programlama Dili
Yaşar Emel’i sever. Emel Cemal’i sever. Yaşar kedileri sever. Prolog’daki karşılıkları: sever(yasar, emel). sever(emel, cemal). sever(yasar, kediler). sever : ilişkinin ismi yasar ve emel : ilişkinin nesneleri (atomlar) . : sonlandırıcı
8
Prolog Programlama Dili
Aile Ağacı parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). parent(bob, pat). parent(pat,jim).
9
Prolog Programlama Dili
Yaşar, Emel’in sevdiği her şeyi sever. Haluk kırmızı olan her şeyi sever. Prolog’daki karşılıkları: sever(yasar, hersey):-sever(emel, hersey). sever(haluk, hersey):- kirmizi(hersey). :- sembolü, prosedürel dillerdeki if(eğer) anlamında olup, bir kuralın iki parçasını birleştirir.
10
Prolog Programlama Dili
Prolog Sorguları: Prolog’a bazı gerçekler tanıtıldıktan sonra, artık bu gerçeklerle ilgili sorular sormaya başlanabilir. ?- iliski(a,b). a ve b arasında iliski isminde bir ilişki var mı? cevap YES yada NO ?- iliski(A,b). b ile iliski adlı ilişkiyi doğrulayan A lar nelerdir? cevap varsa A lar yoksa NO A: değişken a, b: atom (sabit) (değişkenler daima büyük harf veya bir ‘_’ ile başlar.)
11
Prolog Programlama Dili
İlişkileri sorgulamak Bob, Pat’in ebeveyni mi? ?- parent(bob, pat). yes Tom, Ben’in ebeveyni mi? : ?- parent(tom, ben). no
12
Prolog Programlama Dili
İlişkileri sorgulamak Liz’in ebeveyni kimdir? ?- ebeveyn(Kim, liz). Prolog’un cevabı : Kim = tom Bob’un çocukları kimlerdir? ?- ebeveyn(bob, Cocuk). Cocuk = ann ; Cocuk = pat ; no
13
Prolog Programlama Dili
İlişkileri sorgulamak Kimler kimlerin çocuğudur? ?- ebeveyn (Ebeveyn, Cocuk). Ebeveyn = pam Cocuk = bob; Ebeveyn = tom Cocuk = liz; … Çözümler listesini yarıda kesmek için enter Devam ettirmek için ;
14
Prolog Programlama Dili
İlişkileri sorgulamak Jim’in büyük ebeveyni (grandparent) kimdir? Bilgi tabanında 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=bob Y=pat
15
Prolog Programlama Dili
İlişkileri sorgulamak 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; Y=pat; no
16
Prolog Programlama Dili
Çocuk ilişkisi parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). parent(bob, pat). parent(pat, jim). offspring(bob, pam). offspring(bob, tom). offspring(liz, tom). offspring(ann, bob). offspring(pat, bob). offspring(jim, pat).
17
Prolog Programlama Dili
Kurallar Kurallar iki parçadan oluşur: head : böyledir (sonuç, çıkarım) body : eğer
18
Prolog Programlama Dili
Kuralların Çalışması Veritabanı: parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). offspring(Y, X) :- parent(X, Y). Sorgu: offspring(liz, tom). Ç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
19
Prolog Programlama Dili
Örnek: 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).
20
Prolog Programlama Dili
Örnek: Kız kardeş ilişkisi Tüm X ve Y ler için, X, Y’nin kız kardeşidir Eğer X 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).
21
Prolog Programlama Dili
Örnek: Hala ilişkisi Tüm X ve Y ler için, X, Y’nin halasıdır Eğer Z, Y’nin ebeveyni ise ve Z, erkek ise ve X, Z’in kız kardeşi ise İlişkinin Prolog’da ifadesi : sister(X, Y) :- parent(Z, X), parent(Z, Y), female(X). hala(X,Y) :- parent(Z,Y), male(Z), sister(X,Z).
22
Prolog Programlama Dili
Direkt Ata İlişkisi Tüm X ve Z ler için, X, Z’nin atasıdır eğer X, Z’nin ebeveyni ise Prolog ifadesi: predecessor(X, Z) :- parent(X, Z).
23
Dolaylı (Endirekt) Ata İlişkisi
Prolog Programlama Dili Dolaylı (Endirekt) Ata İlişkisi
24
Prolog Programlama Dili
Dolaylı Ata Programı 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). parent(Y2,Y3), parent(Y3, Z). … Problemleri: Uzun … Büyük büyük büyük … Ataları bulamaz.
25
Prolog Programlama Dili
Yeni Ata Programı Çözüm: öz yineleme kullanmak 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). 25
26
Prolog Programlama Dili
Sonuç Ata İlişkisi 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). PR1 PR2 26
27
Prolog Programlama Dili
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).
28
Prolog Programlama Dili
Doğal Dil vs. Prolog 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(Y,X):- futbolcu(X), taraftar(Y), aynitakim(X,Y), kendikalesinegolatar(X). sever(Y,X):- futbolcu(X), taraftar(Y), karsitakim(X,Y), kendikalesinegolatar(X).
29
Prolog Programlama Dili
SWI Prolog’la çalışmak SWI prolog kurulur. Gerçekler ve kurallar .pl uzantılı bir dosyaya kaydedilir.
30
Prolog Programlama Dili
SWI Prolog’la çalışmak .pl uzantılı dosyanın üzerine çift tıklanarak
31
Prolog Programlama Dili
Yada SWI prolog açıldıktan sonra file menüsünden dosya ‘consult’ edilerek
32
Prolog Programlama Dili
Gerçek ve kurallar Prolog’a yüklenir. Artık sorgular komut satırından girilerek çalıştırılabilir.
33
Prolog Programlama Dili
Prolog’da Veri Türleri Prolog bir veri türünü onun şeklinden tanır. Atom Sayı Değişken Prolog herhangi bir veri tanımına ihtiyaç duymaz. Sabitler gibi düşünülebilir
34
Prolog Programlama Dili
Atomlar Atom’lar aşağıdakilerden oluşan string’lerdir. Büyük harf A, B, …, Z Küçük harf a, b, …, z Rakam 0, 1, …, 9 Özel karakterler + - * / < > = : . & _ ~
35
Prolog Programlama Dili
Atomlar Atom’lar 3 farklı şekilde oluşturulabilir: Harf, rakam ve altçizgi (‘_’) den oluşan küçük harfle başlayan string’ler ile: anna nil x25 x_25AB x_ x___y alpha_beta_procedure sarah_jones
36
Prolog Programlama Dili
Atomlar Özel karakterlerden oluşan string’ler ile: <---> ======> … .:. ::= Özel anlamı olan string’ler kullanılmamalı: :-
37
Prolog Programlama Dili
Atomlar Tek tırnak (’) arasına alınan karakterler ile: ‘Tom’ ‘South_America’ ‘Sarah Jones’ Büyük harfle başlayan Atom’lar oluşturmak için kullanılabilir. Değişkenlerden bu şekilde ayrılabilirler.
38
Prolog Programlama Dili
Sayılar Prolog’da iki tür sayı kullanılabilir Tamsayılar (integer) En büyük ve en küçük sayı prolog derleyicisine bağlıdır. Ondalıklı sayılar (real) Genelde tamsayılar kullanılır. Ondalıklı sayılar pek fazla kullanılmaz => Çünkü: topla(X,Y,Z):-Z is X+Y. ?- topla(2,0.3,C). C = 2.3 ; No ?- topla(200,0.0003,C). C = ;
39
Prolog Programlama Dili
Değişkenler Harf, rakam ve altçizgi (‘_’) den oluşan büyük harfle ya da altçizgi ile başlayan string’lerdir: X Result Object2 Participant_list ShoppingList _x23 _23
40
Prolog Programlama Dili
Değişkenler Anonim değişken: isimlendirilmemiş değişkenlerdir. Sadece altçizgi ile ifade edilirler: hasachild(X) :- parent(X, Y). hasachild(X) :- parent(X, _). Her altçizgi karakteri yeni bir anonim değişkeni ifade eder. somebody_has_a_child :- parent(_, _). %r1 X Y Anonim değişkenlerin değerleri çıkış olarak verilmez. ?- parent(ali,Y). : ali’in çocuğu var mı? Ve varsa çocuklarının isimleri nedir? ?- parent(ali,_). : sadece ali’in çocuğu var mı?
41
Prolog Programlama Dili
Değişken ve Atom’ların Faaliyet Alanları (Scope) Bir değişkenin değeri bir cümlecik içinde sabittir Bir atomun değeri tüm program boyunca sabittir
42
Prolog Programlama Dili
Aşırı Yükleme Aynı isimde farklı ilişkiler olabilir: point(1, 1), point(1, 1, 1), point(1, 1, 1, 1), … +(X,Y,Z):-Z is X+Y. +(X,Y,Z,F):-F is X+Y+Z. ?- +(200,0.03,7.2,G). G = ; No ?- +(200,0.03,G). G = ;
43
Prolog Programlama Dili
Ve , veya ; P :- Q; R. P doğrudur Eğer Q doğruysa veya R doğruysa Aynı ifadeyi aşağıdaki şekilde de yazabiliriz: P :- Q. P :- R.
44
Prolog Programlama Dili
Ve , veya ; Ve, veya’dan daha yüksek önceliklidir. Aşağıdaki iki ifade aynı sonucu verir: P :- Q, R; S, T, U. P :- (Q, R); (S, T, U). Aynı ifadeyi aşağıdaki şekilde de yazabiliriz: P :- Q, R. P :- S, T, U.
45
Prolog Programlama Dili
Hedefleri Birleştirme araba(chrysler,130000,3,kirmizi,12000). araba(ford,90000,4,gri,25000). araba(ferrari,30000,5,siyah,30000). kamyon(mercedes,10000,2,mavi,20000). kamyon(ford,50000,8,sari,28000). kamyon(volvo,35000,2,siyah,35000). arac(Marka,Kilometresi,Yas,Renk,Fiyat):- araba(Marka,Kilometresi,Yas,Renk,Fiyat); kamyon(Marka,Kilometresi,Yas,Renk,Fiyat). 45
46
Prolog Programlama Dili
Fiyatı 25000’den az olan araçlar: ?- arac(Marka,KiloMetre,Yasi,Renk,Fiyat), Fiyat<25000. Marka = chrysler KiloMetre = Yasi = 3 Renk = kirmizi Fiyat = ; Marka = mercedes KiloMetre = 10000 Yasi = 2 Renk = mavi Fiyat = ; No 46
47
Prolog Programlama Dili
Hedef Birleştirme Hasta mı? tahlil(ahmet,tahlil1,90). tahlil(ahmet,tahlil2,25). tahlil(ahmet,tahlil3,10). yuksektansiyon(X) :- (tahlil(X,tahlil1,Y),Y>100); (tahlil(X,tahlil2,Z),Z<30). kalphastasi(X) :- yuksektansiyon(X), tahlil(X,tahlil3,Q), Q<20. ?-kalphastasi(ahmet).
48
Turnuva oyuncu(ahmet,10). oyuncu(mehmet,12). oyuncu(ali,10).
?- oyuncu(B,10),oyuncu(B2,10),B\==B2. B = ahmet B2 = ali ; B2 = huseyin ; B = ali B2 = ahmet ; B = huseyin No oyuncu(ahmet,10). oyuncu(mehmet,12). oyuncu(ali,10). oyuncu(huseyin,10). 10 yaşındaki çocuklar arasında oynanabilecek maçlar nelerdir? Sayı ve string’ler arası Karşılaştırma : == eşit \== eşit değil
49
Prolog Programlama Dili
Cümleciklerin ve Kuralların Sıralaması Kurallar ve cümleciklerin sırası değiştirilebilir Örneğin, Ata ilişkisi iki kuraldan oluşmakta ve ilişkilerden biri iki cümlecikten oluşmaktadır: predecessor(X, Y) :- parent(X, Y). predecessor(X, Z) :- parent(X, Y), predecessor(Y, Z). Olası versiyonlar: Cümleciklerin yerini değiştirerek, Kuralların yerini değiştirerek.
50
Prolog Programlama Dili
Cümleciklerin ve Kuralların Sıralaması Orijinal Versiyon pred1(X, Z) :- parent(X, Z). pred1(X, Z) :- parent(X, Y), pred1( Y, Z). Versiyon a: Kuralların yerini değiştir pred2(X, Z) :- parent(X, Y), pred2( Y, Z). pred2(X, Z) :- parent(X, Z).
51
Prolog Programlama Dili
Cümleciklerin ve Kuralların Sıralaması Versiyon b: İkinci kuraldaki cümleciklerin yerini değiştir pred3(X, Z) :- parent(X, Z). pred3(X, Z) :- pred3( X, Y), parent(Y, Z). Versiyon c: Hem kuralların hem cümleciklerin yerini değiştir pred4(X, Z) :- pred4( X, Y), parent(Y, Z). pred4(X, Z) :- parent(X, Z).
52
Prolog Programlama Dili
4 versiyonun verdiği cevaplar ?- pred1(tom, pat). yes ?- pred2(tom, pat). Yes ?- pred3(tom, pat). ?- pred4(tom, pat). Stack overflow!!!
53
Prolog Programlama Dili
Aritmetik & Karşılaştırma +, -, *, /, mod is: hesaplamaya zorlamak (force) için: X = X=1+2 X is X=3 Karşılaştırma operatörleri X > Y büyük X < Y küçük X >= Y büyük veya eşit X =< Y küçük veya eşit X =:= Y eşit mi? X =\= Y farklı mı? 53
54
Prolog Programlama Dili
X’den 1’e yaz yazdir(M):- not(M=0), write(M), write(' '), K is M-1, yazdir(K). yazdir(8). No 54
55
Prolog Programlama Dili
X kere h yaz hyaz(X):- not(X=0), Y is X-1, put(104), hyaz(Y). ?- hyaz(3). hhh No 55
56
Prolog Programlama Dili
guc(X,Y,Z) XY=Z guc(X,1,X). guc(X,Y,Z):- Y>1, G is Y-1, guc(X,G,T), Z is X*T. ?- guc(3,4,G). G = 81 ; No
57
Prolog Programlama Dili
fact(N,F) N!=F fact(0,1). fact(N,F) :- N>0, G is N-1, fact(G,T), F is N * T. ?- fact(5,E). E = 120 ; No
58
Prolog Programlama Dili
topla(X,Y) Y = X topla(1,1). topla(N,F) :- N>1, G is N-1, topla(G,T), F is N + T.
Benzer bir sunumlar
© 2024 SlidePlayer.biz.tr Inc.
All rights reserved.