Mantıksal Programlama-Prolog

Slides:



Advertisements
Benzer bir sunumlar
HTML.
Advertisements

Değişkenler.
STRİNG FONKSİYONLARI.
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
FONKSİYONLAR Hazırlayan:Ogün İçel.
PHP ile Lab Örnekleri Lab Çalışması.
KÜME DÜNYASINA GİDELİM
ÖNERMELER VE MANTIK HAZIRLAYAN: AYDIN EREN KORKMAZ
ÖNERME ANALİZİ VE YÜKLEM MANTIĞI Yılmaz KILIÇASLAN.
JAVASCRİPT VERİ TÜRLERİ
JavaScript Birinci Hafta.
KÜMELER.
FIRAT ÜNİVERSİTESİ TEKNOLOJİ FAKÜLTESİ
Prolog1 M.Fatih Amasyalı
ALGORİTMA ÖRNEKLERİ Programlamaya Giriş
ÖNERME ANALİZİ VE YÜKLEM MANTIĞI Yılmaz KILIÇASLAN.
Mantıksal Programlama-Prolog
SQL de Değişken Tanımlama
SIFATLAR ÖN AD.
ONDALIK KESİR.
TBF Genel Matematik I DERS – 3 : Limit ve Süreklilik
MATEMATİK 6. SINIF KONU: KÜMELER.
İNTERNET PROGRAMCILIĞI I BTP 207 Ders 9. Tek değişkende birden fazla bilgi tutulmak istendiğinde kullanılır. Kullanım şekli: var dizi_adı= new Array(eleman1,
MANTIKSAL OPERATÖRLER
Formüller Mustafa AÇIKKAR.
Cümle Bilgisi
Cümle Bilgisi Hazırlayan Şerife TUNCA
SQL de Değişken Tanımlama
RELATIVE CLAUSES Sıfat cümleleri
C++ Temelleri C++ genel amaçlı, nesne tabanlı, yüksek seviye programlama dilidir.
KÜMELER GEZEGENİNE HOŞ GELDİNİZ.
KÜMELER.
ALGORİTMALAR VE PROGRAMLAMAYA GİRİŞ
Koşul İfadeleri ve Akış Kontrolü Yazdığımız uygulamanın hangi koşulda nasıl davranacağını belirterek bir akış kontrolü oluşturabilmek için koşul ifadelerini.
Akış Kontrol Mekanizmaları
MESAJ KUTUSU.
 2006 Pearson Education, Inc. All rights reserved Kontrol İfadeleri: 2. Bölüm.
PROLOG PROGRAMLAMA DİLİNDE
CÜMLE ÇEŞİTLERİ YÜKLEMİNİN TÜRÜNE GÖRE 2) ÖĞELERİNİN DİZİLİŞİNE GÖRE
Erciyes Eğitim Fakültesi Türkçe Öğretmenliği 2. sınıf
Mustafa AKBAŞ Malatya-2014
C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar.
ÖNERMELER MANTIĞI Yılmaz KILIÇASLAN.
Bilgisayar Bilimlerinin Kuramsal Temelleri
KENAN ZİBEK.
FONKSİYON TARİHİ FONKSİYON
YAZIM KURALLARI.
Relative Clauses Sıfat cümleleri
MANTIK BİLİMİNE GİRİŞ VE ÖNERMELER MANTIĞI Yılmaz KILIÇASLAN.
MUSTAFA GÜLTEKİN Matematik A Şubesi.
Dr. Mehmet Dikmen BİL551 – YAPAY ZEKA MANTIK Dr. Mehmet Dikmen
ÖNERME ANALİZİ VE YÜKLEM MANTIĞI Yılmaz KILIÇASLAN.
TBF Genel Matematik I DERS – 11: Belirsiz İntegral
TEMEL php Dersleri - Ders 1 Değişgenler
KÜMELER.
CÜMLE TÜRLERİ.
YAPAY ZEKA P ROLOG 3. Geriye İz Sürme Mekanizması sever(oktay, okuma). * sever(yavuz, bilgisayar). sever(orhan, tavla). sever(vedat, uyuma). sever(ismail,
PHP ve HTML İnternet Programlama - 2. Koşullu İfadeler ve Döngüler Döngü ya da çevirim diyebileceğimiz, belli şart ve koşullarda istenilen değerleri yapabilmemizi.
İbrahim Olgaç PROGRAMLAMA DİLLERİ SUNUMU C#
Prolog ile Mantık Programlamaya Giriş
ONDALIK KESİR.
RELATIVE CLAUSES Sıfat cümleleri
Prolog Programlama LİSTELER (LISTS).
KÜMELER HAZIR MISIN?.
VERİ TÜRLERİ.
WEB TASARIMI HTML LİSTELER VE FRAMELER SAVAŞ TUNÇER.
Excel’de VBA Programlama (Visual Basic Application)
Bilgisayar Bilimi Problem Çözme Süreci-2.
Veri Tabanı Yönetim Sistemleri I
Bilgisayar Bilimi Problem Çözme Süreci-3.
Sunum transkripti:

Mantıksal Programlama-Prolog

Prolog-bildirimsel (declarative) dildir. Bildirimsel cümleler,örneğin P if Q and R and S biçimindedir. Bu cümle yordamsal (procedural) biçimde böyle yazılabilir: P’yi çözmek için Q’yü çöz,sonra R’i, sonra S’i çöz.

Prolog dili –temel kavramlar Genellikle yapay zeka sorunlarını çözmek için oluşturulmuştur. İlk kez 1972 yılında Marseilles Üniversitesinde çalıştırılmıştır. "Prolog" adı "programming in logic“ kelime-lerinden alınmıştır. Prolog’un temelini yüklemler mantığı oluşturmaktadır. Mantıksal çıkarım kuralını uygulamakla programın amacına (çözüme) ulaşılıyor.

Temel kavramlar (devamı) Tanım: Cümle (clause) iki kısımdan oluşmaktadır. Baş kısım ve metin. Cümlede okun gösterdiği kısım baş kısımdır. Sol taraf ise metindir. Horn cümlesi, baş kısmında en fazla bir literal (öneri/yüklem) bulunan cümledir. Örnek : Aşağıdaki cümleler Horn cümleleridir a) P (X), Q (Y) → W (X,Y) b) R (X, Y), Q (Y) → ? (a)’da W (X, Y) cümlenin başı, P (X), Q (Y) ise metnidir. (b)’de R(X, Y), Q(Y) metindir. Baş kısım null cümledir. (b) cümlesi R (X, Y), Q (Y) ‘nin doğru olup-olmadığını veya hangi X ve Y değerleri kümesinin R (X, Y) ∧ Q (Y) ifadesini doğru yaptığını sorguluyor Tanım : Mantıksal program, Horn cümlelerinden oluşan programdır

