Prolog Yazım Kuralları

Kurallar gerçekler ve soyutlanmış gerçekler arasındaki ilişkiyi ifade eder. Yukarıda verilen gerçekler verir(X,Y) şeklinde soyutlanabilir. Burada X kişinin adı Y ise sunuş şeklidir.  Kural türkçe aşağıdaki şekilde yazılabilir:

  • eğer KİŞİ ders veriyor   ise  KİŞİ hocadır.  (if/then)

Kuralın “eğer” kısmı, “ise” kısmının işlem görebilmesi için gerçeklenmesi gereken koşullar kümesidir. Prologda, önce yalnız bir koşulun yer alabildiği İSE kısmı daha sonra EĞER kısmı yazılır:

  • hoca(X) :- verir(X,Y).

Yukarıda ifade ” X’in hoca olduğu doğrudur EĞER X’in Y’yi verdiği doğruysa” şeklinde okunabilir. Bu durum koşulu gerçekleştiren tüm X’ler için geçerlidir.

Ebeveyn ve çocuklar arasındaki ilişki hakkında aşağıdaki gerçekler kümesini gözönüne alalım:

  • ebeveyn(a,b).
  • ebeveyn(a,c).
  • ebeveyn(b,d).
  • ebeveyn(e,f).

Burada ebeveyn(X,Y)’ nin anlamı X Y’ nin ebeveynidir. Bu bilgilere ek olarak nesnelerin cinsiyetiyle ilgili bilgilerde gereksinim duyulabilir:

  • erkek(X).
  • bayan(X).

Bu bilgiler kullanılarak nesneler arasındaki ilişkiler için kurallar yazılabilir. Örneğin  herhangi bir kişinin erkek kardeşi kimdir? Erkek kardeşi: ” X ile ebeveyni aynı olan erkek” şeklinde tanımlayabiliriz. Basit olması için sadece anne veya babanın kardeşlik için yeterli olduğunu kabul edelim.  Bu amaçla aşağıdaki ifade yazılabilir:

 EĞER ebeveyn(E,X),

ebeveyn(E,Y),

erkek(Y)

 İSE erkekkardeş(Y,X).

Bu ifade: ” Verilen X kişisi için, eğer X’in ebeveyni E ise ve Y kişisinin ebeveyni de E ise ve Y erkek ise Y X’in erkekkardeşidir”. Burada X’in cinsiyeti önemli değildir. Bu kural prologda aşağıdaki şekilde yazılabilir:

erkekkardes(Y,X) :-   ebeveyn(E,X),

ebeveyn(E,Y),

erkek(Y).

X ve Y’nin farklı olduğunu belirtmediğimiz için bir kişi kendisinin erkek kardeşi olabilir.  Bu sorunu gidermek için X ve Y’nin farklı olması gerektiğini  belirtmeliyiz:

erkekkardes(Y,X) :-   ebeveyn(E,X),

ebeveyn(E,Y),

erkek(Y),

not ( X==Y).                          %  \+ X == Y

Burada not(X==Y) ifadesi  X Y’ye eşit değil anlamındadır. Not ifadesi yerine “\+ Y==X” yazılabilir.

Prologda bütün değişkenler yereldir. Yani sadece kural içinde geçerlidirler.  Bu nedenle bir kuraldaki X değişkeni bir diğer kuraldaki X değişkeni ile aynıı değildir.