Merhaba arkadaşlar,
Üniversitede yapay zeka dersimizde, yapay zekanın temellerinde kullanılan diller arasında Prolog’u gördüğümde ilk başta biraz zorlanmıştım. Bu yüzden bu konuyu seçip biraz daha araştırmak istedim. Aslında Prolog, diğer programlama dilleri kadar karmaşık bir yapıya sahip değil; tamamen mantığa dayalı bir dil. Fazla özelliği bulunmuyor ama kendine has bazı temel kuralları var.
Gelin önce nerelerde kullanıldığına bir göz atalım, çünkü kullanım alanları mantığını anlamaya yardımcı oluyor:
Prolog'un diğer dillerden ayrılan ve ilk başta bana garip gelen birkaç özelliği var:
Konuyu benim de tam olarak anlamamı sağlayan şu basit tıbbi teşhis örneğine bakalım.
Önce gerçeklerimizi (hastaların belirtilerini) yazalım:
Şimdi de kurallarımızı (hastalıkların hangi belirtilerle ortaya çıktığını) tanımlayalım:
Şimdi de sorgumuzu yapalım. Ali'nin hastalığı ne olabilir?
?- hastalik(ali, H).
Bu soruyu sorduğumuzda Prolog şöyle düşünüyor:
M = migren.
Aynı şekilde Ayşe’nin öksürüğü ve ateşi olduğu için sorgulasaydık, Prolog bize soguk_alginligi sonucunu verecekti.
Kısacası, Prolog daha çok bilgi tabanı ve mantık sorgulama üzerine kurulu bir dil. Diğer diller gibi "şunu yap, sonra bunu yap" diye adımları sıralamak yerine, "kurallar bunlar, gerçekler bunlar, sen bu bilgilere göre bir çıkarım yap" diyorsunuz. Bana sanki bir bilgisayara program yazmak yerine, bir bilmeceyi çözmesi için ipuçları vermek gibi geldi. Umarım bu özet faydalı olmuştur iyi formlar!
Üniversitede yapay zeka dersimizde, yapay zekanın temellerinde kullanılan diller arasında Prolog’u gördüğümde ilk başta biraz zorlanmıştım. Bu yüzden bu konuyu seçip biraz daha araştırmak istedim. Aslında Prolog, diğer programlama dilleri kadar karmaşık bir yapıya sahip değil; tamamen mantığa dayalı bir dil. Fazla özelliği bulunmuyor ama kendine has bazı temel kuralları var.
Gelin önce nerelerde kullanıldığına bir göz atalım, çünkü kullanım alanları mantığını anlamaya yardımcı oluyor:
- Yapay Zeka: Uzman sistemler ve problem çözmede kullanılıyor. Yani bir doktora belirtileri söyleyip teşhis istemek gibi.
- Doğal Dil İşleme: Cümlelerin yapısını ("kim, ne yaptı?") analiz etmek için kullanılıyor.
- Bilgi Tabanlı Sistemler: "Şu özelliklere sahip tüm ürünleri listele" gibi kurallara dayalı sorgulamalarda işe yarıyor.
- Akademik Araştırma: Mantık ve algoritma problemlerini öğretmek için sıkça kullanılıyor (bizim derste olduğu gibi).
- Oyun Geliştirme: Zeka gerektiren oyunlarda "en mantıklı hamle ne?" sorusuna cevap bulmak için kullanılabiliyor.
- Web ve Veritabanı: Kurallara dayalı veri filtreleme ve mantıksal sorgulama için de kullanılabiliyor.
Prolog'u Farklı Yapan Nedir?
Prolog'un diğer dillerden ayrılan ve ilk başta bana garip gelen birkaç özelliği var:
- Büyük-küçük harf olayı çok önemli. Normalde dillerde sadece hassasiyet vardır ama burada anlamı değiştiriyor. Küçük harfle başlayanlar (ali, ayse) sabit değerler (atom deniyor), büyük harfle başlayanlar (X, Kisi) ise değişkenler. Yani Dog ile dog tamamen farklı şeyler. dog bir köpekken, Dog herhangi bir şey olabilir.
- for veya while gibi döngü yapıları yok. Bu çok tuhaf gelmişti. Onun yerine mantıksal kurallar ve sorgulamalarla, genellikle de recursive (öz yinelemeli) fonksiyonlarla işler yürüyor. Yani bir fonksiyonun kendi kendini çağırması gibi.
- Her şey "gerçekler" ve "kurallar" üzerine kurulu.
- Gerçekler (Facts): Bilgi tabanına koyduğunuz net bilgilerdir. Mesela anne(ayse, ali). derseniz, "Ayşe, Ali'nin annesidir" diye bir gerçeği kaydetmiş olursunuz.
- Kurallar (Rules): Bu gerçeklerden yeni bilgiler türetmenizi sağlar. :- sembolü "eğer" gibi okunabilir. Örneğin, buyuk_anne(X, Y) :- anne(X, Z), anne(Z, Y). yani "Eğer X, Z'nin annesiyse VE Z de Y'nin annesiyse, o zaman X, Y'nin büyükannesidir."
- Sorgulama (Query) ile cevap alıyorsunuz. Programı çalıştırıp bir sonuç beklemiyorsunuz, ona sorular soruyorsunuz. ?- anne(ayse, ali). diye sorduğunuzda, bilgi tabanına bakıp size true veya false diyor.
- Prolog asla pes etmez! Bir sorguya cevap ararken bir yol dener. Baktı ki o yoldan sonuç çıkmıyor, hemen bir önceki adıma geri dönüp başka bir olasılığı dener. Buna backtracking (geri izleme) deniyor ve Prolog'un en güçlü yanlarından biri bu. Resimdeki Bütün ihtimalleri deneyip size tüm olası çözümleri bulabiliyor.
Hadi Bir Örnekle Pekiştirelim
Konuyu benim de tam olarak anlamamı sağlayan şu basit tıbbi teşhis örneğine bakalım.
Önce gerçeklerimizi (hastaların belirtilerini) yazalım:
Prolog
belirti(ali, ates). % Ali’nin ateşi var.
belirti(ali, bas_agrisi). % Ali’nin baş ağrısı var.
belirti(ayse, oksuruk). % Ayşe'nin öksürüğü var.
belirti(ayse, ates). % Ayşe’nin ateşi var.
Şimdi de kurallarımızı (hastalıkların hangi belirtilerle ortaya çıktığını) tanımlayalım:
Prolog
hastalik(X, grip) :- belirti(X, ates), belirti(X, oksuruk), belirti(X, bas_agrisi).
hastalik(X, soguk_alginligi) :- belirti(X, oksuruk), \+ belirti(X, bas_agrisi).
hastalik(X, migren) :- belirti(X, bas_agrisi), \+ belirti(X, oksuruk).
Şimdi de sorgumuzu yapalım. Ali'nin hastalığı ne olabilir?
?- hastalik(ali, H).
Bu soruyu sorduğumuzda Prolog şöyle düşünüyor:
- Grip mi? Kurala bakıyor: Ateş, öksürük ve baş ağrısı lazım. Ali'nin ateşi ve baş ağrısı var ama öksürüğü yok. Bu kural olmadı.
- Soğuk algınlığı mı? Kurala bakıyor: Öksürük lazım. Ali'de yok. Bu kural da olmadı.
- Migren mi? Kurala bakıyor: Baş ağrısı lazım (evet, var) ve öksürük olmaması lazım (evet, yok). Tüm koşullar sağlandı!
M = migren.
Aynı şekilde Ayşe’nin öksürüğü ve ateşi olduğu için sorgulasaydık, Prolog bize soguk_alginligi sonucunu verecekti.
Kısacası, Prolog daha çok bilgi tabanı ve mantık sorgulama üzerine kurulu bir dil. Diğer diller gibi "şunu yap, sonra bunu yap" diye adımları sıralamak yerine, "kurallar bunlar, gerçekler bunlar, sen bu bilgilere göre bir çıkarım yap" diyorsunuz. Bana sanki bir bilgisayara program yazmak yerine, bir bilmeceyi çözmesi için ipuçları vermek gibi geldi. Umarım bu özet faydalı olmuştur iyi formlar!
Son düzenleme:
