Mantıksal ve Deklaratif Programlama: Prolog ile Basit Örnekler

Programlama Paradigmaları

Mantıksal ve Deklaratif Programlama: Prolog ile Basit Örnekler

Programlama Paradigmaları
4 dk okuma süresi
Bu rehber mantıksal ve deklaratif programlama paradigmasının ne olduğunu açıklar ve Prolog diliyle kısa, uygulanabilir örnekler sunar. Gerçekler, kurallar ve sorgular nasıl yazılır; basit aile ağacı ve liste işlemleri örnekleri adım adım gösterilir.
Mantıksal ve Deklaratif Programlama: Prolog ile Basit Örnekler

Giriş

Mantıksal ve deklaratif programlama, "ne yapılacağını" tanımlamaya odaklanan paradigma kümeleridir. Bu yaklaşımlarda programcı, problemi mantık ifadeleri, gerçekler ve kurallar biçiminde tanımlar; çalışma zamanı çözümleme ve arama mekanizmaları bu tanımlara göre cevap üretir. Prolog, bu paradigmayı uygulayan en bilinen dillerden biridir ve özellikle yapay zeka ile doğal dil işleme çalışmaları için klasik bir araç olarak kullanılır (örnek kaynak: Temple University — Prolog dersi).

Mantıksal ve deklaratif programlama arasındaki fark

Deklaratif programlama, problemlerin çözümünü "ne" ile tanımlar; algoritmanın "nasıl" çalıştığını detaylandırmaz. Mantıksal programlama ise deklaratif bir alt kümedir: problemleri mantıksal ifadeler (önermeler), kurallar ve sorgularla kurar. Yani mantıksal programlama, özünde mantık temelli deklaratif bir yaklaşımdır. Bu tanımlamalar, Prolog'un modeline doğrudan uyar: dilde gerçekler ve kurallar yazılır; sistem sorgulara (goal) cevap bulmak için arama ve geri izleme (backtracking) kullanır (kaynak: Temple University — Prolog dersi).

Prolog'un temel kavramları: gerçekler, kurallar ve sorgular

Prolog programı üç ana yapı içerir:

  • Gerçekler (facts): Sistemde doğru kabul edilen atomik bilgidir. Örnek: bir kişinin başka bir kişinin ebeveyni olduğunu belirtmek.
  • Kurallar (rules): Belirli bir koşul sağlandığında doğruluğu kabul edilen çıkarımlardır. Kurallar, başlık (head) ve gövdeden (body) oluşur; gövde bir veya daha fazla önermenin birleşimidir.
  • Sorgular (queries): Sisteme yöneltilen sorulardır; Prolog gerçekler ve kurallar ışığında sorguyu doğrulamaya çalışır ve gerekli değişken bağlamalarını (bindings) döndürür.

Basit sözdizimi notları

Prolog'da atomlar küçük harfle başlar; değişkenler büyük harfle başlar veya alt çizgi ile başlar. Satır sonlarında nokta (.) kullanılır. Mantıksal bağlaçlar için "," (ve) ve ";" (veya) gibi sözdizimleri kullanılır.


Örnek 1 — Aile ağacı ve ancestor (ata) ilişkisi

Aşağıda Prolog'da çok sık kullanılan basit bir aile ağacı örneği var. Bu örnek, gerçekler ve kuralların nasıl birlikte çalıştığını gösterir.

% Gerçekler parent(john, mary). parent(mary, susan). parent(susan, tom). % Kurallar ancestor(X, Y) :- parent(X, Y). ancestor(X, Y) :- parent(X, Z), ancestor(Z, Y).

Açıklama:

  • parent/2 predikatları doğrudan verilen ilişkileri temsil eder.
  • ancestor/2 iki kural içerir: doğrudan ebeveynlik ve özyinelemeli (recursive) bir kural aracılığıyla dolaylı atalığı belirleme.

Örnek sorgular:

  • ?- ancestor(john, tom). — Bu sorgu doğru (true) olarak cevaplanır, çünkü john → mary → susan → tom zinciri vardır.
  • ?- ancestor(X, tom). — Prolog X için geçerli tüm çözümleri sırayla üretir: X = susan ; X = mary ; X = john. Bu çıktı sistemin geri izleme (backtracking) özelliğiyle elde edilir.

