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 kurulmuştur. - Gerçekler ve kurallardan oluşur. - Output çok sadedir.
Prolog’da bulunmayanlar - For döngüleri - While repeat döngüleri - If – Then yapısı - Go to komutu - Diziler Bunların yerine öz yinelemeli fonksiyonlar kullanılmıştır.
Prolog dekletatif bir dildir Prosedürel bir programlama da bilgisayara adım adım ne yapması gerektiğini söyleriz. Dekletatif bir programlama da ise bir durum belirtilir. Bu duruma göre derleyici veya yorumlayıcı bir çözüm üretir. - Prolog bir cümlenin doğru veya yanlış - Bir cümlenin doğru veya yanlış olması için değişkenlerin ne olması gerektiğin söyleyebilir.
Prologda ilişkilerin tanımlanması “Ahmet’in ebeveyni Ayşe’dir.” ifadesinin Prolog’da tanımlanması: parent(Ahmet,Ayse) - Parent : ilişkinin ismi - Ahmet, Ayşe : ilişkinin argumanları
Sorgulama yapılması Ayşe Ahmet’in ebeveyni midir? ?-parent(Ayse, Ahmet) cevap> yes Ayşe Mehmet’in edeveyni midir? ?-parent(Ayse, Ahmet) cevap>no
Prolog ile Doğal Dil karşılaştırılması Bütün çocuklar küçüktür. - kisa(X):-cocuk(X). Bütün erkek çocukları araba sever. - sever(X,araba):-erkek(X),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).
Prolog ile Doğal Dil 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 takamı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).
Genel olarak Prolog programları Prolog programları küçük cümlelerden oluşur. Bu cümlelerde üç çeşittir: - Fact: Koşulsuz daima doğru olan gerçekler. - Rules: Kurallara göre doğru olabilen yargılar. - Questions: Veritabanını sorgulamak için kullanılan cümleciklerdir.
Prolog’da veri türleri Prolog veri türünü onun şeklinden tanır. Herhangi bir tanımlamaya ihtiyacı yoktur. Veri türleri: - Atomlar - Sayılar - Değişkenler
Atomlar 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 + - * / = :. & _ ~
Atomlar Atomlar 3 farklı şekilde ifade edilebilir: 1- Harf (ancak küçük harf olmalıdır), rakam veya alt çizgiden oluşan stringler ile. anna nil x25 x_25 2- Özel karakterlerden oluşan stringler ile ======> ….:. 3- Tek tırnak (’) arasına alınan karakterler ile ‘Anna’ ‘Nil’
Sayılar İki çesit sayı tanımlaması vardır. Bunlar tam sayı ve ondalıklı sayıdır. topla(X,Y,Z):-Z is X+Y. ?- topla(2,0.3,C). C = 2.3 ; No ?- topla(200,0.0003,C). C = ; No
Değişkenler 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
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 eşittir r1 eşittir somebody_has_a_child :- parent(X, Y). ancak farklıdır somebody_has_a_child :- parent(X, X).
Bir çıkarım örneği 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.
Bir çıkarım örneği 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.
Bir çıkarım örneği vardir ilişkisi gerçek cümle(bilgi)leri, vardir2 ilişkisi türetilen cümle(bilgi)leri ifade etmektedir. ?- 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.