YZM 3217 YAPAY ZEKA DERS#7: PROLOG DİLİ

Benzer belgeler
YZM 3217 YAPAY ZEKA DERS#7: PROLOG DİLİ

Prolog da Veri Türleri. Prolog la 4.Hafta. Atom lar (2) Atom lar (1)

Dekleratif Programlama. Örnek : Aile Ağacı. SWI-Prolog. Prolog Dekleratif programlama dili

Sorguların Çalışması. Kurallar. ?-anne(ayse,ahmet). ?-anne(ayse,ahmet). Geriye Doğru İz Sürme

İçerik. Prolog la 5.Hafta. soru. Hedef Birleştirme Hasta mı? Geçen Hafta Hedef Birleştirme Çıkarımlar.

Uygulamalı Yapay Zeka. Dr. Uğur YÜZGEÇ Ders 2: Prolog Giriş

PASCAL PROGRAMLAMA DİLİ YAPISI

BTP 207 İNTERNET PROGRAMCILIĞI I. Ders 8

Bilgisayar Teknolojileri Bölümü Bilgisayar Programcılığı Programı. Öğr. Gör. Cansu AYVAZ GÜVEN

1 PROGRAMLAMAYA GİRİŞ

Dr. Fatih AY Tel: fatihay@fatihay.net

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

BASİT C PROGRAMLARI Öğr.Gör.Dr. Mahmut YALÇIN

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

Nesne Yönelimli Programlama

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

Endüstri Mühendisliği Bölümü Bilgisayar Programlama Ders Notları

Sınav tarihi : Süre : 60 dak. a) ABCDE b) BCDE c) ABCD d) kod hatalı e) BCD

PROGRAMLAMAYA GİRİŞ DERS 2

Öğr. Gör. Serkan AKSU 1

İnternet Programcılığı Dersi 2.Dönem Ders Notu

BİLGİSAYAR BİLİMİ DERSİ (KUR 1) PYTHON PROGRAMLAMA DİLİ ÇALIŞMA KÂĞIDI - 1

Bilgisayar Programlama MATLAB

JAVASCRIPT JAVASCRIPT DİLİ

3/7/2011. ENF-102 Jeoloji 1. Tekrar -- Değişken Tanımlamaları (Definition) ve Veri Türleri (Data Type) Veri Tanımları ve Mantıksal Đşlemler

Algoritma ve Akış Diyagramları

Veri Yapıları. Amaçlar: Temel Veri Yapılarını Tanımlamalı Veri Yapılarını Veri Modeli ve Türlerini Öğreneceksiniz. İçindekiler:

HSancak Nesne Tabanlı Programlama I Ders Notları

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

BİLİŞİM TEKNOLOJİLERİ 6. SINIF DERS NOTLARI 2

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

BİLGİSAYAR MÜHENDİSLİĞİ ALGORİTMA VE PROGRAMLAMA II 2.HAFTA SWİTCH (CASE), SAYAÇLAR, DÖNGÜLER,

Dr. Fatih AY Tel: fatihay@fatihay.net

Internet Programming II

PHP'ye Giriş Türkiye PHP Grubu - Linux Şenlikleri PHP Eğitim / Tanıtım Seminerleri Ankara, 11 Mayıs 2006 Hidayet Doğan <hdogan@hido.

İsimler ve Kapsam. 24 Şubat Programlama Dilleri - Pamukkale Üniversitesi 1

Ders Tanıtım Sunumu. Internet Programming II. Elbistan Meslek Yüksek Okulu Bahar Yarıyılı. Öğr. Gör. Murat KEÇECİOĞLU 1

4- Turbo Pascal Bilgisayar Programlamada Kullanılan Şart Yapıları

Değişkenler. Geçerli değişken isimleri : baslamazamani, ad_soyad, x5 Geçersiz değişken isimleri : 3x, while

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : dak.

Bilgisayar Programlama

Genel Programlama I

ALGORİTMA VE PROGRAMLAMA I

