Mantıksal Programlamaya Giriş: Prolog ile Adım Adım Örnekler
Programlama Paradigmaları
Mantıksal Programlamaya Giriş: Prolog ile Adım Adım Örnekler

Mantıksal Programlamaya Kısa Bir Giriş
Mantıksal programlama, program davranışını mantıksal ifadeler (gerçekler ve kurallar) olarak tanımlayan bir yaklaşımdır. Bu yaklaşımda bir uygulamanın çözümü, tanımlanan kurallar üzerinden çıkarım (inference) yapılarak elde edilir. Bu paradigmanın temel tanımlarından birine örnek olarak AppMaster'in ilgili sözlüğünde yapılan açıklamayı gösterebiliriz: mantıksal ifadeler aracılığıyla programlama yaklaşımıdır (AppMaster).
Prolog nedir ve nerelerde kullanılır?
Prolog, 1970'li yıllarda Alain Colmerauer ve ekibi tarafından geliştirilen, mantıksal programlamaya dayalı bir dildir. Dilin tasarımı ve uygulama alanları arasında yapay zeka, doğal dil işleme ve mantıksal sorgulama gibi konular öne çıkmıştır (Index.net.tr). Prolog programları, gerçekler (facts) ve kurallar (rules) tanımlanıp, bu veriler üzerinde sorgular (queries) çalıştırılarak çözümlenir.
Temel Kavramlar: Gerçekler, Kurallar, Sorgular
Prolog'da en temel yapı taşları şunlardır:
- Gerçek (fact): Programın bildiği temel doğru ifadeler. Örnek: parent(john, mary).
- Kural (rule): Bir doğruluğun başka doğruluklara bağlı olarak tanımı. Örnek: ancestor(X,Y) :- parent(X,Y).
- Sorgu (query): Sistemden bilgi isteme işlemi. Örnek: ?- parent(john, Who).
Aşağıda basit bir gerçek tanımı örneği gösterilmiştir:
parent(john, mary).
parent(mary, susan).
parent(john, michael).
Adım Adım Prolog Örnekleri
1) Aile Ağacı: Basit gerçekler ve sorgular
Bu örnek, temel gerçek tanımlarını ve bir sorgunun nasıl çalıştığını gösterir.
parent(john, mary).
parent(mary, susan).
parent(john, michael).
Eğer bu veritabanına şu sorguyu gönderirsek:
?- parent(john, Child).
Prolog, Child için uygun değerleri arar ve sırasıyla Child = mary ve Child = michael cevaplarını döner. Birden fazla sonuç varsa kullanıcıya ek çözümler gösterilir (Prolog çevresine bağlı olarak cevaplardan sonra ";" veya bir tuşa basılarak sonraki çözümler alınır).
2) Rekürsiyon: Atalık (ancestor) ilişkisi
Atalık ilişkisini hem doğrudan ebeveynlikten hem de rekürsiyonla tanımlayabiliriz:
ancestor(X,Y) :- parent(X,Y).
ancestor(X,Y) :- parent(X,Z), ancestor(Z,Y).
Bu kurallar şu anlama gelir: X, Y'nin bir atasıdır eğer X doğrudan Y'nin ebeveyni ise veya X, Z'nin ebeveyni olup Z, Y'nin atası ise. Bu şekilde Prolog, rekürsif kuralları kullanarak zincirleme çıkarımlar yapar.
3) Grafikte yol bulma (path)
Basit bir yönlendirilmiş graf için kenarları (edge) tanımlayıp iki düğüm arasında yol olup olmadığını kontrol edebiliriz:
edge(a,b).
edge(b,c).
edge(c,d).
path(X,Y) :- edge(X,Y).
path(X,Y) :- edge(X,Z), path(Z,Y).
Bu yapı, path(a,d) sorgusunu doğru olarak yanıtlayacaktır; çünkü a→b→c→d zinciri mevcuttur. Yine burada rekürsiyon zincirleri ve Prolog'un arama/geri-izleme mekanizması etkilidir.
4) Liste işlemleri: member/2 örneği
Listeler Prolog'da yaygın kullanılır. Basit bir member tanımı şu şekildedir:
member(X, [X|_]).
member(X, [_|T]) :- member(X, T).
Bu, X'in bir listenin ilk elemanı olup olmadığı veya kuyruğu içinde bulunup bulunmadığını kontrol eder. Bu tür tanımlar sayesinde Prolog listeler üzerinde güçlü, deklaratif sorgular gerçekleştirebilir.
5) Basit aritmetik: is operatörü
Prolog'da aritmetik işlemler doğrudan eşleştirmeyle (unification) yapılmaz; is operatörü kullanılır:
sum(X, Y, Z) :- Z is X + Y.
Sorgu: ?- sum(2, 3, Z). cevap: Z = 5.
Prolog'un Çalışma Prensibi: Eşleme ve Geri-İzleme
Prolog, bir sorguyu cevaplamak için mevcut gerçek ve kuralları eşlemeye (unification) çalışır. Bir kurala veya gerçeğe uygulanan eşleme başarısız olursa, Prolog geri-izleme (backtracking) ile alternatif yolları dener. Bu süreç, Prolog'un arama temelli bir çıkarım motoru gibi davranmasını sağlar. Geri-izlemeyi kontrol etmek için bazı dil yapıları (ör. cut operatörü '!') vardır; bunlar kullanılırken dikkatli olunmalıdır çünkü deterministikliği etkiler.
İyi Uygulama İpuçları ve Kontrol Listesi
- Küçük adımlarla başlayın: Basit gerçekler ve kurallarla deneyin.
- Kuralları okunabilir tutun: Açıklayıcı isimler ve yorumlar ekleyin.
- Test sorguları yazın: Her kural için birkaç olumlu ve olumsuz test sorgusu çalıştırın.
- Geri-izlemeyi anlayın: Çoklu çözümler bekliyorsanız kontrol akışını test edin.
- Yan etkilerden kaçının: Prolog deklaratif bir dil olarak tasarlandığından, yan etkili işlemler karmaşıklığı artırabilir.
Prolog'u Nerede Kullanmalısınız?
Prolog, bilgi tabanı sorgulama, kural tabanlı sistemler, doğal dil işleme ve bazı yapay zeka uygulamaları için uygundur. Index.net.tr üzerindeki özetlerde de belirtildiği üzere Prolog, mantıksal çıkarım yetenekleri nedeniyle bu alanlarda tercih edilebiliyor (Index.net.tr).
Hızlı Başlangıç Planı (Pratik Adımlar)
- Bir Prolog ortamı edinin (örneğin SWI-Prolog gibi popüler yorumlayıcılarla deneyin).
- Basit gerçekler ve sorgular yazarak başlayın (ör. aile örneği).
- Rekürsif kuralları ve liste işlemlerini deneyin.
- Küçük bir proje yapın: örn. bir soy ağacı sorgulayıcısı veya küçük bir yol bulma uygulaması.
- Kaynaklardan öğrenmeyi sürdürün; mantıksal paradigmalar üzerine genel bilgiler için Ichi.pro gibi tanıtıcı metinleri inceleyebilirsiniz (Ichi.pro).
Sonuç
Mantıksal programlama, problemi "ne" olarak tanımlayıp çözümü çıkarımsal yollarla elde etmeyi sağlayan güçlü bir paradigmadır. Prolog ise bu paradigmanın pratikte sık kullanılan bir temsilcisidir; gerçekler, kurallar ve sorgularla nasıl çalışıldığını öğrenmek, özellikle bilgi tabanlı ve kurallara dayalı problemler için faydalı olacaktır. Daha fazla uygulama örneği ve ayrıntı için verilen kaynaklara başvurabilirsiniz.