Örnek 2 — Listelerle çalışma: append ve member

Prolog listelerle çalışmayı doğal biçimde destekler. Aşağıdaki örneklerde append ve member predikatlarının klasik tanımları gösterilmiştir.

% append/3: iki listeyi birleştirir append([], L, L). append([H|T], L2, [H|R]) :- append(T, L2, R). % member/2: bir öğenin listede olup olmadığını kontrol eder member(X, [X|_]). member(X, [_|T]) :- member(X, T).

Örnek kullanım:

  • ?- append([1,2],[3,4], R). — R = [1,2,3,4].
  • ?- member(2, [1,2,3]). — true.

Bu örnekler, Prolog'un hem veri yapıları (listeler) hem de özyinelemeli desenlerle problem çözme yeteneğini gösterir.

Adım adım: Basit bir Prolog programı nasıl yazılır ve çalıştırılır?

Aşağıdaki adımlar, yeni başlayanlar için pratik bir akış sağlar:

  1. Yorumlayıcı seçin: SWI‑Prolog gibi yaygın bir Prolog yorumlayıcısı kullanabilirsiniz.
  2. Dosya oluşturun: Metin düzenleyicide bir dosya oluşturun, örneğin sample.pl, ve örnek gerçekleri ve kuralları yapıştırın.
  3. Yükleme/çalıştırma: Yorumlayıcıyı açın ve dosyayı yükleyin. Örneğin etkileşimli kabukta ?- [\'sample\']. veya ?- consult('sample.pl'). komutlarıyla dosya yüklenebilir.
  4. Sorgular gönderin: Komut satırında sorgular yazarak sonuçları gözlemleyin (ör. ?- ancestor(john, tom).).
  5. Test edin ve genişletin: Yeni gerçekler, kurallar ekleyin veya kuralları değiştirerek davranışı test edin.

Hızlı hata ayıklama ipuçları

  • Küçük adımlarla ilerleyin: Önce gerçekleri, sonra basit kuralları test edin.
  • Değişken isimlerine dikkat edin — büyük harfle başlayanlar değişken kabul edilir.
  • Özyineleme tanımlarında baz durum (base case) eksikse sonu gelmeyen arama oluşabilir; her özyinelemeli kural için base case ekleyin.
  • Kesme operatörü (!) ve kaçış (cut) gibi kontrol yapıları davranışı değiştirir; kullanmadan önce etkilerini anlayın.

Ne zaman Prolog kullanmak mantıklıdır?

Prolog, ilişkisel bilgi modellemesinin, kural tabanlı çıkarımın ve sembolik işleme gerektirdiği problemlerde uygundur. Yapay zeka araştırmasında, bilgi tabanlı sistemlerde ve doğal dil işleme prototiplerinde sıkça tercih edilir. Ancak performans, problem yapısına ve veri büyüklüğüne bağlı olarak değişebilir; belirli görevlerde prosedürel/deterministik yaklaşımlar tercih edilebilir (kaynak: Temple University — Prolog dersi).

Sık yapılan hatalar ve dikkat edilmesi gerekenler

  • Prolog'un deklaratif mantığı ile prosedürel beklentileri karıştırmayın. Prolog size "çözüm bulur", fakat çözümü nasıl aradığına müdahale farklı araçlarla yapılır.
  • Veri temsilinde açık olun: aynı ilişki için birden fazla predikat tanımlamak kafa karışıklığına yol açar.
  • Geri izleme eksikliği veya aşırı geri izleme performans sorunlarına yol açabilir; kuralları ve sıralamayı dikkatle tasarlayın.

Sonuç

Mantıksal ve deklaratif programlama, problemi tanımlama yaklaşımını değiştiren güçlü paradigmalardır. Prolog, gerçekler, kurallar ve sorgular kullanarak bu paradigmayı somutlaştırır. Bu makaledeki örnekler başlangıç seviyesinde pratik bir giriş sağlar; ilerledikçe kısıt mantığı (CLP), meta‑programlama ve doğal dil işleme gibi daha gelişmiş konulara geçebilirsiniz.


Kaynaklar ve ileri okumalar

Bu makaledeki temel tanımlar ve Prolog'un paradigma açısından yeri için başvurulan kaynak: Temple University — Prolog dersi.