Temel kavramlar (devamı) Yordam tanımı Prolog yordam çağırma yöntemiyle çalışıyor. Prolog programı yordamların tanımından ve onların değerlendirilmesinden oluşuyor. Örnek: a :- b, c. Bu cümle yordamın tanımıdır. Biz a’yı değerlendirmeliyiz ve bunun için b ve c’yi değerlendirmemiz gerekiyor..”Değerlendirme” , ifadenin doğru ve ya yanlış olmasını belirlemektir. Bu cümle mantıksal olarak böyle de okuna bilirdi: a if (b and c) anlıyor(bob, prolog) :- var(bob, mantık). anne(X, Y) :- ebeveyn(X, Y),kadın(X). mutlu(U) :- öğrenci(U), kayıtlıdır(U,yapay_zeka), sınav_var(yapay_zeka). “ve” ile bağlanmış tüm mantıksal birimler birinci dereceden yüklemlerdir. Prolog’da “if“ “:-” ile , “ve” “virgülle” “veya” “;” ile ifade ediliyor.

Hesaplama Örnek: a :- b, c. (bu örnekte a cümlenin başı, “b,c” metnidir. Sorgular ? -ile başlar (Prolog yorumlayıcıları çoğunlukla böyle çalışıyor). Yürütülmek için ilk çağrılan a’dır. Yordamın çağrılması a’nın yerine cümlenin metin kısmını koymakla gerçekleştiriliyor. ?- b, c, d, e. Sorgu verildiği zaman Prolog, baş kısmı sorgunun baş kısmı ile eşleşen cümleyi buluyor ve çağrıyı bu cümlenin metni ile değiştiriyor. Bu anlamda Prolog yorumlayıcısı türeme sorgular zinciri üretmiş oluyor ki, buna hesaplama denir. Hesaplamanın her adımı bir yordam çağırma işlemidir.

Prolog dilinin sözdizimi Prolog programı yazarken ilk önce nesneler ve onlar arasındaki ilişkiler tanımlanır. Nesneler arasındaki ilişkiye yüklem denir. Bilinen olgular ve ilişkiler gerçeklerdir. Gerçekler (.) ile biter. insan(ahmet). kirmizi(gül). Sever(ahmet,gül).

Prolog dilinin sözdizimi-kurallar Kurallar, gerçek olguları kullanarak bir sonuca varmak için kullanılır. sever(yasin,Hersey):-sever(esra,Hersey). Yasin,Esra’nın sevdiği her şeyi sever (:- ) simgesi eğer anlamında olup bir kuralın iki parçasını birleştirir. Sabitler,yani değeri sabit olan nesneler küçük harfle, değişkenler büyük harfle başlar. Sabitler tırnak arasında da (büyük-küçük harflere bakmaksızın) ifade edile bilir.Değişkeni (_) ile de ifade etmek mümkündür

Prolog dilinin sözdizimi-sorgular sever(cengiz, masa_tenis). sever(mehmet,yüzme). sever(yavuz,futbol). sever(Levent,Spor):-sever(yavuz,Spor). Levent,bir spor türünü eğer Yavuz da seviyorsa sever Levent’in yüzmeyi sevip sevmediğini öğrenmek için sever(levent,yüzme) sorgusunu kullanmak yeterlidir. GOAL satırına bu sorguyu yazarsak No yanıtını alırız

“Ders saati” bilgi tabanı

“Ders saati” bilgi tabanı (devamı) 1. Yazı tahtası ,ders saatlerinde hocaların yazmak için kullandıkları bir nesnedir Yüklemler mantığında bu cümle böyle yazılır: Object (board) ∧ Writes-on ( X, board, Time ) ∧ Teacher (X) →Equal (Time, classhour). 2. Hoca , ders saatinde yazı tahtası üzerinde yazı yazan kişidir ∀ X ( Person(X) ∧ Writes-on (X, board, classhour) → Teacher (X) ) 3. Öğrenci ders saatinde sandalyede oturan kişidir ∀Y ( Person (Y) ∧ Sits-on (Y, bench, Time) ∧ Equal (Time, classhour) →Student (Y) ) 4. Eğer en azından bir kişi ders saatinde sandalyede oturmuşsa ve ikinci bir kişi aynı zamanda yazı tahtasında yazı yazıyorsa bu zaman = ders saati) ∃ Y ( ( Person (Y) ∧ Sits-on (Y, bench, classhour )) ∧ ∃ X (Person (X) ∧ Writes-on (X, board, Time)) → Equal (Time, classhour) ) 1. Yazı tahtası ,ders saatlerinde hocaların yazmak için kullandıkları bir nesnedir Yüklemler mantığında bu cümle böyle yazılır: Object (board) ∧ Writes-on ( X, board, Time ) ∧ Teacher (X) →Equal (Time, classhour). 2. Hoca , ders saatinde yazı tahtası üzerinde yazı yazan kişidir ∀ X ( Person(X) ∧ Writes-on (X, board, classhour) → Teacher (X) ) 3. Öğrenci ders saatinde sandalyede oturan kişidir ∀Y ( Person (Y) ∧ Sits-on (Y, bench, Time) ∧ Equal (Time, classhour) →Student (Y) ) 4. Eğer en azından bir kişi ders saatinde sandalyede oturmuşsa ve ikinci bir kişi aynı zamanda yazı tahtasında yazı yazıyorsa bu zaman = ders saati) ∃ Y ( ( Person (Y) ∧ Sits-on (Y, bench, classhour )) ∧ ∃ X (Person (X) ∧ Writes-on (X, board, Time)) → Equal (Time, classhour) )

