YAPAY ZEKA ve UZMAN SİSTEMLER

Slides:



Advertisements
Benzer bir sunumlar
Yrd. Doç. Dr. Mustafa Akkol
Advertisements

Prof.Dr.Şaban EREN Yasar Üniversitesi Fen-Edebiyat Fakültesi
Değişkenler ve bellek Değişkenler
DOĞAL SAYILAR.
JavaScript Birinci Hafta.
T.C. İNÖNÜ ÜNİVERSİTESİ Arapgir Meslek YÜKSEKOKULU
Eğitim Programı Kurulum Aşamaları E. Savaş Başcı ASO 1. ORGANİZE SANAYİ BÖLGESİ AVRUPA BİLGİSAYAR YERKİNLİĞİ SERTİFİKASI EĞİTİM PROJESİ (OBİYEP)
Veri ve Veri Yapıları Genel olarak bilgisayarlar.
KÜMELER.
Atlayarak Sayalım Birer sayalım
Diferansiyel Denklemler
ÖRNEKLEME DAĞILIŞLARI VE TAHMİNLEYİCİLERİN ÖZELLİKLERİ
Prolog1 M.Fatih Amasyalı
Prolog2 M.Fatih Amasyalı
Prolog4 cut&fail db değişimi
Prolog3 M.Fatih Amasyalı Web :
4 Kontrol Yapıları: 1.Bölüm.
ALIŞVERİŞ ALIŞKANLIKLARI ARAŞTIRMASI ÖZET SONUÇLARI Haziran 2001.
Mantıksal Programlama-Prolog
SQL de Değişken Tanımlama
KIR ÇİÇEKLERİM’ E RakamlarImIz Akhisar Koleji 1/A.
BPR152 ALGORİTMA VE PROGRAMLAMA - II
BPR151 ALGORİTMA VE PROGRAMLAMA - I
Soruya geri dön
RİZE ÜNİVERSİTESİ BAHAR YARI YILI MATERYAL DERSİ
CAN Özel Güvenlik Eğt. Hizmetleri canozelguvenlik.com.tr.
1/20 PROBLEMLER A B C D Bir fabrikada kadın ve çocuk toplam 122 işçi çalışmaktadır. Bu fabrikada kadın işçilerin sayısı, çocuk işçilerin sayısının 4 katından.
HAZIRLAYAN:SAVAŞ TURAN AKKOYUNLU İLKÖĞRETİM OKULU 2/D SINIFI
BPR152 ALGORİTMA VE PROGRAMLAMA - II
1/25 Dört İşlem Problemleri A B C D Sınıfımızda toplam 49 öğrenci okuyor. Erkek öğrencilerin sayısı, kız öğrencilerin sayısından 3 kişi azdır.
Dördüncü Grup İkinci Harf B sesi sunumu Mürşit BEKTAŞ.
Bölüm 3 – Yapısal Programlama
ASAL SAYILAR VE ÇARPANLARINA AYIRMA
BPR152 ALGORİTMA VE PROGRAMLAMA - II
TÜRKİYE KAMU HASTANELERİ KURUMU
Yapısal Program Geliştirme – if, if-else
İmalat Yöntemleri Teyfik Demir
MATRİSLER ve DETERMİNANTLAR
6. HAFTA
Operatörler ve Denetim Yapıları
Tam sayılarda bölme ve çarpma işlemi
İKİ BASAMAKLI DOĞAL SAYILARIN
PÇAĞEXER / SAYILAR Ali İhsan TARI İnş. Yük. Müh. F5 tuşu slaytları çalıştırmaktadır.
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
ONDALIK KESİRLERİN ÖĞRETİMİ
4 X x X X X
Mukavemet II Strength of Materials II
1 pred1(X,Z):-parent(X,Z). pred1(X,Z):-parent(X,Y), pred1( Y, Z). parent(pam, bob). parent(pam, bob). parent(tom, bob). parent(tom, bob). parent(tom, liz).
Akış Kontrol Mekanizmaları
Chapter 6: Using Arrays.
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
Toplama-Çıkarma-Çarpma-Bölme
ANA BABA TUTUMU ENVANTERİ
1 DEĞİŞMEYİN !!!
Test : 2 Konu: Çarpanlar ve Katlar
Tuğçe ÖZTOP İlköğretim Matematik Öğretmenliği 2. sınıf
HAYAT BİLGİSİ SORULARI.
ÇOK DEĞİŞKENLİ FONKSİYONLARDA
Proje Konuları.
PÇAĞEXER / SAYILAR Ali İhsan TARI İnş. Yük. Müh. F5 tuşu slaytları çalıştırmaktadır.
Diferansiyel Denklemler
Mantıksal Programlama-Prolog
BİL551 – YAPAY ZEKA Prolog: Listeler
YAPAY ZEKA P ROLOG 1. Prolog’un özellikleri PROgrammig in LOGic Semboller üzerinde çalışma Gerçekler ve kurallardan oluşur Büyük küçük harfe duyarlıdır.
YAPAY ZEKA P ROLOG 3. Geriye İz Sürme Mekanizması sever(oktay, okuma). * sever(yavuz, bilgisayar). sever(orhan, tavla). sever(vedat, uyuma). sever(ismail,
Adım Adım Algoritma.
SAYISAL ANALİZ Doç.Dr. Cüneyt BAYILMIŞ.
PROLOG. Prolog Programlarının özellikleri: - Programming in Logic teriminin kısaltılmasıyla adlandırılmıştır. - Semboller üzerinde çalışma prensibi üzerine.
Bilgisayar Bilimi Problem Çözme Süreci-2.
Sunum transkripti:

YAPAY ZEKA ve UZMAN SİSTEMLER Ders Notu - 8 Prolog

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 2

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. 3

PROLOG MEKANİZMALARI Şablon Eşleme Otomatik geriye iz sürme 4

Örnek : Aile Ağacı 5

İ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ı 6

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). 7

