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.