Bilgi tabanındaki cümlelerin Prolog dilinde yazılışı 1. Object (board) ∧ Writes-on ( X, board, Time ) ∧ Teacher (X) →Equal (Time, classhour). 2. ∀ X ( Person(X) ∧ Writes-on (X, board, classhour) → Teacher (X) ) 3. ∀Y ( Person (Y) ∧ Sits-on (Y, bench, Time) ∧ Equal (Time, classhour) →Student (Y) ) ∃ Y ( ( Person (Y) ∧ Sits-on (Y, bench, classhour )) ∧ ∃ X (Person (X) ∧ Writes-on (X, board, Time)) → Equal (Time, classhour))

/* “DERS saati “ için Prolog programı */ Time, X, Y, Z, W, board, classhour, bench = symbol Teacher (X) Writes-on (X, board, Time ) Equal (Time, classhour) Person (X) Person (Y) Person (Z) Person (W) Sits-on (Y, bench, Time) Sits-on (Z, bench, Time) Student (Y) Student (Z) Object (W)

bilgi tabanında aşağıdaki cümlelerin de olduğunu varsayalım. father (X, Y):-child (Y, X), male (X). son (Y, X ) :- child (Y, X), male (Y). Bunlar Horn cümleleridir. The above two clauses being horn clauses are constituents of a Logic Program. Bilgi tabanında aşağıdaki verilerin de yeraldığını varsayalım: child (ram, ratha). male (ram). male(ratha)