Prolog Sorguları ?- iliski(a,b). ?- 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 8

İ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 9

İlişkileri sorgulamak-2 Liz’in ebeveyni kimdir? ?- ebeveyn(Kim, liz). Prolog’un cevabı : Kim = tom Bob’un çocukları kimlerdir? ?- ebeveyn(bob, Cocuk). Cocuk = ann ; Cocuk = pat ; no 10

İlişkileri sorgulamak-3 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 ; 11

İlişkileri sorgulamak-4 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=bob Y=pat jim’in ebeveynine Y dersek, Y’nin ebeveyni jim’in büyük ebeveyni (X) dir. 12

İ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; Y=pat; no 13

İlişkileri sorgulamak-6 Ann ve pat’in ortak ebeveyni var mı? ?- parent(Ebeveyn, ann), parent(Ebeveyn, pat). Ebeveyn=bob 14

Ç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). 15

Çocuk kuralı 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). parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). parent(bob, pat). parent(pat,jim). offspring(Y, X) :- parent(X, Y). 16

Kurallar Kurallar iki parçadan oluşur: head : böyledir body : eğer 17

Kuralların Çalışması Sorgu: offspring(liz, tom). Veritabanı: parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). parent(bob, pat). parent(pat,jim). offspring(Y, X) :- parent(X, Y). Sorgu: offspring(liz, tom). 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. 18

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). 19

Kız Kardeş İliş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). female 20

Hala İlişkisi SORGU: ?- hala(X,Y). X = liz Y = ann ; Y = pat ; No 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: ?- hala(X,Y). X = liz Y = ann ; Y = pat ; No 21

Ata İlişkisi Ata ilişkisinin iki türü var: Direkt ata Dolaylı (endirekt) ata 22

Direkt Ata İlişkisi Prolog ifadesi: 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). 23

Dolaylı (Endirekt) Ata İlişkisi 24

Dolaylı (Endirekt) 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

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). 26

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 27

Cevap nasıl bulunur? Prolog hedefe ulaşmak için programdaki yazılış sırasına göre cümlecikleri kullanır. 28

X’den 1’e yaz yazdir(M):- yazdir(8). not(M=0), write(M), write(' '), K is M-1, yazdir(K). yazdir(8). 8 7 6 5 4 3 2 1 No 29

X kere h yaz hyaz(X):- ?- hyaz(3). not(X=0), Y is X-1, put(104), hyaz(Y). ?- hyaz(3). hhh No 30

Nereden Nereye? yolvar(1,4). yolvar(1,3). yolvar(4,2). yolvar(2,3). ?- gidilir(1,5). 1423 Yes ?- gidilir(4,1). 42356 ?- gidilir(3,1). 35 No 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). 31

X ayda kaç saniye var? eder(asir,100,yil). eder(yil,4,mevsim). ?- coz(3,ay,Kac,saniye). Kac = 7776000 ; No ?- coz(3,ay,Kac,gun). Kac = 90 ; 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. 32

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). 33

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). 34

SWI Prolog’la çalışmak SWI prolog kurulur. http://www.swi-prolog.org Gerçekler ve kurallar .pl uzantılı bir dosyaya kaydedilir.

SWI Prolog’la çalışmak .pl uzantılı dosyanın üzerine çift tıklanarak

SWI Prolog’la çalışmak Yada SWI prolog açıldıktan sonra file menüsünden dosya ‘consult’ edilerek

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.

Ö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, … 39

Ö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 40

Prolog2

Prolog’da Veri Türleri Prolog bir veri türünü onun şeklinden tanır. Prolog herhangi bir veri tanımına ihtiyaç duymaz. 42

Atom’lar (1) Atom’lar aşağıdakilerde oluşan string’lerdir. Büyük harf A, B, …, Z Küçük harf a, b, …, z Rakam 0, 1, …, 9 Özel karakterler + - * / < > = : . & _ ~ 43

Atom’lar (2) 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 miss_jones sarah_jones 44

Atom’lar (3) Özel karakterlerden oluşan string’ler ile: <---> ======> … .:. ::= Özel anlamı olan stirng’ler kullanılmamalı: :- 45

Atom’lar (4) 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. 46

Sayı’lar Prolog’da iki tür sayı kullanılabilir Tamsayılar (integer) 1 0 -97 1313 En büyük ve en küçük sayı prolog derleyicisine bağlıdır. Ondalıklı sayılar (real) 3.14 100.2 -0.0035 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 = 200.0 ; 47

Değişken’ler (1) Değişkenler; harf, rakam ve altçizgi(‘_’)’den oluşan büyük harfle yada altçizgi ile başlayan string’lerdir: X Result Object2 Participant_list ShoppingList _x23 _23 48

Değişken’ler (2) 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 r1 eşittir somebody_has_a_child :- parent(X, Y). ancak farklıdır somebody_has_a_child :- parent(X, X). 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ı? 49

Değişken ve Atom’ların Alanları (Scope) Bir değişkenin değeri bir cümlecik içinde sabittir. Bir atomun değeri tüm program boyunca sabittir 50

guc(X,Y,Z) XY=Z ?- guc(3,4,G). G = 81 ; No guc(X,1,X). guc(X,Y,Z):- G is Y-1, guc(X,G,T), Z is X*T. ?- guc(3,4,G). G = 81 ; No

fact(N,F) N!=F ?- fact(5,E). E = 120 ; No fact(0,1). fact(N,F) :- G is N-1, fact(G,T), F is N * T. ?- fact(5,E). E = 120 ; No

topla(X,Y) Y = 1+2+...+X topla(1,1). topla(N,F) :- N>1, G is N-1, topla(G,T), F is N + T.

Aşırı Yükleme Aynı isimli farklı ilişkiler / functor 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 = 207.23 ; No ?- +(200,0.03,G). G = 200.03 ; 54

