Prolog, yapay
zekanın ve uzman
sistemlerin dili. Bu dil, temelden farklı düşünce sistemiyle, geleneksel programlama dillerinden ayrılıyor.
İnsanlar, uzman sistemlerin farklı alanlarda ve hatta entelektüel alanda kendi yüklerini hafifletileceği ümidini, beşinci nesil bilgisayarlara bağlamış durumdalar. Bir uzman sistem, belirli bir uzmanlık alanında insani yetenekleri bellekte saklayan ve gerektiğinde kullanan bir yardımcı olarak görülebilir. Birçok alan arasında ilk akla gelenler, teknik gereçlerde ve tamir atölyelerinde hata arama, hastalıkların teşhisi ve tedavi önerileri, denetleme ve yönetim görevleri, tahminler, bilgi dağıtımı vb.'dir. Bu sırada mantıksal içermeler ve şüpheli bilgilerin kullanılması ve değerlendirilmesi gibi yetenekler kullanılıyor. Uzman sistemler açısından tipik olan, “a 7ise, a 5” gibi kesin matematiksel vargılar değil, aksine ““Eğer Xx ve y gerçek ise, z'nin de gerçek olduğu olasılığı P ortaya çıkar”” türünde ifadelerdir. Yeni detayların ortaya çıkmasıyla ve ek bilgilerin katılmasıyla bir ifade daha da güçlenebilir ya da zayıflayabilir. İdeal bir uzman sistem, kullanıcıya, belli bir yargının nasıl oluştuğunu da açıklayabilmelidir. Yanlış olan, uzman sistemleri beşinci
Prolog Sözlüğü
Anonim değişken Alışılmış değişkenin alabileceği değerlerin önemli olmaması halinde, bu değişkenin yerine kullanılan ““-” değişkeni. Çalışma-kütüğü Derlenmek veya işletilmek için içinde Prolog kaynak programının bulunduğu kütük. Argüman Parametre gibi, bir ilişkinin değişkeni veya nesnelerini topluca ifade eden ad. Backtracking O anki hedefin gerçekleştirilemiyor olması durumunda, bir önceki kısmi hedefin gerçekleştirilmesine çalışılması yöntemi. Clause Belirli bir ifade için bir olgu ya da bir kural. Diyalog penceresi Turbo-Prolog'da dış hedeflerin sorulduğu ve Prolog sisteminin cevabının sunulduğu sistem penceresi. Domain Nesnelerin türü hakkında bilgi verilen program bölümü. Editör penceresi Turbo-Prolog'da, örneğin Prolog programlarının girildiği ve işlendiği sistem penceresi. Uzman sistem Belirli (ve çoğunlukla dar) bir alandaki bir uzmanın yeteneğini karşılayabilen (taklit edebilen) bir bilgisayar sistemi. Dış hedef Prolog programı tarafından talep edilen ve kullanıcı tarafından diyalogda verilmesi gereken hedef. Olgu Nesneler arasında varolan ilişki. Örneğin “oynuyor (Ahmet, futbol” ifadesinde “oynuyor”, ilişkinin adı; “Ahmet” ve “futbol” ise nesnelerdir. Fail Erişilemeyen kısmi hedef. Serbest değişken O anda hiçbir belirli değeri olmayan değişken.
nesil bilgisayarlarla özdeşleştirmektir. Bunların prototipleri yıllardır tıp, tek-
Goal Gerçekleştirilmesi gereken kısmi hedeflerin tümü. Integer -32768 ila 4 32767 arasındaki bir tamsayı. İç hedef Programda hedef kısmında formüle edilmiş olan hedef. Liste Özel bir nesne türü, köşeli parantezlere alınmış ve birbirinden virgüllerle ayrılmış nesneler toplamı. İşlemci önceliği İşlemlerin yerine getirildiği sırayı belirlemeye yarayan hiyerarşi. Parametre Bir ilişkinin değişkeni ve tüm nesnelerinin toplu adı.
Predicate Her olgu ve her kural bir ifadeye (predicate) aittir. Bu ifade, ilgili ilişkinin adını ve eklemlenen nesnelerin türünü belirtir. Real 10-307 ila 104-308 arasında bir ondalık sayı. Recursion Bir sürecin kendi tanımını çağırabilmesi tekniği. Kural Bir olgu ve yerine getirilmesi gereken birden çok kısmi hedef arasındaki ilişki. Stack Parametre değiştokuşu için bellek alanı.
Standart-predicate Turbo-Prolog sistemi içinde tanımlanan predicate. Simge Küçük harfle başlayan bir ad. Trace penceresi Turbo-Prolog'da bu pencere sayesinde, programın akışı deneme amacıyla izlenebilir.
Değişken Büyük harfle başlayan bir ad. Değişken, belirli bir nesnenin değeri yerine kullanılabilir. Bileşik hedef En az iki kısmi hedeften oluşan hedef. Hedef ağacı Bir temel hedefin kısmi hedeflerinin değerlendirilmesinde ortaya çıkan olasılıkların diyagramı.
kullanılmaktadır.
nik ve moleküler genetik alanlarında
Expert Systems şirketinin yöneticisi Alex Prolog programlama dilinin kullanım değeri üzerine şunları söylüyor: “Yapay Zeka alanında yeni olan bir kişi, Prolog'dan başka bir şey kullandığı takdirde hataya düşmüş olur, çünkü Prolog'u kullanmak LISP'i kullanmaktan daha keyiflidir.'”” Bu bağlamda iki dil daha sözkonusu: VALID ve Occam. Tüm bu diller açısından, geleneksel programlama yönteminden bir sapma gözleniyor. Bu sapma özellikle Prolog'da çok belirgin. Geleneksel programlama dillerinin aksine, Prolog'da, program akışını yönetmesi gereken dil ögeleri (GOTO, FOR-NEXT vs.) hemen hemen hiç yok. Programcı bir algoritmayı kodlamıyor, bunun yerine betimlenecek sorun alanında geçerli olan olguları, ilişkileri ve kuralları veriyor. Uzman sistemler bağlamında şu da söylenebilir: Bilgi, tüm karşılıklı bağımlılıklarıyla ve ilişkileriyle biraraya getirilir. Turbo-Prolog'la yazılmış basit bir örnek:
domains
kişiler, spor — simge
predicates
oynuyor (kişiler, spor)
clauses
oynuyor (ahmet, futbol).
oynuyor (Ayla, voleybol).
oynuyor (Hasan, satranç).
oynuyor (Aziz, tenis).
oynuyor (Sacit, X) if oynuyor (Ha-
san, X).
Bu program, küçük bir grubun üye-
leri olan insanların herbirinin hangi
spor türlerini yaptıklarını veriyor.
Programın birinci bölümünde (doma-
ins), karşılaşılan sorunda rol oynayan
objelerin adları ve hangi türde olduk-
ları veriliyor. Örneğimizde hem kişi-
ler hem de spor, simge türünde. Di-
ğer olası türler, örneğin, real ve integer. İkinci bölümde (predicates), ilişkilerin adları sayılıyor ve bunlara bağlı objelerin adları veriliyor. Örneğimizde kişiler ile spor arasında bir ilişki oluşturuyor. Böylece açıklama öbeği kapanıyor. Bundan sonra işlem kısmı geliyor. İşlem kısmında (clauses), önce dört olgu belirtiliyor. Beşinci işlem ise kafa (vargı)dan ve gövde (öncüller)den oluşuyor ve hüküm olarak adlandırılıyor. Bunda, Hasan tarafından yapılan her sporun, Sacit tarafından da yapıldığı belirtiliyor. “İf”” yerine çoğunlukla :-da olabiliyor ve bu “eğer” şeklinde okunabiliyor. Bir işlemin gövdesi çoğunlukla daha karmaşıktır ve mantıksal işlemcilerle birbirine bağlanan tekil literallerden oluşur. Burada “,” ve “;”” simgeleri, mantıksal VE ve mantıksal VEYA yerine kullanılır. Beşinci işlemde X değişkeni ortaya çıkıyor. Değişkenler, sabitlerin aksine daima büyük harfle yazılır. Sabitler, tekil kişiler veya kavramlar için kullanılırken, değişkenler farklı zaman noktalarında farklı kişilerin veya kavramların adlandırılması gerektiğinde kullanılır. Derlenmiş ve başlatılmış programa sorular yöneltilebilir. . Turbo- Prolog'da bu talep, ““Goal:-”” şeklinde iletilir. Program, örneğin ““oynuyor (Hasan, satranç).” girişini “true” (doğru) şeklinde cevaplar. ““Oynuyor (Ahmet, tenis).” girişi ise ““no solution” ifadesiyle cevaplanır, çünkü programdan Ahmet'in tenis oynadığını veya oynamadığını belirten bir şey çıkmamaktadır. Sacit'in satranç oynayıp oynamadığı sorusu da kolayca cevaplanamaz. Fakat üçüncü olgu ve programın sonundaki hüküm, sonuçta ifadesini doğururlar. Sorular, değişkenler de içerebilir. Örneğin “oynuyor (1, satranç) sorusu, “IT — Hasan I — Sacit 2 solutions” şeklinde cevaplanır. ““Grupta hangi spor türleri yapılıyor?” şeklinde bir soru sormak da mümkündür. Bu durumda, soruyu soran açısından kimin hangi sporu yapmakta olduğu önem taşımamaktadır. Prolog programına yöneltilen soru, anonim değişken olarak adlandırılan - simgesini içerir. Soru, oynuyor (-,S) şeklinde sorulur ve
“S — futbol S — voleybol S — satranç S — tenis
4 solutions” şeklinde cevaplanır.
Basit programlarda sonuçlar doğal olarak önceden görülebilir, ama karmaşık programlarda durum farklıdır. Prolog'un değerlendirme stratejisi ise hep aynı kalır. Her soru bir hipotez gibi kavranır. Tüm bilgi (olgular, ilişkiler, kurallar), Prolog tarafından, bu hipotezi kanıtlamaya yönelik bir kurallar), Prolog tarafından, bu hipotezi kanıtlamaya yönelik bir deneme ve yanılma yöntemine göre taranır. Bu tarama sırasında, her defasında ikişer Prolog yapısının, serbest değişkenlerin uygun biçimde bağlanmasıyla özdeşleştirilmesi denenir. Bu durum, “oynuyor (1, futbol)” ifadesinde gerçekleşir, çünkü I değişkeni Ahmet sabitine bağlanabilmektedir; fakat “oynuyor (Sacit, voleybol)” ifadesinde gerçekleşmez. Arama, çok zaman harcanmasına neden olabilen Backtracking yöntemiyle gerçekleşir. Fakat işlemlerin içinde uygun yerlere, eğer daha fazla arama gereksiz olacaksa, ! simgesiyle kesmeler konabilir. Prolog'un düşünme sistemi açısından belirleyici olan, programdaki işlemlerin sırasının önem taşımamasıdır. Bu sıra istendiği gibi değiştirilebilir ve programın çalışma tarzında hiçbir değişiklik olmaz. Prolog'da göndermelerin, giriş-, çıkış- ve diğer rutinlerin bulunması nedeniyle, bu dil, geleneksel dillerle çalışan programcılar tarafından başlangıçta çok özel bir dil olarak algılanacaktır. Prolog'da karşılaştıkları ve alışık olmadıkları düşünce tarzı, bu dil-
"le örneğin oyun programlamalarının imkansız olduğu kanısına kapılmalarına neden olacaktır. Halbuki piyasada giderek artan sayıda bulunan Prolog'la yazılmış oyun programları, bu kanının yersizliğini göstermektedir.