Prolog yorumlayıcısının çalışması (örnek üzerinde)

Clauses Object (board). 1 Writes-on (john, board, classhour). 2 Sits-on (mita, bench, classhour) 3 Sits-on (rita, bench, classhour). 4 Person (john). 5 Person (mita). 6 Person (rita). 7 Equal (Time, classhour):- Object (board), Writes-on (X, board, Time), Teacher(X). 8 Equal (Time, classhour):-Person (Y),Sits-on (Y, bench, classhour), Person (X ),Writes-on (X, board, Time). 9 Teacher (X):-Person (X),Writes-on (X, board, classhour). 10 Student (Y) :-Person (Y),Sits-on (Y, bench, Time), Equal (Time, classhour). 11

altamac (Person (X)) sağlanmalıdır. geriye izleme (backtracking.) sorgu: Teacher (X)? Teacher (X) ←Person (X),Writes-on (X, board, classhour) cümlesinin amacı (Teacher (X)) sağlaması için altamac (Person (X)) sağlanmalıdır. PROLOG Person (X) altamacı için Person( ) yüklemini arayacak. 5.cümlede eşleşme bulacak ve X’i john ile değişecek. PROLOG 5.cümleyi “işaretleyecek”. Daha sonra kalan cümleler içinde Writes-on (X, board, classhour). altamacının sağlanması için Writes-on (john, board, classhour) aranacak. Ama bu yüklem 2.yerde olduğundan arama başarısız olacak. Bu sebepten Prolog işaretlenmiş yerden yukarıya dönecek ve Writes-on (john, board, classhour) yüklemini bulacak. Altamaçlara ulaşıldığı için amaca da ulaşılmıştır. Çözüm: Teacher (john).

Teacher (X) ←Person (X),Writes-on (X, board, classhour). Person (john).