Ve , veya ; (1) 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. 55

Ve , veya ; (2) 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. 56

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). 57

Fiyatı 25000’den az olan araçlar: ?- arac(Marka,KiloMetre,Yasi,Renk,Fiyat),Fiyat<25000. Marka = chrysler KiloMetre = 130000 Yasi = 3 Renk = kirmizi Fiyat = 12000 ; Marka = mercedes KiloMetre = 10000 Yasi = 2 Renk = mavi Fiyat = 20000 ; No 58

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).

Ne hastası? Bir kişinin tansiyonu 13’ten büyükse o kişinin tansiyonu yüksektir. Bir kişinin ateşi 37’den büyükse o kişinin ateşi yüksektir. Bir kişinin ateşi yüksekse ve midesi bulaniyorsa X hastalığı vardır. Bir kişinin tansiyonu yüksekse ve X hastalığı varsa Y hastalığı vardır. Bir kişinin başı dönüyorsa ve Y hastalığı varsa Z hastalığı da vardır. Tansiyon Ateş Mide bulantısı Baş dönmesi Ahmet 12 34 Var Yok Mehmet 15 35 Hilmi 16 39 Mazhar 18 40 Yukarıdaki cümleleri kurallara, tabloyu gerçeklere prolog dilinde çeviriniz. Z hastalığı olanları listeleyen prolog kodunu yazınız.

cevap tansiyon(ahmet,12). tansiyon(mehmet,15). tansiyon(hilmi,16). tansiyon(mazhar,18). ates(ahmet,34). ates(mehmet,35). ates(hilmi,39). ates(mazhar,40). mide_bulantisi_var(ahmet). mide_bulantisi_var(mehmet). mide_bulantisi_var(mazhar). bas_donmesi_var(hilmi). bas_donmesi_var(mazhar). tansiyon_yuksek(X):-tansiyon(X,K),K>13. ates_yuksek(X):-ates(X,K),K>37. x_hastasi(X):-ates_yuksek(X),mide_bulantisi_var(X). y_hastasi(X):-tansiyon_yuksek(X),x_hastasi(X). z_hastasi(X):-bas_donmesi_var(X),y_hastasi(X).

Turnuva oyuncu(ahmet,10). oyuncu(mehmet,12). oyuncu(ali,10). oyuncu(huseyin,10). 10 yaşındaki çocuklar arasında oynanabilecek maçlar nelerdir? ?- oyuncu(B,10),oyuncu(B2,10),B\==B2. B = ahmet B2 = ali ; B2 = huseyin ; B = ali B2 = ahmet ; B = huseyin No Sayı ve string’ler arası Karşılaştırma : == eşit \== eşit değil 62

Cümleciklerin ve Kuralların Sıralaması (1) Ata ilişkisi üzerinde kuralların ve cümleciklerin sıralanmasını inceleyelim: Ata ilişkisi iki kuraldan oluşmakta ve ilişkilerden biri iki cümlecikten oluşmaktadır. Olası versiyonlar: Cümleciklerin yerini değiştirerek, Kuralların yerini değiştirerek. 63

Cümleciklerin ve Kuralların Sıralaması (2) 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). 64

Cümleciklerin ve Kuralların Sıralaması (3) 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). 65

4 versiyonun verdiği cevaplar ?- pred1(tom, pat). yes ?- pred2(tom, pat). Yes ?- pred3(tom, pat). ?- pred4(tom, pat). Stack overflow!!! 66

pred1(X,Z):-parent(X,Z). pred1(X,Z):-parent(X,Y), pred1( Y, Z). parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). parent(bob, pat). parent(pat,jim). Y = bob by rule pr1 pr2 no pred1(tom, pat) parent(tom, pat) parent(tom, Y) pred1(Y, pat) by fact parent(tom, bob) pred1(bob, pat) yes parent(bob, pat) pred1(X,Z):-parent(X,Z). pred1(X,Z):-parent(X,Y), pred1( Y, Z). 67

parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). parent(bob, pat). parent(pat,jim). pr1 tom ile başlayan 2 parent ilişkisi (bob ve liz) bulunduğundan ikisini de dene bob ile başlayan 2 parent ilişkisi (ann ve pat) bulunduğundan ikisini de dene pr1 pr2 pr1 pr1 pr1 pr2 parent(ann,Y’’) pred2(Y’’,pat) pr1 pr2 parent(pat,Y’’’) pred2(Y’’’,pat) ann ile başlayan parent ilişkisi bulamadığından No pr1 pr2 jim ile başlayan parent ilişkisi bulamadığından No 68

pr1 tom ile başlayan 2 parent ilişkisi (bob ve liz) bulunduğundan ikisini de dene 69

pred3(X, Z) :- parent(X, Z). parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). parent(bob, pat). parent(pat,jim). pred3(tom,Y’) parent(Y’,pat) pred3(X, Z) :- parent(X, Z). pred3(X, Z) :- pred3( X, Y), parent(Y, Z). 70

parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). parent(bob, pat). parent(pat,jim). 71

Prolog’da Problem Çözme Ata ilişkisinde iki fikir var: İki nesne arasında parent ilişkisi var mı? İki nesne arasında her ikisiyle de parent ilişkisine sahip olan başka birisi var mı? pred1 en basit fikri dener. pred4 en karmaşık ilişkileri dener. pred2 ve pred3 bu iki uç arasındadır. Sonuç olarak Önce en basit fikri dene. 72

bir çıkarım örneği -1 Ali okula gittiğinde öğlen yemeğini kantinde yer. Ali eve gittiğinde öğlen yemeğini mutfakta yer. Ali sınıfta kitap okudu. Bilgileri verilip ali öğlen yemeğini nerede yedi ? sorusuna cevap veren bir kodu yazalım . Burada bilinmesi gerekenler. Birisi bir yerde bulunmuşsa oraya gitmiştir. Birisi bir yere gitmişse ve o yeri içine alan yere de gitmiştir. Sınıf okulun içindedir. Oda evin içindedir. 73

