Prolog Evirme ve Sonuç Göstermek

Evirme (negation)

Bazı koşulların doğru olmadığını bulmak faydalı olabilir. Bu durum prologda “not” yüklemi veya

“\+” sembolleriyle sağlanır. not’ın   anlamı: verilen gerçek ve kuralları kullanarak koşulun “doğru” olduğunu ispatlamak olası değildir, bu nedenle “yanlış”tır. Bu kapalı dünya kabulu olarak bilinir.  Örneğin; D doğu, B batı,  G güney, K kuzey şeklinde 4 duvarlı bir oda yüklemini oda(D,B,K,G) şeklinde tanımlayalım. Her değişken; kapı için ‘k’, duvar için ‘d’, pencere için ‘p’ değerlerden birini alabilsin.  Eğer kuzeyde kapısı olmayan bir oda istiyorsak aşağıııdaki kuralı yazabiliriz:

            oda1(D,B,K,G) :- oda(D,B,K,G),

                                          not(K==k).

Oda1 kuzeye kapısı olmayan odaları içerir. Oda1 yüklemini test etmeden önce oda yüklemini yazmak gerekir. Tüm olasılıkları belirtmek için 81 tane gerçek yazmak yerine bir yüklem tanmlayarak bu işlemi yapabiliriz.

            duvar_tip(d).                          % duvar

            duvar_tip(k).                          % kapı                        à gerçekler.

            duvar_tip(p).                          % pencere

            oda(D,B,K,G) :- duvar_tip(D),

                                       duvar_tip(B),                                 à kural

                                       duvar_tip(K),

                                       duvar_tip(G).

oda, oda1 kuralları ile duvar_tip gerçeklerini bir program olarak yazarak aşağıdaki sorgulamaları yapınız:

  • oda1(D,k,K,G).     à kuzeyde kapı yok, batıda kapı var , doğu ve güney serbest.
  • oda1(D,B,K,G).    à kuzeyde kapısı olmayan tüm odalar.

Sonuçları Göstermek

Sorgulama sonucu istediğimiz cevaplara erişmekteyiz.  Bu cevapları farklı formatta yazdırmak için write yüklemini kullanabiliriz.  Örneğin yukarıdaki odaları yazdırmak için yaz_oda (D,B,K,G) yüklemini aşağıdaki şekilde yazabiliriz:

            yaz_oda(D,B,K,G) :-  write(D), write(‘ ‘),

           write(B), write(‘ ‘),

write(K) write(‘ ‘),

write(G) write(‘ ‘), nl.

Burada nl yüklemi satırbaşı yaptırmak için kullanılmaktadır.  Yaz_oda yüklemi oda1 yükleminin son satırına eklenerek kullanılabilir.