Person(X)’ten aşağıdaki hükümlerde write_on(john,board,classhour) eşlenmesi sağlanmadığından yukarıya (geriye) izleme gerçekleştiriliyor

Eşleşme 2. cümlede sağlanıyor

Her iki altamaç sağlandığından başarılı amaca ulaşılmıştır

Goal: ?teacher (X) Programın Yanıtı: teacher (john). Goal: ?equal (Time, classhour) Programın Yanıtı: Yes. Goal: ?father (X,Y) Yanıt: father(ratha,ram) Goal: ?son(Y,X) Yanıt: son(ram,ratha).

Liste (List) Liste karmaşık termlerin özel türüdür [a,b,c] [elma,portakal,kayısı] [a,1,b,1,c,2] [] [ebeveyn (fred,mary), ebeveyn (sandra,mary)] [ebeveyin (fred,mary),6,7,8] • Listelerin kendileri listeler içere biliyor [a,[1,2,3],b,[4,5,6]] [[kırmızı,yeşil,mavi]] [[]] [1,2,[3,[4,5],6],7]

Liste (devamı) “|” operatörü listenin başını onun diğer kısmından (kuyruk-tail) ayırıyor | ?- [A|B]=[a,b,c,d]. A = a B = [b, c, d] yes | ?- [a|Rest]=[a,b,c,d]. Rest = [b, c, d] | ?- [a,b|Rest]=[a,b,c,d]. Rest = [c, d]

Liste (devamı) Liste (boş liste dışında) baş(head) ve kuyruk (tail) kısımlardan oluşuyor [a,b,c] Listenin başı – a Listenin kuyruğu -[b,c] Listenin kuyruğu listedir ve listenin başı öğedir(element). Yalnız bir öğeden oluşan listenin kuyruğu boş öğedir. Örnek : [a] listesinde baş a kuyruk []

Liste-örnekler | ?- [G,H|K]=[a,b,c,d]. G = a H = b K = [c, d] Yes No | ?- [A|B]=[x]. A = x B = [] | ?- [A,B|[]]=[a,b]. A = a B = b yes

Liste-örnekler | ?- [A,B,C|D]=[x,y,z,w]. A = x B = y C = z D = [w] Yes no

Liste (örnekler) | ?- X=[a,b,c],L=[d|X]. X = [a, b, c] L = [d, a, b, c] yes | ?- X=[a,b,c],L=[d,e|X]. L = [d, e, a, b, c] | ?- L=[a|[M]]. L = [a, M]

PROLOG dilinde basit örnekler

YOL programı % Author: % Date: 04/14/2005 yol(canakkale, izmir). yol(izmir,aydin). yol(izmir,bursa). yol(bursa,izmir). yol(aydin,antalya). yol(canakkale,bursa). uzunyol(X,Y):-yol(X,Y). uzunyol(X,Y):-uzunyol(X,Z),yol(Z,Y),write(Z),!. bursa aydın çanakkale izmir antalya ?- uzunyol(canak,Y). Y = izmir ; Y = bursa ; izmir Y = aydin ; No

?- yol(izmir,X). X = aydin ; X = bursa ; ?- uzunyol(bursa,antalya). izmiraydin Yes uzunyol(bursa,canak). izmir No

Sonsuz döngünün (kendini yineleme) önlenmemesi durumu ?- uzunyol(canak,X). X = izmir ; X = bursa ; izmir X = aydin ; bursa izmiraydin X = antalya ; izmirbursa bursaizmir izmiraydinizmirbursaizmir bursaizmiraydin izmiraydinizmirbursaizmiraydin X = antalya … Sonsuz döngünün (kendini yineleme) önlenmemesi durumu

Yol_araç programı ?- uzunyol(canak,antalya). yol(canak, izmir,tren). yol(izmir,aydin,araba). yol(izmir,bursa,yaya). yol(bursa,izmir,yaya). yol(aydin,antalya,ucak). yol(canak,bursa,araba). uzunyol(X,Y):-yol(X,Y,K),write(K). uzunyol(X,Y):-uzunyol(X,Z),yol(Z,Y,K),write(Z),write(K),!. ?- uzunyol(canak,antalya). tren araba tren izmir araba aydin ucak