bir çıkarım örneği-2 Kodda cümleler vardir(yüklem,özne,belirtilinesne,dolaylıtümlec,cümleno) yapısında tutulmuştur. kapsar(oda,ev). kapsar(sinif,okul). vardir(oku,ali,kitap,sinif,12). vardir2(git,M,_,Yer,_):-vardir(_,M,_,Yer,_). % M Yer'de bulunmuşsa -> M Yer'e gitmiştir vardir2(F,M,B,Yer1,I):-kapsar(Yer2,Yer1),vardir2(F,M,B,Yer2,I). % M Yer2'de birşey yapmissa ve Yer2 yer1'i kapsiyorsa -> M Yer1'de de ayni seyi yapmistir vardir2(yer,ali,oglenyemegi,mutfak,_):-vardir2(git,ali,_,ev,_). % ali eve gitmisse -> oglenyemegini mutfakta yer. vardir2(yer,ali,oglenyemegi,kantin,_):-vardir2(git,ali,_,okul,_). % ali okula gitmisse -> oglenyemegini kantinde yer. vardir ilişkisi gerçek cümle(bilgi)leri, vardir2 ilişkisi türetilen cümle(bilgi)leri ifade etmektedir. 74

bir çıkarım örneği-3 ?- vardir2(yer,ali,oglenyemegi,Nerede,_). Nerede = kantin; No; Burada sistem; alinin sınıfta bulunduğunu görüp okulda bulunduğu bilgisini edinmiş. Okulda bulunduğuna göre okula gitmiştir çıkarımını yapmış. Okulda gittiğine göre yemeğini de kantinde yemiştir sonucuna ulaşmıştır. vardir(oku,ali,kitap,sinif,12). Cümlesi yerine vardir(oku,ali,kitap,oda,12). Cümlesi olsaydı sistemin cevabı mutfak olacaktır. 75

Özet Atom ve değişken kavramları ‘ve’ , ‘veya’ nın kullanımı Hedefleri Birleştirme Prolog’da kuralların yerlerini ve cümleciklerin yerlerini değiştirmenin programın çalışmasına etkisi Doğal dille yazılmış bir yazıyı, prologla ifade etme 76

Quiz Zamanı! Hilmi, Almanya’ya gittiğinde Mercedes’te çalışır. Hilmi, Amerika’ya gittiğinde Google’da çalışır. Hilmi, İtalya’ya gittiğinde Ferrari’de çalışır. Berlin, Almanya’dadır. Miami, Amerika’dadır. Venedik, İtalya’dadır. Hilmi, Venedik’te gondola bindi. Hikayesini Prolog dilinde modelleyen ve Hilmi hangi firmada çalıştı? sorusuna cevap verebilen kodu yazınız. Süre 15 dakika. 77

Prolog 3

Listeler Liste: elemanlar dizisi Örnek liste : ann, tennis, tom, skiing Prolog ‘da ifadesi: [ann, tennis, tom, skiing]

Listelerin gösterimi (1) Boş bir dizi [ ] Boş olmayan bir dizi İki öğeden oluşur İlk öğe : head liste’nin başı İkinci öğe : tail listenin geri kalanı Örneğimizdeki dizi için Head ve Tail : Head : ann Tail : [tennis, tom, skiing]

Listelerin gösterimi (2) Head|Tail gösterimine örnekler Liste [Head|Tail] değerleri [a, b, c, d, e] Head = [a] Tail = [b, c, d, e] [book, table, pen] Head = [book] Tail = [table, pen] [a,b,[c,d]] Tail = [b,[c,d]] [clock] Head = [clock] Tail = [] [] No head no tail

Listelerin gösterimi (3) head herhangi bir prolog objesi olabilir. Tail liste olmak zorunda. head ve tail özel bir gösterimle liste yapısı haline getirilirler: .(Head, Tail) Yukarıdaki gösterimdeki Tail yine bir listedir.

Listelerin gösterimi (4) İlk örneğimiz aşağıdaki şekilde yazılabilir : .(ann, .(tennis, .(tom, .(skiing, []))))

Listelerin gösterimi (5) Boş liste bütün listelerin sonunda vardır: [skiing] = .(skiing, []) Liste gösteriminde nokta ve parantezli ya da köşeli parantezli notasyon kullanılabilir. Arka planda listelerin işlenmesi ağaçlarla yapılır ancak programın çıkışında listeler köşeli parantezlerle gösterilir. ?- List1 = [a, b, c], List2 = .(a, .(b, .(c, []))). List1 = [a, b, c] List2 = [a, b, c] ?- Hobbies1 = .(tennis, .(music, [])), Hobbies2 = [skiing, food], L = [ann, Hobbies1, tom, Hobbies2]. Hobbies1 = [tennis, music] Hobbies2 = [skiing, food] L = [ann, [tennis, music], tom, [skiing, food] ]

Listelerin gösterimi (6) Aynı dizinin farklı yazılışları [a, b, c] = [ a | [b, c] ] = [a, b | [c] ] = [a, b, c | [] ]

Listelerle İşlemler /*bir listenin elemanlarını yazdırma */ print_list([]). print_list([Head|Tail]):- write(Head), write(' '), print_list(Tail). ?- print_list([9,7,3]). 9 7 3 Yes ?- print_list([9,7,[3,6,8]]). 9 7 [3, 6, 8]

/*bir dizinin eleman sayısını bulmak*/ size([],0). size([H|T],N) :- size(T,N1), N is N1+1. ?- size([34,6,4,3],H). H = 4 ; No ?- size([34,6,[4,6,[2,1],3],3],H).

