Successfully reported this slideshow.
PrologPROgramming inLOGic      Hazırlayan: Ayşenur Genç
Giriş & TarihçeBilgisayar, simgeleri işlemek için kullanılan bir makine‘ olarak tanımlanmaktadır.Görünüşte yalın olan bu t...
Prolog Dilinin Özellikleri    PROgrammig in LOGic    Semboller üzerinde çalışma    Problemlerin çözümünü tanımlama yeri...
Prolog Dilinin ÖzellikleriProlog’la nesneler arası ilişkiler kolaylıkla ifade edilebilir.Kullanıcı bilgi tabanındaki veril...
Prolog Bildirgesel Bir DildirPROLOG doğrudan mantığa dayalı bildirgesel (deklerativ) bir program dilidir.Burada kullanılan...
Bildirgesel (Deklerativ)           ProgramlamaProlog bir cümlenin doğru / yanlış olduğunu  cümle içinde değişken(ler) va...
Diğer Dillerle KarşılaştırmaProlog’da olmayanlar  For döngüleri  Repeat While döngüleri  IF..THEN yapısı  Goto komutu ...
Örnek : Aile Ağacı   pam          to m         bob           li z   ann          pat         j im                         ...
İlişkileri gerçek(fact)lerle tanımlama “Tom, Bob’un ebeveynidir” gerçeğinin prolog’da ifadesi :                  parent(to...
Tüm aile ağacını aşağıdaki Prologifadeleriyle tanımlarız:            parent(pam, bob).            parent(tom, bob).       ...
İlişkileri sorgulamak-1Bob, Pat’in ebeveyni mi?       ?- parent(bob, pat).       Prolog’un cevabı: yesTom, Ben’in ebeveyni...
İlişkileri sorgulamak-2Liz’in ebeveyni kimdir?          ?- ebeveyn(Kim, liz).          Prolog’un cevabı :          Kim = t...
İlişkileri sorgulamak-3Kimler kimlerin çocuğudur?        ?- ebeveyn (Ebeveyn, Cocuk).        Ebeveyn = pam        Cocuk = ...
İlişkileri sorgulamak-4  Jim’in büyük ebeveyni (grandparent)  kimdir?                                                   X ...
İlişkileri sorgulamak-5Torun ilişkisi de benzerbiçimde tanımlanabilir.                                                  to...
İlişkileri sorgulamak-6Ann ve pat’in ortak ebeveyni var mı?         ?- parent(Ebeveyn, ann), parent(Ebeveyn, pat).        ...
SWI-Prolog        Gerçek ve kurallar        prolog’a        yüklenir.Sorgular komut        satırından girilerek        çal...
Doğal Dil vs. PrologBütün çocuklar kısadır.kisa(X):-cocuk(X).Bütün erkek çocuklar arabaları sever.sever(X,araba):-erkek(X)...
Prolog’da Veri TürleriProlog bir veri türünü onun şeklinden tanır.Prolog herhangi bir veri tanımına ihtiyaçduymaz.        ...
Atom’lar (1)Atom’lar aşağıdakilerde oluşan string’lerdir.   Büyük harf                  A, B, …, Z    Küçük harf        ...
Atom’lar (2)Atom’lar 3 farklı şekilde oluşturulabilir:1.   Harf, rakam ve altçizgi(‘_’)’den oluşan küçük     harfle başlay...
Atom’lar (3)2.   Özel karakterlerden oluşan string’ler ile:                 <--->                 ======>                 ...
Atom’lar (4)3.   Tek tırnak (’) arasına alınan karakterler ile:                  ‘Tom’                  ‘South_America’   ...
SayılarProlog’da iki tür sayı                     topla(X,Y,Z):-Z   is X+Y.kullanılabilir    Tamsayılar (integer)       ...
Değişken’ler (1)Değişkenler; harf, rakam vealtçizgi(‘_’)’den oluşan büyük harfleyada altçizgi ile başlayan string’lerdir: ...
Değişken’ler (2)Anonim değişken : isimlendirilmemiş değişkenlerdir.Sadece altçizgi ile ifade edilirler:           hasachil...
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ü...
Aritmetik i ş l emler  + addition  - subtraction  * multiplication  / real division  // integer division  mod modulus  ** ...
Lojik i ş lemlera :- b.          % a if ba :- b,c.        % a if b and c.a :- b;c.        % a if b or c.a :- ++ b.      % ...
Listing   2 ?- assert(bitki(gul)).                            Yes                            3 ?- assert(bitki(meneksel))....
Listeleri Yazdırmaklisteyaz(A):- A==[].listeyaz(A):- [B|C]=A,write(B),tab(1),listeyaz(C).-? listeyaz([a,b,c,d,e]).a b c d ...
Listeye eleman ekleme ve              çıkarma  Listelere eleman eklemek ve çıkarmak hep 1. elaman   üzerinden yapılır. Lis...
process([hello]).hiprocess([i,have,a,problem,.]).                                                        elizaplease go on...
process([W1,_]):- % asagidaki listeden birinden sonra en çok bir kelime varsa   member(W1, [bye, goodbye, quit, halt, chow...
Kaynaklar    PROLOG Programming for Artificial Intelligence, Ivan Bratko, 3rd Edition, Addison-    Wesley,    Tacettin Aya...
Upcoming SlideShare
Loading in …5
×

Prolog

2,858 views

Published on

Prolog diline giriş

Published in: Education
  • Be the first to comment

  • Be the first to like this

Prolog

  1. 1. PrologPROgramming inLOGic Hazırlayan: Ayşenur Genç
  2. 2. Giriş & TarihçeBilgisayar, simgeleri işlemek için kullanılan bir makine‘ olarak tanımlanmaktadır.Görünüşte yalın olan bu terim, gerçekte çağdaş bir sayısal bilgisayarın yapabileceğibütün görevleri kapsayan genişliktedir. Bu tanıma göre, bilgisayara girdi denilen birsimgeler dizisi verilir; bunlar önceden makineye yerleştirilenve değişmez kurallar bütünü olan “programa” göre işlenir ve sonunda çıktı denilen başkasimgeler dizisi üretilir.PROLOG-Program dili de bu tür simgelerle işleyen bir sistemdir.PROLOG, "PROgramming in LOGic“ sözünün kısaltılmış bilçmidir ve ilk olarak 70 li yılların başındaMarsilya Üniversitesi’nde ve Edinburg kentlerinde ortaya çıkmıştır. Daha sonraları ise Londra’daImperial College’da geliştirilmiş ve geniş kitleler tarafından tanınması bu yolla sağlanmıştır. 2
  3. 3. Prolog Dilinin Ö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ının kolaylığı Gerçekler ve kurallardan oluşma Büyük küçük harfe duyarlı Sabitler için Küçük harfler Değişkenler için Büyük harfler 3
  4. 4. Prolog Dilinin ÖzellikleriProlog’la nesneler arası ilişkiler kolaylıkla ifade edilebilir.Kullanıcı bilgi tabanındaki verileri kolaylıkla sorgulanabilir.Program çıktıları çok sadedir.Prolog Bildirgesel (Dekleratif) bir dildir. 4
  5. 5. Prolog Bildirgesel Bir DildirPROLOG doğrudan mantığa dayalı bildirgesel (deklerativ) bir program dilidir.Burada kullanılan deklerativ terimi, surepel (prosedural) terimine karşılık olarakkullanılmaktadır.Hem sıradan bir bilgisayar dili hem de gelişmiş bütün üst düzeydeki bilgisayarprogram dilleri bir süreçle ilgili dillerdir.Süreçsel bir dilde, verilen bir problemiçözmek için (bir yemek tarifinde olduğu gibi) aşama aşama çalışılır. Programbitirilip çalıştırılmaya başlandığında ise önceden yazılan öngörülere uygun olansıraya göre çalışır. (Örnek: C, Pascal, Java vs.)Bildirgesel bir program dilinde ise, olgularve kurallardan yola çıkılır.Yazılan programı çalıştırmakiçin bir öngörü (Hipotez) oluşturulur ve bilgisayar bu öngörüyü kendisine dahaÖnceden verilmiş olan olgu ve kurallar yardımıyla sınar. 5
  6. 6. Bildirgesel (Deklerativ) ProgramlamaProlog 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. 6
  7. 7. Diğer Dillerle KarşılaştırmaProlog’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ırSüreçsel (Prosedürel) programlamada bilgisayara adım adım neyapması gerektiğini kodlarız. Bildirgesel (Dekleratif) programlamadabir durum tanımlanır. Bu tanıma göre yorumlayıcı yada derleyici birçözüm üretir. 7
  8. 8. Örnek : Aile Ağacı pam to m bob li z ann pat j im 8
  9. 9. İ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ı 9
  10. 10. Tüm aile ağacını aşağıdaki Prologifadeleriyle tanımlarız: parent(pam, bob). parent(tom, bob). parent(tom, liz). parent(bob, ann). parent(bob, pat). parent(pat,jim). 10
  11. 11. İlişkileri sorgulamak-1Bob, Pat’in ebeveyni mi? ?- parent(bob, pat). Prolog’un cevabı: yesTom, Ben’in ebeveyni mi? : ?- parent(tom, ben). Prolog’un cevabı: no 11
  12. 12. İlişkileri sorgulamak-2Liz’in ebeveyni kimdir? ?- ebeveyn(Kim, liz). Prolog’un cevabı : Kim = tomBob’un çocukları kimlerdir? ?- ebeveyn(bob, Cocuk). Prolog’un cevabı : Cocuk = ann ; Cocuk = pat ; no 12
  13. 13. İlişkileri sorgulamak-3Kimler 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 13
  14. 14. İlişkileri sorgulamak-4 Jim’in büyük ebeveyni (grandparent) kimdir? X Bilgi tabanımızda büyük ebeveyn diye bir ilişki tanımlı değil. pare n t Büyük ebeveyn ilişkisi iki ebeveyn ilişkisinin ‘ve’ lenmesiyle elde edilebilir. gran dpare n t Y?- parent(Y, jim), parent(X, Y). pare n t X=bob Y=pat jim jim’in ebeveynine Y dersek, Y’nin ebeveyni jim’in büyük ebeveyni (X) dir. 14
  15. 15. İlişkileri sorgulamak-5Torun ilişkisi de benzerbiçimde tanımlanabilir. to m tom, X’in ebeveyni, X, Y’nin ebeveyni ise pare n t Y, tom’un torunudur. g r a n d c h ild r e n ?- parent(tom,X), parent(X, Y). X X=bob pare n t Y=ann; X=bob Y=pat; Y no 15
  16. 16. İlişkileri sorgulamak-6Ann ve pat’in ortak ebeveyni var mı? ?- parent(Ebeveyn, ann), parent(Ebeveyn, pat). Ebeveyn=bob 16
  17. 17. SWI-Prolog Gerçek ve kurallar prolog’a yüklenir.Sorgular komut satırından girilerek çalıştırılabilir. 17
  18. 18. Doğal Dil vs. PrologBü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). 18
  19. 19. Prolog’da Veri TürleriProlog bir veri türünü onun şeklinden tanır.Prolog herhangi bir veri tanımına ihtiyaçduymaz. 19
  20. 20. 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 +-*/<>=:.&_~ 20
  21. 21. Atom’lar (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 miss_jones sarah_jones 21
  22. 22. Atom’lar (3)2. Özel karakterlerden oluşan string’ler ile: <---> ======> … .:. ::= Özel anlamı olan stirng’ler kullanılmamalı: :- 22
  23. 23. Atom’lar (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. 23
  24. 24. SayılarProlog’da iki tür sayı topla(X,Y,Z):-Z is X+Y.kullanılabilir Tamsayılar (integer) ?-topla(2,0.3,C). 1 0 -97 1313 C = 2.3 ; En büyük ve en küçük sayı No prolog derleyicisine bağlıdır. Ondalıklı sayılar (real) ?-topla(200,0.0003,C). 3.14 100.2 -0.0035 C = 200.0 ;Genelde tamsayılar kullanılır. NoOndalıklı sayılar pek fazlakullanılmaz Çünkü: 24
  25. 25. Değişken’ler (1)Değişkenler; harf, rakam vealtçizgi(‘_’)’den oluşan büyük harfleyada altçizgi ile başlayan string’lerdir: X Result Object2 Participant_list ShoppingList _x23 _23 25
  26. 26. 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 ifadeeder. 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ı? 26
  27. 27. 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 27
  28. 28. Aritmetik i ş l emler + addition - subtraction * multiplication / real division // integer division mod modulus ** power?- X is 3*4.X = 12yes 28
  29. 29. Lojik i ş lemlera :- b. % a if ba :- b,c. % a if b and c.a :- b;c. % a if b or c.a :- ++ b. % a if b is not provablea :- not b. % a if b failsa :- b -> c;d. % a if (if b then c else d) 29
  30. 30. Listing 2 ?- assert(bitki(gul)). Yes 3 ?- assert(bitki(meneksel)).Memory’de o an olan Yes 4 ?- listing.bilgileri ve kuralları hayvan(kedi). hayvan(kuzu).ekrana yazar. canli(A) :-1 ?- listing. hayvan(A). canli(A) :-hayvan(kedi). bitki(A).hayvan(kuzu). :- dynamic bitki/1.canli(A) :- hayvan(A). bitki(gul).canli(A) :- bitki(meneksel). bitki(A).Yes Yes 5 ?- hayvan(tosbaga). ???? 30
  31. 31. Listeleri Yazdırmaklisteyaz(A):- A==[].listeyaz(A):- [B|C]=A,write(B),tab(1),listeyaz(C).-? listeyaz([a,b,c,d,e]).a b c d etrueliste2yaz(A):- A==[].liste2yaz(A):-[B|C]=A,listeyaz(B),nl,liste2yaz(C).?- liste2yaz([[a,b],[c,d],[e,h]]).a bc de htrue 31
  32. 32. Listeye eleman ekleme ve çıkarma Listelere eleman eklemek ve çıkarmak hep 1. elaman üzerinden yapılır. Listeden sadece 1.eleman çıkarılabilir ve eklenecek eleman sadece 1. eleman olarak eklenebilir.?- D = [1,2,3,4], [ B | A ] = D. A listesi [2,3,4] şeklinde oluşur. İlk eleman silindi.?- D = [1,2,3,4], A = [ 0 | D ].A listesi [0,1,2,3,4] şeklinde oluştu. Listenin başına 0 eklenmiş oldu. 32
  33. 33. process([hello]).hiprocess([i,have,a,problem,.]). elizaplease go onprocess([i,hate,lessons,.]).do you really hate lessons ?process([yes,but,.]).please go on .process([i,like,school,.]).does anyone else in your family like school ?process([i,think,my,father,likes,school,too,.]).please go on .process([do,you,believe,me,?]).why do me ask if I believe you ?process([i,am,paranoiac,.]).please go on .process([are,you,parrot,?]).what makes you think I am parrot ?process([you,always,repeat,same,thing,.]).please go on .process([bye,.]).I hope I was of some help. 33
  34. 34. process([W1,_]):- % asagidaki listeden birinden sonra en çok bir kelime varsa member(W1, [bye, goodbye, quit, halt, chow]), write(I hope I was of some help.), nl.process(Input):- Eliza kod rule(Input, Output), reply(Output).% donusumler% rule([userin cumlesi], [elizanin cumlesi]).rule([Greeting|Rest], [hi|Rest]):- member(Greeting, [hi, hello]).rule([i,hate,X,.], [do, you, really, hate, X, ?]).rule([_,you,Y,me,?], [why, do, me, ask, if, I, Y, you, ?]).rule([i,like,X,.], [does, anyone, else, in, your, family, like, X,?]).rule([are, you, X,?], [what, makes, you, think, I, am, X, ?]).rule([you, are, X, .], [does, it, please, you, to, believe, I, am,X,?]).rule(_, [please, go, on, .]). % anlamis havasinda :))reply([]):- !.reply([FirstWord|Rest]) :- % kelimeler arasina 1tab koyarak ekrana yaz write(FirstWord), tab(1), reply(Rest). 34
  35. 35. Kaynaklar PROLOG Programming for Artificial Intelligence, Ivan Bratko, 3rd Edition, Addison- Wesley, Tacettin Ayar, Prolog Ders Notları Bergen, Karl von: LISP fiir Linguisten: ein Grundkurs zur E i i g in die Computerlinguistik.FrankfurtIaM; Berlin; New York; Paris; Wien: Lang, 1992 (Hamburger englischeLinguistik Praktika Bd. 4). Glinz, Hans: Deutsche Grammatik 11. FrankfurtlaM. 1971. Knaus, Rodger: Faster and Smarter Queries. A1 Experts Toolbok. May 1988, SS. 13-18. Knaus, Rodger & : A Simple PROLOG DBMS [data base management system]. A1 ExpertsToolbok. April 1988, SS.13-21. Kraml Willibald & Schrodt, Richard: Syntax lernen mit PROLOG. In: Ide: Zeitschrift fiir den Deutschunterricht in Wissenschaft und Schule. 2i1990. SS. 98- 1 14. Lenders, Winfried & Willee, Gerd: Linguistische Datenverarbeitung: ein Lehrbuch. Opladen:Westdeutscher Verlag, 1986. 35

×