Javascript. 1) Notepad++ aşağıdaki kodları yazıp deneme.html olarak kaydedelim. 2) Biraz önceki sayfa sadece html kodların içeriyordu.

Programlama Dillerinde Kullanılan Veri Tipleri

Nesne Tabanlı Programlama

Bölüm 8. İfade Seviyesindeki Kontrol Yapıları ISBN

Java da Program Denetimi ve Operatörler

Nesne Tabanlı Programlama

Bölüm 2 - C ile Programlamaya Giriş

1) Programlama dillerinin temel kavramlarını öğrenir. 1,2,4 1

Hafta 12 Karakter Tutan Diziler

Programlama Dilleri. C Dili. Programlama Dilleri-ders02/ 1

ELN1001 BİLGİSAYAR PROGRAMLAMA I

BMT 101 Algoritma ve Programlama I 6. Hafta. Yük. Müh. Köksal Gündoğdu 1

HSancak Nesne Tabanlı Programlama I Ders Notları

Regular Expressions Version 0.1

BÖLÜM 6: KARŞILAŞTIRMALI KONTROL YAPILARI

WEB PROGRAMLAMA. PHP Temelleri 2. Dr. Erman Yukselturk

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Oracle Database 11g: Introduction to SQL

Yazılım Nedir? 2. Yazılımın Tarihçesi 3. Yazılım Grupları 4 Sistem Yazılımları 4 Kullanıcı Yazılımları 5. Yazılımın Önemi 6

HSancak Nesne Tabanlı Programlama I Ders Notları

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

C Programlama Dilininin Basit Yapıları

İÇERİK PROGRAMLAMAYA GİRİŞ ALGORİTMA AKIŞ DİYAGRAMLARI PROGRAMLAMA DİLLERİ JAVA DİLİNİN YAPISI JAVA DA KULLANILAN VERİ TİPLERİ JAVA DA PROGRAM YAZMA

Bölüm 10: PHP ile Veritabanı Uygulamaları

Visual Basic 6.0. Anadolu Üniversitesi Endüstri Mühendisliği Bölümü. Değişkenler ve Veri tipleri. Ders Notları

Programlama Dilleri 1. Ders 4: Diziler

Programlama Dili Prensipleri. Lab Notları 8 ve 9

ORACLE DA KÜRSÖRLER. Gerekli sistem değişkenleri

Algoritma ve Programlamaya Giriş

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

C#(Sharp) Programlama Dili

ALP OĞUZ ANADOLU LİSESİ EĞİTİM ÖĞRETİM YILI BİLGİSAYAR BİLİMİ DERSİ 2.DÖNEM 2.SINAV ÖNCESİ ÇALIŞMA SORULARI VE YANITLARI

C# Programlama Dili. İlk programımız Tür dönüşümü Yorum ekleme Operatörler

Göstericiler (Pointers)

Nesne Yönelimli Programlama

Lambda İfadeleri (Lambda Expressions)

enum bolumler{elektronik, insaat, bilgisayar, makine, gida};

Nesne Tabanlı Programlama Dersi Edirne Kız Teknik ve Meslek Lisesi

SQL'e Giriş. SELECT Deyimi. SQL Komutları. 1. DDL (Data Definition Language - Veri Tanımlama Dili)

AVRASYA UNIVERSITY. Dersin Verildiği Düzey Ön Lisans (X ) Lisans ( ) Yüksek Lisans( ) Doktora( )

C PROGRAMLAMA D İ L İ

Genel Kullanılış 1: [değişken ismi] = [değişken ismi] [işlem] [sayı veya string ifade veya değişken]

5.HAFTA. Sınıf ve Nesne Kavramı, Metot Oluşturma, Kurucu Metot, this Deyimi

BİLGİSAYAR PROGRAMLAMA DERSİ

Dersin Sorumlusu: Yrd. Doç. Dr. Birol SOYSAL. Sunumları Hazırlayan: Doç. Dr. Bülent ÇAKMAK