/*bir dizinin eleman sayısını bulmak*/ size([],0). size([H|T],N) :- size(T,N1), N is N1+1. size([H|T],N) :- N is N1+1, size(T,N1). (?) ?- size([34,6,4,3],H). H = 4 ; No ?- size([34,6,[4,6,[2,1],3],3],H). ?- size([2,4,5],H). ERROR: Arguments are not sufficiently instantiated

member(Element,[Element| _ ] ). member(Element,[ _ |Tail] ) :- /*bir elemanın, listenin elemanı olup olmadığını bulma*/ member(Element,[Element| _ ] ). member(Element,[ _ |Tail] ) :- member(Element,Tail). ?- member(4,[6,4,8]). Yes ?- member([5,6],[6,[5,6],8]). ?- member(5,[6,[5,6],8]). No

Bir liste, bir başka listenin altkümesi midir? sublist(X,L) doğrudur eğer X in tüm elemanları L’nin de elemanı ise. member(X,[X|_]). member(X,[_|R) :- member(X,R). subset([],_). subset([X|R],L) :- member(X,L), subset(R,L).

sum(Xs,N) N, Xs listesindeki rakamların toplamı listetopla([X|[]],X). listetopla([H|T],R):- listetopla(T,G), R is G+H. ?- listetopla([10,2,4,4,7],G). G = 27 ; No

sum1(Xs,Ys) Xs is [x1,x2,...,xn] ve Ys, Xs in her elemanının bir fazlasını içerir. Ys(i)=Xs(i)+1. ?

Sıralı mı? s([_]). s([X|[Y|T]]):-s([Y|T]),X>Y.

/*bir dizinin ilk elemanını silmek*/ removefirst([],[]). removefirst([Head|Tail],Tail). ?- removefirst([8],H). H = [] ; No ?- removefirst([8,7,5],H). H = [7, 5] ; ?- removefirst([[4,5],7,5],H). ?- removefirst([],H).

Listenin İlk N elemanını silmek trim(N,L,L1) doğrudur eğer L1, L’nin ilk N elemanı silinmiş hali ise. trim(0,[],[]). trim(0,[H|T],[H|T]). trim(N,[_|T],L) :- N > 0, M is N - 1, trim(M,T,L). ?- trim(3,[1,4,5,6,7,8,9],U). U = [6, 7, 8, 9] ;

Listeden istenilen elemanı silmek del(X,[X|Tail],Tail). del(X,[Y|Tail],[Y|Tail1]):-del(X,Tail,Tail1). ?- del(a,[1,a,3,7,8],H). H = [1, 3, 7, 8] ; No ?- del(a,[1,a,3,a,a],H). ? H = [1, 3, a, a] ; H = [1, a, 3, a] ;

Listeleri Yazdırmak listeyaz([]). listeyaz([X|Y]):- write(X), nl, listeyaz(Y). ?- listeyaz([2,4,5]). 2 4 5 Yes listeyaz2([]). listeyaz2([L|LL]):- satiryaz(L), nl, listeyaz2(LL). satiryaz([]). satiryaz([X|Y]):- write(X), tab(1), satiryaz(Y). ?- listeyaz2([[2,3,4,5],[4,5]]). 2 3 4 5 4 5 Yes Boşluk yaz

Çeviri ?- translate([1,2,3],H). H = [one, two, three] ; means(0,zero). means(1,one). means(2,two). means(3,three). means(4,four). means(5,five). means(6,six). means(7,seven). means(8,eight). means(9,nine). translate([],[]). translate([H1|T1],[H2|T2]) :- means(H1,H2), translate(T1,T2). ?- translate([1,2,3],H). H = [one, two, three] ; ?- translate(H,[zero,one,nine]). H = [0, 1, 9] ;

Yol Bulma A B C D E F H G ?- go(a,c,YOL). YOL = [a, e, f, c] ; link(g,h). link(g,d). link(e,d). link(h,f). link(e,f). link(a,e). link(a,b). link(b,f). link(b,c). link(f,c). A B C Başlangıç Hedef D E F yollar H G go(X,X,[X]). go(X,Y,[X|T]):- link(X,Z), go(Z,Y,T). ?- go(a,c,YOL). YOL = [a, e, f, c] ; YOL = [a, b, f, c] ; YOL = [a, b, c] ; No 99

Yol Bulma A B C D E F H G link(g,h). link(g,d). link(e,d). link(h,f). link(e,f). link(a,e). link(a,b). link(b,f). link(b,c). link(f,c). link(f,e). link(e,b). A B C Başlangıç Hedef D E F H G yollar ?- go(a,c,G). G = [a, e, f, c] ; G = [a, e, f, e, f, c] ; G = [a, e, f, e, f, e, f, c] ; G = [a, e, f, e, f, e, f, e, f|...] ; … go(X,X,[X]). go(X,Y,[X|T]):- link(X,Z), go(Z,Y,T). 100

Yol Bulma A B C D E F H G link(g,h). link(g,d). link(e,d). link(h,f). link(e,f). link(a,e). link(a,b). link(b,f). link(b,c). link(f,c). link(f,e). link(e,b). A B C Başlangıç Hedef D E F H G yollar ?- go(a,c,[],G). G = [a, e, f, c] ; G = [a, e, b, f, c] ; G = [a, e, b, c] ; G = [a, b, f, c] ; G = [a, b, c] ; No go(X,X,_,[X]). go(X,Y,Visited,[X|T]):- link(X,Z), not(member(Z,Visited)), go(Z,Y,[Z|Visited],T). 101

Değişken kullanmasaydık kaç geçiş yazmamız gerekirdi? go(X,X,V,[X]):-write(V). go(X,Y,Visited,[X|T]):- arc(X,Z), not(member(Z,Visited)), go(Z,Y,[Z|Visited],T). arc([o,B,C, D,E,F], [B,o,C, D,E,F]). arc([o,B,C, D,E,F], [D,B,C, o,E,F]). arc([A,o,C, D,E,F], [o,A,C, D,E,F]). arc([A,o,C, D,E,F], [A,E,C, D,o,F]). arc([A,o,C, D,E,F], [A,C,o, D,E,F]). arc([A,B,o, D,E,F], [A,o,B, D,E,F]). arc([A,B,o, D,E,F], [A,B,F, D,E,o]). arc([A,B,C, o,E,F], [o,B,C, A,E,F]). arc([A,B,C, o,E,F], [A,B,C, E,o,F]). arc([A,B,C, D,o,F], [A,B,C, o,D,F]). arc([A,B,C, D,o,F], [A,o,C, D,B,F]). arc([A,B,C, D,o,F], [A,B,C, D,F,o]). arc([A,B,C, D,E,o], [A,B,o, D,E,C]). arc([A,B,C, D,E,o], [A,B,C, D,o,E]). 1 o 3 4 5 6 6’lı Puzzle ?- go([1,o,3,4,5,6],[4,o,3,5,1,6],[],_). [[4, o, 3, 5, 1, 6], [o, 4, 3, 5, 1, 6], [5, 4, 3, o, 1, 6], [5, 4, 3, 1, o, 6], [5, o, 3, 1, 4, 6], [o, 5, 3, 1, 4, 6], [1, 5, 3, o, 4, 6], [1, 5, 3, 4, o, 6], [1, o, 3, 4, 5, 6], [o, 1, 3, 4, 5, 6]] Yes Değişken kullanmasaydık kaç geçiş yazmamız gerekirdi? 102 102

Prolog 4 cut&fail db değişimi

Backtracking Control Backtracking’i kontrol etmek için iki operatör: CUT -!, argüman almaz, her zaman true, backtracking’i durdurur. FAIL – her zaman false, backtracking’e devam ettirir. loop :- goal, fail. loop. Loop çağrıldığında goal her seferinde farklı değerler için tekrarlı olarak tüm olası alternatifler bitene kadar çalıştırılır, En sonunda Loop true olarak tamamlanır.

Not Dönüşümü-1 Bir sınıftaki kişilerin aldıkları sayısal notları, harfli notlara çeviren program. Fail var, cut yok ?- sinif. sinif listesi ahmet bollu 23 E mhmet bollu 38 D mhmet bollu 38 E zhmet bollu 53 C zhmet bollu 53 D zhmet bollu 53 E shmet bollu 63 C shmet bollu 63 D shmet bollu 63 E chmet bollu 73 B chmet bollu 73 C chmet bollu 73 D chmet bollu 73 E qhmet bollu 83 A qhmet bollu 83 B qhmet bollu 83 C qhmet bollu 83 D qhmet bollu 83 E No writelist([]):-nl. writelist([H|T]):-write(H),write(‘ '),writelist(T). sinifliste(ahmet,bollu,23). sinifliste(mhmet,bollu,38). sinifliste(zhmet,bollu,53). sinifliste(shmet,bollu,63). sinifliste(chmet,bollu,73). sinifliste(qhmet,bollu,83). notbul(N,G):-N>80,G='A',!. notbul(N,G):-N>70,G='B',!. notbul(N,G):-N>50,G='C',!. notbul(N,G):-N>30,G='D',!. notbul(N,G):-N>10,G='E',!. sinif:- writelist([sinif,listesi]), sinifliste(A,S,N), notbul(N,G), writelist([A,S,N,G]),fail. Fail yok, cut var/yok ?- sinif. sinif listesi ahmet bollu 23 E Yes Fail var, cut var ?- sinif. sinif listesi ahmet bollu 23 E mhmet bollu 38 D zhmet bollu 53 C shmet bollu 63 C chmet bollu 73 B qhmet bollu 83 A No

Not Dönüşümü-2 ! komutunun kullanıldığı durumla, kullanılmadığı durum arasındaki fark nedir? Fail komutunun kullanıldığı durumla, kullanılmadığı durum arasındaki fark nedir? !’sız kullanırsak yüksek notlu bir öğrenci her harfsel notu alacaktır. Fail kullanılmazsa sadece bir öğrencinin not dönüşümü yapılacaktır. Birbirini dışlayan kurallar için (if then else / case) Cut kullanılmalı Tekrar arama yaptırmak için fail kullanılmalı.

Cut p :- a,b. p :- c,d. (a  b)  (c  d) p :- a, !, b. (a  b)  (not(a)  c  d) p :- a, b, !. (a  b)  ((not(a)  not(b))  c  d) p :- !,a, b. ? (a  b)

Max! X ve Y’den büyük olanı bulmak: If X >= Y, then X büyük; If X < Y, then Y küçük. Prolog’da ifadesi: max(X, Y, X) :- X >= Y. max(X, Y, Y) :- X < Y. Diğer alternatif: Else Y büyük. In Prolog: max(X, Y, X) :- X >= Y, !. max(X, Y, Y).

Member! member(X, [X | L]). member(X, [Y | L]) :- member(X, L). ?- member(X, [a,b,c]). X = a ; X = b ; X = c ; no member(X, [X | L]) :- !. sadece tek çözüm üretilir.

Add! Listeye eleman ekleme (tekrar eden eleman olmadan) add(X, L, L1) Kural: If X zaten L de varsa then L1 = L; Else L1 ->[X | L]. (L’ye X’i ekle L1’e ata) Kod: add(X, L, L) :- member(X, L), !. % cut sayesinde X, L’de varsa alt satıra inilmez add(X, L, [X | L]). Uygulama: ?- add(a, [b,c], L). L = [a,b,c] ?- add(b, [b,c], L). L = [b,c]

Fail yeniden father(leonard,katherine). father(carl,jason). father(carl,marilyn). everybody:- father(X,Y), write(X),nl, fail. everybody. fail bir sonuç bulunsa bile arama işlemine devam edilmesini sağlar.

if then else ``if P then Q else R'' S :- P, !, Q. S :- R.

istisnalar Ayşe yılan haricindeki tüm hayvanları sever. Kurallar: If X yılansa, then “Mary likes X” doğru değil; Else, if X hayvansa, then “Mary likes X” doğru. Kod: likes(mary, X) :- snake(X), !, fail. likes(mary, X) :- animal(X). Daha Kısa: likes(mary, X) :- snake(X), !, fail ; animal(X).

Kullanıcı ile Etkileşim Okunan bilginin sonunu ifade eder. kup:- read(X), islem(X). islem(bit):-!. islem(N):- C is N*N*N, write(C), nl, kup. ?- kup. |: 4. 64 |: 7. 343 |: 1. 1 |: bit. Yes Arama işlemini durdurur. Satır atla

bir evin içerisinde sizin komutlarınızla ilerleyen robot programı ?- basla(a). a |: sag. b |: asa. Yanlis yon |: sol. d e |: yuk. c %komutlar(sag,sol,yuk,asa) her gittiği yeri yazar. gec(a,b,sag). gec(a,d,asa). gec(b,c,sag). gec(d,e,sag). gec(c,e,asa). gec(b,a,sol). gec(d,a,yuk). gec(c,b,sol). gec(e,d,sol). gec(e,c,yuk). basla(X):-write(X),nl, read(Hareket), varmi(gec(X,Y,Hareket)), basla(Y). varmi(gec(X,Y,Hareket)):-gec(X,Y,Hareket). varmi(gec(X,Y,Hareket)):-not(gec(X,Y,Hareket)), write('Yanlis yon'),nl,read(H),varmi(gec(X,Y,H)).

Database’i değiştirmek ?- sehir(istanbul). ERROR: Undefined procedure: sehir/1 ?- assert(sehir(istanbul)). Yes ?- sehir(N). N = istanbul ; No ?- retract(sehir(X)). X = istanbul ;

Database’e kural eklemek ?- assert(canli(X):-hayvan(X)). X = _G350 ; No ?- assert(hayvan(zebra)). Yes ?- assert(hayvan(akrep)). ?- canli(X). X = zebra ; X = akrep ; ?- retract(hayvan(X)).

asserta, assertz ?- assert(p(b)),assertz(p(c)),assert(p(d)),asserta(p(a)). Yes ?- p(K). K = a ; K = b ; K = c ; K = d ; No Başa ekler Sona ekler

Fibonacci- 1 1 2 3 5 8 … :-dynamic fib2/2. fib(1,1). fib2(1,1). fib2(N,F):- N>2, N1 is N-1,fib2(N1,F1), N2 is N-2,fib2(N2,F2), F is F1+F2, asserta(fib2(N,F)). fib(1,1). fib(2,1). fib(N,F):- N>2, N1 is N-1,fib(N1,F1), N2 is N-2,fib(N2,F2), F is F1+F2. ?- fib(6,G). G = 8 ; No ?- fib(6,8). Yes

fibonacci ?- fib(20,F). F = 6765 Yes ?- fib2(20,F). ?- fib2(30,F). ERROR: Out of local stack Yavaş Cevap Hızlı Cevap ? Cevap YOK ?

fib

fib2 Elde zaten var, yeniden hesaplanmıyor

Listing Memory’de o an olan bilgileri ve kuralları ekrana yazar. ???? 2 ?- assert(bitki(gul)). Yes 3 ?- assert(bitki(meneksel)). 4 ?- listing. hayvan(kedi). hayvan(kuzu). canli(A) :- hayvan(A). bitki(A). :- dynamic bitki/1. bitki(gul). bitki(meneksel). 5 ?- hayvan(tosbaga). ???? Memory’de o an olan bilgileri ve kuralları ekrana yazar. 1 ?- listing. hayvan(kedi). hayvan(kuzu). canli(A) :- hayvan(A). bitki(A). Yes 123

PROLOG dilinde basit örnekler

YOL programı % Author: % Date: 04/14/2005 yol(canakkale, izmir). yol(izmir,aydin). yol(izmir,bursa). yol(bursa,izmir). yol(aydin,antalya). yol(canakkale,bursa). uzunyol(X,Y):-yol(X,Y). uzunyol(X,Y):-uzunyol(X,Z),yol(Z,Y),write(Z),!. bursa aydın çanakkale izmir antalya ?- uzunyol(canak,Y). Y = izmir ; Y = bursa ; izmir Y = aydin ; No

?- yol(izmir,X). X = aydin ; X = bursa ; ?- uzunyol(bursa,antalya). izmiraydin Yes uzunyol(bursa,canak). izmir No

Sonsuz döngünün (kendini yineleme) önlenmemesi durumu ?- uzunyol(canak,X). X = izmir ; X = bursa ; izmir X = aydin ; bursa izmiraydin X = antalya ; izmirbursa bursaizmir izmiraydinizmirbursaizmir bursaizmiraydin izmiraydinizmirbursaizmiraydin X = antalya … Sonsuz döngünün (kendini yineleme) önlenmemesi durumu

Yol_araç programı ?- uzunyol(canak,antalya). yol(canak, izmir,tren). yol(izmir,aydin,araba). yol(izmir,bursa,yaya). yol(bursa,izmir,yaya). yol(aydin,antalya,ucak). yol(canak,bursa,araba). uzunyol(X,Y):-yol(X,Y,K),write(K). uzunyol(X,Y):-uzunyol(X,Z),yol(Z,Y,K),write(Z),write(K),!. ?- uzunyol(canak,antalya). tren araba tren izmir araba aydin ucak

Örnek: Listenin eksi değerli elemanlarının elenmesi Bu program listedeki eksi değerli elemanları eleyerek yeni liste oluşturuyor liste=integer*. eksileri_ele(liste,liste). eksileri_ele([],[]). eksileri_ele([Bas|Kuyruk],IslenmisKuyruk):-Bas<0,!,eksileri_ele(Kuyruk,IslenmisKuyruk). eksileri_ele([Bas|Kuyruk],[Bas|IslenmisKuyruk]):-eksileri_ele(Kuyruk,IslenmisKuyruk). SWI-Prolog console for thread 2 1 ?- eksileri_ele([2,-5],Yeni). Yeni = [2]. 2 ?- eksileri_ele([2,-45,3,3,4,-5,-45],Yeniliste). Yeniliste = [2, 3, 3, 4].

Listenin Elemanlar sayısının hesaplanması Programın temel çalışma mantığı böyledir: Liste boş [] ise, listedeki eleman sayısı 0’dır. Boş değilse eleman sayısı Kuyruk_uzunluk+1 ile bulunabilir. Liste _uzunluk yüklemi kendisini çağırarak listenin uzunluğunu bulur. liste=integer*. liste_uzunluk(liste,integer). liste_uzunluk([],0). liste_uzunluk([_|Kuyruk],Eleman_sayisi):- liste_uzunluk(Kuyruk,Kuyruk_uzunluk), Eleman_sayisi is Kuyruk_uzunluk+1. SWI-Prolog console for thread 2 1 ?- liste_uzunluk([1,2],Eleman_sayisi). Eleman_sayisi = 2. 2 ?- liste_uzunluk([1,2,5,7],Eleman_sayisi). Eleman_sayisi = 4.

“Patron” programı amir(ali,ahmet). amir(ahmet,mehmet). amir(mehmet,veli). amir(veli,fatma). amir(ayse,ahmet). amir(aysun,mehmet). patron(X,Y):-amir(X,Y). patron(X,Y):-amir(X,Z),patron(Z,Y). ?- patron(ali,X). X = ahmet ; X = mehmet ; X = veli ; X = fatma ; No

üç renk sorunu % Author: % Date: 04/14/2005 d(red,blue). d(red,green). d(green,red). d(blue,red). d(blue,green). colorable(W,NT,SA,Q,NSW,V):-d(W,NT),d(W,SA),d(NT,Q),d(Q,NSW),d(NT,SA),d(NSW,V), d(NSW,SA),d(V,SA). ?- colorable(W,NT,SA,Q,NSW,V). W = red NT = blue SA = green Q = red NSW = blue V = red üç renk sorunu

Üç renk sorunu (bir başka çözüm) color(A,B,C,D,E):-next(A,B), next(C,D), next(A,C), next(A,D), next(B,C), next(B,E), next(C,E), next(D,E). next(X,Y):-selectcolor(X),selectcolor(Y), X \== Y. selectcolor(red). selectcolor(green). selectcolor(blue). selectcolor(yellow). SWI-Prolog console for thread 2 1 ?- color(X,Y,Z,K,L). X = red, Y = green, Z = blue, K = green, L = red |

örnek kişi(ali). kişi(ahmet). kişi(mehmet). kişi(fatma). kişi(ayşe). kişi(mahmut). kişi(nesrin). kişi(mustafa). baba(ali,ahmet). baba(ali,mehmet). baba(mustafa,ayşe). anne(fatma,mehmet). kardeş(mahmut,fatma). dayı(X,Y):-anne(Z,Y),kardeş(X,Z).

örnekler 1. toplama(C,X,Y):-C is X+Y. 2. student(ali). student(ahmet). ders(ali,fizik). ders(ahmet,fizik). ders(ali, matematik). sinav(X,Y):-student(X),ders(X,Y). 3. factorial(0,1). factorial(A,B) :- A > 0, C is A-1, factorial(C,D), B is A*D.

Düşmanımın düşmanı benim dostumdur

Bulmaca Ali,Akif ve Ahmet’in bazı özellikleri verilmiştir.Bu özelliklere göre onların tüm özelliklerini(boyunu,arabasının rengini ve ne tür müzik sevdiğini) bulmalı Ortaboylunun arabası sarıdır; Uzunboylu türkü sever; Alinin arabası mavidir; Ahmet uzunboyludur; Kırmızı arabası olan pop sever; Akif rep sever.

Bulmaca programı ad(ali). ad(akif). ad(ahmet). boy(uzun). boy(orta). renk(kirmizi). renk(mavi). renk(sari). muzik(rep). muzik(turku). muzik(pop). kisi1(X,Y,Z,K):-ad(X),boy(Y),renk(Z),muzik(K),Y=orta,Z=sari. kisi2(X,Y,Z,K):-ad(X),renk(mavi),boy(Y),muzik(K),X=ali. kisi3(X,Y,Z,K):-ad(ali),renk(mavi),muzik(K),boy(Y). kisi4(X,Y,Z,K):-ad(X),boy(Y),renk(Z),muzik(K),X=ahmet,Y=uzun. kisi(X1,Y1,Z1,K1,X2,Y2,Z2,K2,X3,Y3,Z3,K3):-kisi1(X1,Y1,Z1,K1),kisi2(X2,Y2,Z2,K2),kisi3(X3,Y3,Z3,K3),!.

Prolog’da aritmetik işlemlere örnek carpı,toplam=integer. toplama_yap(toplam,toplam,toplam). carpı_yap(carpı,carpı,carpı). toplama_yap(X,Y,Toplam):-Toplam is X+Y. carpı_yap(X,Y,Carpı):-Carpı is X*Y. ishlem(X,Y,Son):-toplama_yap(X,Y,Son);carpı_yap(X,Y,Son) Örnek: 1 ?- ishlem(10,34,X). X = 44 ; X = 340. islem yüklemi 10 ve 34 sayıları üzerindeki işlemlerin sonuçlarını gösteriyor. 44 sayısından sonraki “;” sonraki çözümü göstermek içindir. eşitlik “is” ile ifade ediliyor

Kaynaklar PROLOG Programming for Artificial Intelligence, Bratko, I., 3rd Edition, Addison-Wesley, 2001 http://www.coli.uni-saarland.de/~kris/learn-prolog-now Tacettin Ayar, Prolog Ders Notları