Mantıksal Programlamaya Giriş: Prolog ile Adım Adım Başlangıç
Programlama Paradigmaları
Mantıksal Programlamaya Giriş: Prolog ile Adım Adım Başlangıç

Mantıksal Programlamaya Giriş
Mantıksal programlama, hesaplamayı mantıksal ifadeler (gerçekler ve kurallar) üzerinden gerçekleştiren bir programlama paradigmasıdır. Bu yaklaşımda programcı, sistemin ne doğru olduğunu bildirir; sistem ise bu bildirimlerden mantıksal çıkarımlar yaparak nasıl sonuca varacağını belirler. Mantıksal programlamanın en bilinen dillerinden biri Prolog'dur; Prolog 1970'lerde Alain Colmerauer tarafından geliştirildi ve yapay zeka, doğal dil işleme gibi alanlarda yaygın şekilde kullanılmıştır (bkz. kaynaklar).
Prolog nedir? Kısa Tanım ve Tarihçe
Prolog, mantıksal programlamayı destekleyen bildirimseldir ve programlar gerçekler (facts), kurallar (rules) ve sorgular (queries) şeklinde yazılır. Prolog'un çalışma biçimi bir mantıksal çıkarım motoruna dayanır: tanımlı gerçekler ve kurallar kullanılarak sorulara (sorgulara) cevap aranır. Daha fazla teknik bilgi ve tarihsel bağlam için bu yazıda kullanılan kaynaklara bakabilirsiniz (örneğin Index: Prolog).
Prolog hangi durumlar için uygundur?
- Kural tabanlı mantık ve uzman sistemleri
- Sembolik veri işleme ve doğal dil işleme (NLP)
- Bilgi temsili (knowledge representation) ve çıkarım
Prolog'un Temel Kavramları
Aşağıda Prolog'da sık kullanılan temel kavramlar ve örnekleri yer almaktadır.
1) Gerçekler (Facts)
Gerçekler, dünyada sabit olarak kabul edilen ilişkileri temsil eder. Örnek:
parent(ali, ayse).
parent(ali, mehmet).
parent(ayse, can).
2) Kurallar (Rules)
Kurallar, bir sonuç ile onu üreten ön koşullar arasındaki ilişkiyi belirtir. Örnek: büyükbaba (grandparent) kuralı:
grandparent(X, Y) :- parent(X, Z), parent(Z, Y).
Burada ":-" sembolü "eğer" anlamına gelir; satırın solundaki ifade sağdaki ifadeler doğruysa doğrudur.
3) Değişkenler ve Atoms
Prolog'da değişkenler büyük harfle başlar (ör. X, Y, Who) ve atomlar küçük harfle başlar (ör. ali, ayse). Dikkat edilmesi gereken nokta budur; yanlış yazım mantık hatalarına yol açar.
4) Sorgular (Queries), Unification ve Backtracking
Sorgular, bilgi tabanına sorulan sorulardır. Prolog, unification (eşleştirme) yoluyla potansiyel çözümleri bulur; eğer bir çözüm bulunursa geri döner, daha fazla çözüm aramak için backtracking (geri izleme) yapar. Örnek sorgu:
?- grandparent(ali, Who).
Bu sorgu Prolog'a "ali'nin büyük torunları kimlerdir?" diye sorar ve uygun eşleştirmeleri döndürür.
Kurulum ve Hızlı Başlangıç (SWI-Prolog Örneği)
SWI-Prolog, hem eğitim hem de pratik kullanım için sık tercih edilen bir uygulamadır. Resmi site üzerinden işletim sisteminize uygun sürümü indirebilirsiniz: https://www.swi-prolog.org/.
Basit bir dosya ile başlamak için adımlar:
- Yeni bir metin dosyası oluşturun: family.pl
- Dosyaya aşağıdaki içerikleri yazın:
parent(ali, ayse).
parent(ali, mehmet).
parent(ayse, can).
grandparent(X, Y) :- parent(X, Z), parent(Z, Y). - SWI-Prolog'u başlatın (ör. terminalde swipl komutuyla veya Windows'ta swipl.exe ile).
- Dosyayı yükleyin:
?- [family].
true. - Sorgu çalıştırın:
?- grandparent(ali, X).
X = can.
Adım Adım Basit Proje: Küçük Bir Uzman Sistemi (Hasta Tanısı)
Bu örnek, kural tabanlı mantığı göstermek için basit bir uzman sistemi modelidir.
facts ve kurallar:
has_fever(john).
has_cough(john).
has_fever(mary).
sick(X) :- has_fever(X), has_cough(X).
maybe_sick(X) :- has_fever(X), \+ has_cough(X).
Sorgular ve beklenen cevaplar:
?- sick(john).
true.
?- maybe_sick(mary).
true.
Bu yapı, yeni kurallar ekleyerek daha karmaşık çıkarımlara genişletilebilir (ör. ateş + döküntü → farklı hastalık olasılığı gibi).
Prolog ile Etkili Problem Çözme Stratejileri
- Küçük ve modüler bilgi tabanları oluşturun; her dosya tek bir alanı tanısın.
- Kuralların sıralaması önemlidir; bazı durumlarda daha spesifik kuralların önce yer alması gerekir.
- Cut (!) operatörünü dikkatli kullanın; yanlış kullanım beklenmedik kesintilere yol açar.
- Performans için gereksiz tekrarları azaltın ve rekürsiyon derinliğine dikkat edin.
Hata Ayıklama ve Yaygın Tuzaklar
Sık yapılan hatalar ve çözüm önerileri:
- Virgül ve nokta unutma: Her gerçek ve kuralın sonunda nokta (.) olmalıdır.
- Değişken/atom karışıklığı: Değişkenler büyük, atomlar küçük harfle başlar.
- Sonsuz döngü riski: Rekürsif kurallar dikkatli yazılmazsa durmayan sorgular olabilir.
- Debug araçları: SWI-Prolog'da trace. komutu ile adım adım çalıştırma mümkündür; ayrıca listing. ile mevcut gerçekleri ve kuralları görebilirsiniz.
İleri Kaynaklar ve Öğrenme Yolları
Derinlemesine okumak için şu kaynaklara bakabilirsiniz:
- Prolog: Yapay Zeka ve Mantıksal Programlamada Temel Bir Dil (Index)
- Prolog Programlama Diline Giriş (Medium)
- Prolog nedir? Nasıl çalışır? (Ahmet Cevahir ÇINAR)
Sonuç ve Öneriler
Mantıksal programlama, ilişkisel ve kural tabanlı problemleri ifade etmek için güçlü bir yaklaşımdır. Prolog ise bu paradigmanın pratik bir uygulanışıdır. Başlangıç için küçük bilgi tabanları kurun, basit kurallarla başlayın ve adım adım karmaşıklığı artırın. Uygulama yaparak unification, backtracking ve kural yazımına alışmak en etkili öğrenme yoludur.