BİLGİSAYAR UYGULAMALARI Şırnak Üniversitesi Mühendislik Fakültesi Güz Dönemi Arş.Gör. Eren DEMİR ve Arş.Gör. Veysel KIŞ (

Öğr. Gör. Cansu AYVAZ GÜVEN VERİTABANI-II. Değişken Tanımlama Ve Akış Kontrol Deyimleri

BİLGİSAYAR PROGRAMLAMA MATLAB

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI


DAO İLE SQL KOMUTLARI. Sql komutlarını artık veri tabanında kullanmaktan başka çaremiz yok arkadaşlar. Şimdi bu sql derslerimize başlayalım.

Matematikte Bilgisayar Uygulamaları. Hafta 2 Dr. Murat GEZER

Transkript:

YZM 3217 YAPAY ZEKA DERS#7: PROLOG DİLİ

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 Sabitler için Küçük harfler Değişkenler için Büyük harfler Program çıktıları çok sade Prolog da olmayanlar For, while döngüleri IF THEN yapısı Diziler ANCAK öz yinelemeli fonksiyonlarla yukarıdakiler sağlanır 2

Dekleratif Programlama Prolog Dekleratif programlama dili Prosedürel programlamada adım adım ne yapılması gerektiğini kodlarız (Ö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 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

Örnek : Aile Ağacı pam tom bob liz ann pat jim 4

İ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ı (atomlar).: sonlandırıcı 5

Aile Ağacı Tüm aile ağacını aşağıdaki Prolog ifadeleriyle tanımlarız: pam ann bob tom pat liz parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). parent(bob, pat). parent(pat,jim). jim 6

Prolog Sorguları?- 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) 7

İlişkileri sorgulamak-1 Bob, Pat in ebeveyni mi??- parent(bob, pat). yes Tom, Ben in ebeveyni mi? :?- parent(tom, ben). no pam ann bob tom pat liz jim 8

İ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 pam ann bob jim tom pat liz 9

İ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 ; pam ann bob jim tom pat liz 10

İ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 X parent Y parent jim grandparent 11

İ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 X parent Y parent jim grandparent 12

Çocuk ilişkisi pam ann bob jim tom pat liz 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). 13

Kurallar Kurallar iki parçadan oluşur: head : böyledir (sonuç, çıkarım) body : eğer offspring(y, X) :- head parent(x, Y) body 14

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ı: 1. offsprings ilişkisi için gerçek ara 2. Yok => offsprings ilişkisi için kural varsa uygula 3. Kuralda X tom la, Y liz le eşleştirilerek kuralın bir gerçeklemesi bulunur: offspring(liz,tom) :- parent(tom,liz). 4. 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 15

Ö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 : parent X Y female mother mother(x, Y) :- parent(x, Y), female(x). 16

Ö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 parent İlişkinin Prolog da ifadesi : sister(x, Y) :- parent(z, X), parent(z, Y), female(x). X Z sister parent Y Sorgu: sister(x,pat). 17

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

Direkt Ata İlişkisi parent X Z predecessor 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). 19

Dolaylı (Endirekt) Ata İlişkisi X X X parent parent parent Y predecessor Y1 Y1 parent parent predecessor parent Z Y2 Y2 predecessor parent parent Z Y3 parent Z 20

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). Problemleri: Uzun Büyük büyük büyük Ataları bulamaz. predecessor(x,z) :- parent(x,y1), parent(y1,y2), parent(y2,y3), parent(y3, Z). 21

Yeni Ata Programı Çözüm: öz yineleme kullanmak Tüm X ve Z ler için, Prolog ifadesi: 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 predecessor(x, Z) :- parent(x, Y), predecessor(y, Z). predecessor parent X Y predecessor Z 22

Sonuç Ata İlişkisi parent(pam, bob). parent(tom, bob). parent(tom, liz). PR1 parent(bob, ann). PR2 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). 23

Cevap nasıl bulunur? Prolog hedefe ulaşmak için programdaki yazılış sırasına göre cümlecikleri kullanır. by rule pr1 parent(tom, pat) no predecessor(tom, pat) Y = bob by rule pr2 parent(tom, Y) predecessor(y, pat) predecessor(bob, pat) by fact parent(tom, bob) by rule pr1 parent(bob, pat) yes 24

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

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(y,x):- futbolcu(x), taraftar(y), aynitakim(x,y), kendikalesinegolatar(x). sever(y,x):- futbolcu(x), taraftar(y), karsitakim(x,y), kendikalesinegolatar(x). 26

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.

Prolog da Veri Türleri Prolog bir veri türünü onun şeklinden tanır. Atom Sayı Değişken Sabitler gibi düşünülebilir Prolog herhangi bir veri tanımına ihtiyaç duymaz. 31

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

Atomlar (2) Atom lar 3 farklı şekilde oluşturulabilir: 1. 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 33

Atomlar (3) 2. Özel karakterlerden oluşan string ler ile: <---> ======>.:. ::= Özel anlamı olan string ler kullanılmamalı: :- 34

Atomlar (4) 3. 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. 35

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 ; No 36

Değişkenler (1) 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 37

Değişkenler (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 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ı? X Y 38

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 39

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 = 207.23 ; No?- +(200,0.03,G). G = 200.03 ; No 40

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

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

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

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 44

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

Turnuva 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?- oyuncu(b,10),oyuncu(b2,10),b\==b2. B = ahmet B2 = ali ; B = ahmet B2 = huseyin ; B = ali B2 = ahmet ; B = ali B2 = huseyin ; B = huseyin B2 = ahmet ; B = huseyin B2 = ali ; No 46

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

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

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

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

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

parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). parent(bob, pat). parent(pat,jim). pred2(x, Z) :- parent(x, Y), pred2(y, Z). pred2(x, Z) :- parent(x, Z). 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 5 pr1 parent(ann,y ) parent(bob, Y''') pred2(y''', pat) pred2(y,pat) no 4 Y'' = ann pred2(ann, pat) pr2 parent(bob, Y'') pred2(y'', pat) pr1 parent(ann, pat) no 1 3 6 7 2 pr1 pred2(tom, pat) pr1 parent(tom, Y') pred2(y', pat) Y' = bob pred2(bob, pat) pr1 Y'' = pat pr2 13 parent(bob, pat) yes ann ile başlayan parent ilişkisi bulamadığından No jim ile başlayan parent ilişkisi bulamadığından No 10 pr1 parent(jim, Y'''') pred2(y'''', pat) no pr1 parent(pat,y ) parent(pat, Y''') pred2(y,pat) pred2(y''', pat) 9 8 pred2(jim, pat) pred2(pat, pat) Y''' = jim pr2 parent(pat, pat) 11 no parent(jim, pat) no pr2 12 52

parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). parent(bob, pat). parent(pat,jim). parent(tom, pat) no pred3(tom, pat) pred3(tom,y ) pred3(tom', Y') parent(y', parent(y,pat) pat) pred3(x, Z) :- parent(x, Z). pred3(x, Z) :- pred3( X, Y), parent(y, Z). parent(tom, Y') parent(y', pat) Y' = bob parent(bob, pat) yes 53

parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). parent(bob, pat). parent(pat,jim). pred4(x, Z) :- pred4(x, Y), parent(y, Z). pred4(x, Z) :- parent(x, Z). pred4(tom, pat) pred4(tom, Y') parent(y', pat) pred4(tom, Y'') parent(y'', Y') parent(y', pat) pred4(tom, Y''') parent(y''', Y'') parent(y'', Y') parent(y', pat) 54

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

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). 1423 Yes?- gidilir(4,1). 42356 Yes?- gidilir(3,1). 35 No 56

Aritmetik & Karşılaştırma +, -, *, /, mod is: hesaplamaya zorlamak (force) için: X = 1 + 2. X=1+2 X is 1 + 2. 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ı? 57

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 58

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

guc(x,y,z) X Y =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

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

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.