Örnek: Listenin eksi değerli elemanlarının elenmesi Bu program listedeki eksi değerli elemanları eleyerek yeni liste oluşturuyor liste=integer*. eksileri_ele(liste,liste). eksileri_ele([],[]). eksileri_ele([Bas|Kuyruk],IslenmisKuyruk):-Bas<0,!,eksileri_ele(Kuyruk,IslenmisKuyruk). eksileri_ele([Bas|Kuyruk],[Bas|IslenmisKuyruk]):-eksileri_ele(Kuyruk,IslenmisKuyruk). SWI-Prolog console for thread 2 1 ?- eksileri_ele([2,-5],Yeni). Yeni = [2]. 2 ?- eksileri_ele([2,-45,3,3,4,-5,-45],Yeniliste). Yeniliste = [2, 3, 3, 4].

Listenin Elemanlar sayısının hesaplanması Programın temel çalışma mantığı böyledir: Liste boş [] ise, listedeki eleman sayısı 0’dır. Boş değilse eleman sayısı Kuyruk_uzunluk+1 ile bulunabilir. Liste _uzunluk yüklemi kendisini çağırarak listenin uzunluğunu bulur. liste=integer*. liste_uzunluk(liste,integer). liste_uzunluk([],0). liste_uzunluk([_|Kuyruk],Eleman_sayisi):- liste_uzunluk(Kuyruk,Kuyruk_uzunluk), Eleman_sayisi is Kuyruk_uzunluk+1. SWI-Prolog console for thread 2 1 ?- liste_uzunluk([1,2],Eleman_sayisi). Eleman_sayisi = 2. 2 ?- liste_uzunluk([1,2,5,7],Eleman_sayisi). Eleman_sayisi = 4.

“Patron” programı amir(ali,ahmet). amir(ahmet,mehmet). amir(mehmet,veli). amir(veli,fatma). amir(ayse,ahmet). amir(aysun,mehmet). patron(X,Y):-amir(X,Y). patron(X,Y):-amir(X,Z),patron(Z,Y). ?- patron(ali,X). X = ahmet ; X = mehmet ; X = veli ; X = fatma ; No

üç renk sorunu % Author: % Date: 04/14/2005 d(red,blue). d(red,green). d(green,red). d(blue,red). d(blue,green). colorable(W,NT,SA,Q,NSW,V):-d(W,NT),d(W,SA),d(NT,Q),d(Q,NSW),d(NT,SA),d(NSW,V), d(NSW,SA),d(V,SA). ?- colorable(W,NT,SA,Q,NSW,V). W = red NT = blue SA = green Q = red NSW = blue V = red üç renk sorunu

Üç renk sorunu (bir başka çözüm) color(A,B,C,D,E):-next(A,B), next(C,D), next(A,C), next(A,D), next(B,C), next(B,E), next(C,E), next(D,E). next(X,Y):-selectcolor(X),selectcolor(Y), X \== Y. selectcolor(red). selectcolor(green). selectcolor(blue). selectcolor(yellow). SWI-Prolog console for thread 2 1 ?- color(X,Y,Z,K,L). X = red, Y = green, Z = blue, K = green, L = red |

“İlginç akrabalık” programı Ahmet,Ayşe adında genç bir kızı olan Fatma ile evlenmiş. Bu evlilikten Ahmet’in Mehmet adında bir oğlu olmuştur. Ahmet’in babası Ayşe’yi beğenmiş ve onunla evlenmiştir.

“İlginç akrabalık” programı Ahmet,Ayşe adında genç bir kızı olan Fatma ile evlenmiş. Bu evlilikten Ahmet’in Mehmet adında bir oğlu olmuştur. Ahmet’in babası Ayşe’yi beğenmiş ve onunla evlenmiştir. % Author: % Date: 04/14/2005 koca(ahmet,fatma). koca(ali,ayse). anne(fatma,ayse). anne(fatma,mehmet). baba(ali,ahmet). baba(ahmet,mehmet). anne(X,Y):-koca(Z,X),baba(Z,Y). baba(X,Y):-koca(X,Z),anne(Z,Y). dede(X,Y):-baba(X,Z),baba(Z,Y). dede(X,Y):-baba(X,Z),anne(Z,Y). kardes(X,Y):-baba(Z,X),baba(Z,Y). kardes(X,Y):-anne(Z,X),anne(Z,Y). kardes(X,Y):-baba(Z,X),anne(K,Y),koca(Z,K). dayi(X,Y):-baba(Z,Y),kardes(X,Z).

İlginç akrabalık” programı ?- dede(ali,X). /* Ali kimin dedesidir X = mehmet ; X = ayse /* Ali, Ayşe’nin dedesi ve kocasıdır ?- dayi(X,Y). / X = ahmet /*Ahmet, Mehmet’in hem dayısı, hem babasıdır Y = mehmet ; X = ahmet /*Ahmet, Ayşe’nin hem dayısı, hem babasıdır Y = ayse ;

Düşmanımın düşmanı benim dostumdur

Bulmaca Ali,Akif ve Ahmet’in bazı özellikleri verilmiştir.Bu özelliklere göre onların tüm özelliklerini(boyunu,arabasının rengini ve ne tür müzik sevdiğini) bulmalı Ortaboylunun arabası sarıdır; Uzunboylu türkü sever; Alinin arabası mavidir; Ahmet uzunboyludur; Kırmızı arabası olan pop sever; Akif rep sever.

Bulmaca programı ad(ali). ad(akif). ad(ahmet). boy(uzun). boy(orta). renk(kirmizi). renk(mavi). renk(sari). muzik(rep). muzik(turku). muzik(pop). kisi1(X,Y,Z,K):-ad(X),boy(Y),renk(Z),muzik(K),Y=orta,Z=sari. kisi2(X,Y,Z,K):-ad(X),renk(mavi),boy(Y),muzik(K),X=ali. kisi3(X,Y,Z,K):-ad(ali),renk(mavi),muzik(K),boy(Y). kisi4(X,Y,Z,K):-ad(X),boy(Y),renk(Z),muzik(K),X=ahmet,Y=uzun. kisi(X1,Y1,Z1,K1,X2,Y2,Z2,K2,X3,Y3,Z3,K3):-kisi1(X1,Y1,Z1,K1),kisi2(X2,Y2,Z2,K2),kisi3(X3,Y3,Z3,K3),!.

Prolog’da aritmetik işlemlere örnek carpı,toplam=integer. toplama_yap(toplam,toplam,toplam). carpı_yap(carpı,carpı,carpı). toplama_yap(X,Y,Toplam):-Toplam is X+Y. carpı_yap(X,Y,Carpı):-Carpı is X*Y. ishlem(X,Y,Son):-toplama_yap(X,Y,Son);carpı_yap(X,Y,Son) Örnek: 1 ?- ishlem(10,34,X). X = 44 ; X = 340. islem yüklemi 10 ve 34 sayıları üzerindeki işlemlerin sonuçlarını gösteriyor. 44 sayısından sonraki “;” sonraki çözümü göstermek içindir. eşitlik “is” ile ifade ediliyor

Prolog yorumlayıcıları Bu adreslerden prolog yorumlayıcılarını indire bilirsiniz: http://goanna.cs.rmit.edu.au/~winkoff/wp/ W-Prolog , Java’da çalışan basit yorumlayıcıdır. W_Prolog’un grameri çok sınırlıdır.Çevrimiçi çalıştırıla bilir. http://www.swi-prolog.org SWI özgür yazılımdır, bedava indirilip kurula bilir. Geniş imkanlı yorumlayıcıdır.