Eski 18-03-04, 22:39 #1
rolicabi rolicabi çevrimdışı

bynogame
Arrow Prolog bilen

bynogame
Arkadaslar prolog kullanmayı bilen varmı? peki programı nerden bulacagımı bilen varmı?
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 19-03-04, 11:50 #2
HoPPaLa0101 HoPPaLa0101 çevrimdışı

bynogame
Varsayılan Cvp: Prolog bilen

bynogame
var,
gerci prolog ai da kullanılıyor onun harıcınde cok da gecerliligi olan bir dil oldugunu sanmıyorum.
ayrıca programdan kastın compiler heralde. bunun icinde isletim sisteminin ne olduguna gore compiler degisir. linux varsa gnu nun free release i var diye hatırlıyorum. windows sa bi bakınmak lazım nete.
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 21-03-04, 11:38 #3
DaesAgelmar DaesAgelmar çevrimdışı

bynogame
Varsayılan Cvp: Prolog bilen

bynogame
ai ile uğraşanlarda varmış ne güzel
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 18-04-04, 18:00 #4
Kur-Sad Kur-Sad çevrimdışı

bynogame
Varsayılan Cvp: Prolog bilen

bynogame
http://www.visual-prolog.com
.................................................. ........

Prolog Development Center
http://www.pdc.dk

-------------------------------------------------------------------------

1. PROLOG ve LOJİK PROGRAMLAMA
Son yıllara kadar bilgisayar programlama bir problemin çözümü için yapılması gerekenlerin adım adım yazılması şeklindeydi. Yani bilgisayara işlemlerin NASIL YAPILACAĞI (procedural) söylenmekteydi. Fortan, C, Pascal gibi diller bu yaklaşımı kullanmaktadır.

Programlamada bir diğer yaklaşım ise doğru cevabın özelliklerinin verilerek yapılacak işlemlerin belirtilmesidir. Yani bilgisayara işlemlerin nasıl yapılacağı değil NE YAPACAĞI (declarative) söylenmektedir. Bu tip programlama LOJİK PROGRAMLAMA olarak isimlendirilir. Bu amaçla Lisp ve PROLOG gibi programlama dilleri geliştirilmiştir.

Deklaratif dillerin üç önemli üstünlüğü vardır.

• Lojik programlama işlemlerin mekanizmaları yerine mantığına odaklandığından doğal olarak yüksek seviyelidir. İşlemlerin nasıl yapılacağı makinaya bırakıldığı için karmaşık fikirler kolay bir şekilde ifade edilebilir.
• Lojik, verilerin gerçek (fact) ve kural (rule) olarak belirtilmesine olanak sağlar. Örneğin A noktası B noktasına bağlıdır, B noktası C noktasına bağlıdır şeklinde gerçekler belirtilebilir. X Y'ye ve Y Z'ye bağlı ise X Z'ye bağlıdır şeklinde genel kurallar belirtilebilir.
• Lojik programlama dilleri kullanılarak bilgisayar programları daha hızlı ve kolay bir şekilde geliştirilebilir. Programcının karmaşık fikirleri ifade edebilmesi ve veri yapılarını hızlı bir şekilde oluşturmasına olanak tanır.

1.1 PROLOG'A GİRİŞ

Prolog dünyayı ifade etmek için nesneleri (object) ve aralarındaki ilişkiyi (relation) kullanır. Aşağıdaki bildirime bakalım:

• Ali ders verir.

Bu cümle iki nesne (Ali ve ders) arasındaki ilişkiyi belirtmektedir. İlişki nesnelerden daha soyut bir kavramdır. Bu nedenle aynı ilişkiyi diğer nesneler için de kullanabiliriz:

• Oya ders verir.
• Ali seminer verir.
• Hasan ders verir.

Yukarıda verilen gerçekler kullanılarak bu dünya için sorular sorabiliriz. Yalnız belirtilen gerçek ve kurallar doğru kabul edilmektedir. Bunların dışındakiler yanlış kabul edilir.

Örneğin; Ali'nin ders verdiği doğru mu ? şeklinde bir soru sorarsak cevap Evet olmalıdır. Oya'nın seminer verdiği doğru mu? Sorusunun cevabı Hayır olmalıdır. Kimler ders vermektedir? Şeklindeki bir sorunun cevabı : Ali, Oya, Hasan olmalıdır. Çünkü bu kişiler ders ilişkisini gerçeklemektedirler.

Gerçeklerin yanında nesneler arasında daha soyut ve daha genel ilişkileri belirten kurallar vardır. Örneğin ders veren herkesin hoca olduğunu kabul edersek aşağıdaki kuralı yazabiliriz:

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

Burada KİŞİ bir değişkendir. Kuralın eğerli kısmı dünya hakkındaki koşulu vermektedir. Verme ilişkisini kullanarak ders nesnesi ile bilinmeyen KİŞİ nesneler kümesini belirtir. KİŞİ yerine kim uyarsa onun hoca nesnesi ile ilişkisi olduğunuu söyleyebiliriz.

Yukarıdaki kural ve gerçekleri kullanarak yeni ilişkileri çıkarabiliriz:

• Ali hocadır.
• Oya hocadır.
• Hasan hocadır.

Çünkü Ali, Oya ve Hasan kuralın koşulun gerçeklemektedir : KİŞİ ders veriyor.

Benzer şekilde, gerçekler kümesi ve kuralı kullanarak sorgulama yapabiliriz. Örneğin; Oya hoca mı? Şeklinde bir sorunun cevabı Evet olmalıdır.

Kim hocadır şeklinde daha karmaşık bir sorunun cevabı: Ali, Oya ve Hasan olmalıdır.

Bu Prolog'un temel olarak çalışma şeklidir. Gerçekler kümesi bildirilir, nesneler kümesini belirten kurallar bildirilir ve soruları cevaplamak içiin kurallar kümesi ile gerçekler kümesi birleştirilir.


1.2 PROLOG SÖZDİZİMİ (syntax)
İlişkiler yüklem (predicate) olarak aşağıdaki formda belirtilir:

* verir(ali, ders). % Ali ders verir.

Burada "verir" yüklemi iki nesne arasındaki ilişkiyi belirtmektedir. Nesne sayısı 0 veya herhangi bir sayıda olabilir. Bu sayı "arity" olarak isimlendirilir.

Kuralların yazımında bazı sınırlamalar vardır:

• Nesne ve yüklem isimleri küçük harf ile başlar.
• Önce yüklem yazılır. Eğer nesneler var ise parantez içinde virgülle ayrılmış şekilde yazılır.
• Her gerçek nokta karakteri ile sonlandırılır.

Bu sınırlamalara bağlı olarak yukarıda verilen gerçekleri aşağıdaki şekilde yazabiliriz:

• verir(ali,ders).
• verir(oya,ders).
• verir(ali,seminer).
• verir(hasan,ders).

Gerçekleri Sorgulama:

Gerçekler kümesi verildikten sonra onların hakkında sorular sorulabilir. Prolog'da sorgulama programı başlatma şeklidir. Yazım olarak sorgulama gerçeğe (fact) benzer ama yüklemde değişken kullanılabilir. Değişkenler büyük harf ile başlar.

Sorgulama sonucu Evet/Hayır veya nesneler kümesi şeklinde olabilir. En basit şekli Evet/Hayır şeklinde olanıdır:

• verir(oya,ders). sorusunun cevabı Evet,
• verir(oya,seminer) sorusunun cevabı Hayır olmalıdır.

Daha genel sorgulama nesneler kümesini içerir. Örenğin Kimler ders verir? Şeklinde bir soru prologda:

• verir(X,ders).

Şeklinde yazılır. X ders ile arasındaki ilişkiyi gerçekleyen herhangi bir nesneyi temsil eden değişkendir. Yukarıdaki sorunun cevabı aşağıdaki şekilde olmalıdır:

• X = ali
• X = oya
• X = hasan

Diğer yandan, Ali ne verir? Şeklindeki bir soru aşağıdaki şekilde yazılabilir:

• verir(ali,X).

Bu sorunun cevabı

• X = ders
• X = seminer

olmalıdır.

Kim ne verir şeklinde bir soru aşağıdaki şekilde sorulabilir:

• verir(X,Y).

Bu sorunun cevabı aşağıdaki şekildedir.

• X = ali , Y = ders
• X =oya, Y = ders
• X =ali, Y = seminer
• X =hasan, Y = ders

1.3 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şğı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 bilgilerede gereksinim duyulabilir:

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

Bu bilgiler kullanılarak nesneler arasındaki ilişkiler için kurallar yazılabilir. Örneğin herhangibir 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.


1.4 Yineleme (Recursion)

Prolog'un en ilgi çekici özelliklerinden birisi yineleme kapasitesidir. Yineleme bir şey kendisi ve sonlandırma koşulu kullanarak tanımlanırsa olur. Faktöriyel tanımı klasik bir örnektir:

• N'in faktöriyeli N kere N-1'in faktöriyeline eşittir.
• Sıfırın faktöriyeli 1'dir.

Faktöriyelin bu tanımı prologda kolayca ifade edilebilir:

faktoriyel(0,1).  gerçek
faktoriyel(N,X) :- M is N-1,  kural
faktoriyel(M,Y),
X is N * Y.

Bu örnekte gerçek kuraldan önce yazılmalıdır. Prolog'da gerçek ve kurallar programdaki yazılış sırasına göre işlem görmektedir. Prolog kuralın içinde faktoriyel(M,Y)'yi bulurken programda yüklemin ilk geçtiği yerden başlayarak çözümü arar. M sıfıra kadar azaltılmaktadır. M sıfır olduğunda "gerçeğe" erişildiği zaman geri dönüş işlemi başlar. Eğer gerçek kuraldan sonra yazılırsa sonsuz döngüye girilir.

Yineleme, programlarıın basit ve kısa olmasını sağladığı için çok kullanışlıdır ama program yazılırken çok dikkatli olmak gerekir. Yineleme yalnız rakam ile değil veri yapıları ile de yaplabilir. Prolog'da veri atom (tek değer) veya liste (çok değer) olabilir. Liste elemanlar kümesidir. Elemanlar; sayı, harf, karakter dizisi hatta liste olabilir.

Liste [ ] içinde ve elemanları virgül ile ayrılmış şekilde yazılır. Aşağııda basit listeler görülmektedir:

• [printer, monitor, mouse, cpu ]
• [123, 45, 667]
• [a, b, c, d, e, f, g]

Liste, elemanlar kümesi olduğu için kesişim, bileşim, fark gibi temel işlemler prologda yapılabilir. Örneğin; X, L litesinin üyesi ise doğru olan üye(X,L) yüklemi prologda aşağıdaki gibi tanımlanabilir:

• uye(X,[X|_]).
• uye(X,[_|L]) :- uye(X,L).

| operatörü listeyi ilk eleman(baş) ve geri kalanı (kuyruk) şeklinde ikiye ayırır. Eğer X listenin ilk elemanı ise 1.satırdaki uye(X,[X|_]) yüklemi doğrudur. Altçizgisi "_" değişkenin değerini dikkate alma anlamındadır. Burada kuyrukta ne olduğuna bakılmamaktadır. Eğer birinci satır yanlış ise ikinci satıra bakılır. Bu satırda listenin ilk elemanı uzaklaştırılarak tekrar ilk elemanın X'e eşit olup olmadığına bakılır.

Not: üye yüklemi prologda "member(X,L)" şeklinde tanımlanmıştır.

Üye yüklemini bir dosyaya yazarak aşağıdaki sorgulamaları yapın:

• uye(a,[b,c,a,d]).
• uye(a,[b,c,d,e]).
• uye(2,[1,2,3,34]).
• uye(2,[1,5,3,34]).

Altküme işlemi de yararlı bir işlemdir. X listesinin tüm elemanları Y listesininde elemanı ise altkume(X,Y) yüklemi doğrudur. Bu problemi çözmemiz için X'in tüm elemanlarının Y'nin de elemanıı olup olmadığına bakmamız gerekir. X listesinde kontrol edilecek eleman yoksa durur aksi takdirde başarısızlıkla (fail) karşılaşılır. Program aşağıdaki şekilde yazılabilir:

• altkume([],_).
• altkume([X|L],Y) :- uye(X,Y), altkume(L,Y).

Burada [] boş kümedir. X'deki tüm elemanlar kontrol edilince 1.satır doğru olur.

Uye yüklemini ve altküme yüklemini aynı dosyaya yazarak aşğıdaki sorgulamaları yapınız:

• altkume([a,b,c],[x,a,g,b,f,c,k]).
• altküme([1,5,10],[10,5,1,4]).
• altküme([1,5,10],[10,5]).

1.5 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.

1.6 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.

1.7 Cut & Fail (Kesme ve Başarısızlık )

Prolog alternatif çözüm ve kanıtları bulacak bir sisteme sahiptir. Programları daha basit kodlarla çözebilmek için prologun davranışını değiştiren iki yüklem vardır: cut, fail.

1.7.1 Cut (kesme)

Cut '! ' karakteri ile gösterilir. Prolog alternatif çözümleri bulmak için geriye dönerek arama yapar (baktracting). Cut alternatif çözüm arayışını durdurur. Örneğin; 1-3 kademesinde verilen rakamı yazıyla yazdırmak için aşağıdaki program yazılabilir:

yaz(1) :- write('bir').
yaz(2) :- write('iki').
yaz(3) :- write('üç').
yaz(X) :- X<1, write('Sınır dışı').
yaz(X) :- X>3, write('Sınır dışı').

Bu program doğru çalışır ama herhangi bir X değeri için tüm satırlara bakılır. Yani tüm alternatifler gözden geçirilir. İstenen satır işlem gördükten sonra diğer satırlara bakılmaması Cut ile sağlanabilir:

yaz(1) :- !, write('bir').
yaz(2) :- !, write('iki').
yaz(3) :- !, write('üç').
yaz(_) :- write('Sınır dışı').

Burada arguman 1 ise ekrana "bir" yazar ve diğer cümlelere bakılmaz. write yüklemi alternatif çözümler üretmediği yalnız bir değer yazdığı için deterministiktir. Kesme işaretinin deterministik yüklemden önce veya sonra olması farketmez.

İki sayıdan büyük olanını veren max(X,Y,Z) yüklemi aşağıdaki gibi tanımlanabilir:

max(X,Y,X) :- X>=Y.
max(X,Y,Y) :- X<Y.

X ve Y değerlerine bağlı olarak bu kurallardan biri başarılı diğeri başarısız olacaktır. Eğer birinci kural başarılı ise alternatif çözüm için ikinciye bakmak gereksizdir. Bu nedenle kesme isembolu kullanılarak program aşağıdaki şekilde tekrar yazılabilir:

max(X,Y,X) :- X>=Y, !.
max(X,Y,Y).

X>=Y olduğunda birinci kural işlem görür ve kesme sembolu diğer max yüklemlerine bakılmasını engeller.


1.7.2 Fail (başarısızlık)

Prolog verilen soruya cevap bulmak için arama yapar ve cevabı bulursa ekrana yazar. Bulamazsa yani başarısız (fail) olursa geriye dönerek varsa alternatif çözüm yollarını dener. Aşağıdaki programı gözönüne alalım:

hayvan(kus).
hayvan(kedi).
hayvan(aslan).

yaz: hayvan(X), write(X), nl.

Programı yükleyip yaz dediğimiz zaman prolog sadece kuş yazar. Eğer geri dönerek olası tüm çözümleri yazmasını istersek fail kullanarak kuralı aşağıdaki şekilde yazabiliriz:

yaz: hayvan(X), write(X), nl, fail.

Fail prologa başarısız olduğunu başka bir çözüm bulmasını söyler. Böylece prolog tüm olasılıkları denemek zorunda kalır. Bakılacak çözüm kalmadığında program başarısızlıkla "no" yazıp durur. Eğer programın bu işlemlerden sonra başarı olduğunu belirtmek istiyorsak son satıra "yaz" ekleyerek programın "yes" ile sonlanmasını sağlayabiliriz:

hayvan(kus).
hayvan(kedi).
hayvan(aslan).
yaz: hayvan(X), write(X), nl, fail.
yaz.

1.8 Bilgi tabanını değiştirme

Prolog'un en büyük gücü programların kendilerini değiştirebilme yeteneğidir. Programlar gerçek ve kurallara bağlı olarak çalıştığı için bunların değiştirilmesi veya yenilerinin eklenmesi programın işleyişini değiştirecektir. Assert, asserta ve assertz bilgi tabanına ekleme yapmak için kullanılır. Assert bulunulan pozisyona, asserta başlangıca, assertz ise sona ekleme yapar. Örneğin yukarıda verilen programa aşağıdaki ifade ile bir gerçek eklenebilir:

assert(hayvan(sinek)).

Bilgi tabanından çıkarma işlemi için retract kullanılır. Örneğin kedi'yi bilgi tabanından silmek için aşağıdaki ifadeyi yazabiliriz:

retract(hayvan(kedi)).

Ekleme ve silme işlemlerinin yapılabilmesi için yüklemlerin dinamik olduğunun prrogramın başında belirtilmesi gerekir. hayvan yüklemi aşağıdaki şekilde dinamik olarak tanımlanabilir:
:- dynamic hayvan/1.

Burada 1 sayısı hayvan yükleminin arguman sayısıdır.

Herhengi bir yüklemle ilgili tüm cümleleri silmek için abolish yüklemi kullanılır. Örneğin bilgi tabanındaki tüm hayvan tanımları aşağıdaki ifade ile silinebilir.

Abolish(hayvan/1).

Ekleme ve silme işlemleri program çalışırken bellekte yapıldığı için yazdığınız program değişmeyecektir. İstenirse programın son hali bir dosyaya yazdırılabilir.


1.9 Terim okuma: read

read yüklemi prolog terimlerinin tuş takımından okunmasını sağlar. Tuş takımından girilen bilginin formatı program yazarken kullanılan formatın aynısı olamalıdır ve nokta ile sonlandırılmalıdır.

?- read(X).  soru
selam.  kullanıcı girişi
X = selam  X değeri
yes.  sonuç

Eğer read yükleminin argumanına bir değer atanmış ise prolog bu değer ile girilen değeri karşılaştırır:

?- read(evet). ?- read(evet).
evet. hayır.
yes no

Örneklerde görüldüğü gibi girilen değer argumanla aynı ise yes farklı ise no sonucu elde edilmektedir. Bu nedenle programın çalışması sırasında kullanıcıya sorulan evet/hayır tipindeki sorularda herhangi bir ek kontrol yapmadan programın işleyişi düzenlenebilir.











2. Örnek programlar:

2.1 Öğrenen program

Öğrenen program kendi bilgi tabanını değiştiren programdır. Bu amaçla önce başkentlerin saklandığı bir bilgi tabanı hazırlayalım:

:- dynamic (baskent/2).
baskent(turkiye,ankara).
baskent(irak, tahran).
baskent(yunanistan, atina).

Bu bilgi tabanını "bt.pl" ismiyle kaydedelim. Hazırladığımız BT'yi kullanan ve gerektiğinde ekleme yapan program aşağıdaki şekilde yazılabilir.

% Baskent programı
basla :- reconsult('bt.pl'), nl,
write('isimleri küçük harfle yazın ve nokta ile sonlandırın'),nl,
write('cıkış için "dur." yazınız'), nl, nl,
sorgula.
sorgula :- write('Ulke? '),
read(Ulke),
cevap(Ulke).
% Kullanıcı "dur." yazdı ise bt'yi sakla ve çık.
cevap(dur) :- write(' BT saklanıyor...'), nl,
tell('bt.pl'), çıkış dosyaya yönlendiriliyor.
write(':-dynamic( baskent/2).'), nl,
listing(baskent),  tüm baskentler listeniyor.
told,  dosya kapatıldı.
write('saklandı.'), nl.
% Eğer baskent kb'de ise göster ve sorgula'ya dön.
cevap(Ulke):- baskent(Ulke,Sehir),
write(Ulke),
write(' nin baskenti '),
write(Sehir), nl, nl,
sorgula.
% Eğer baskent kb'de yok ise kullanıcıya sor kb'ye ekle ve sorgula'ya dön.
Cevap(Ulke):- \+ baskent(Ulke,_),
write('Bilmiyorum, yardımcı olurmusunuz..'),nl,
write('Baskent? '),
read(Sehir),
write('tesekurler'), nl, nl,
assertz(baskent(Ulke,Sehir)),
sorgula.
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 27-04-04, 18:51 #5
rolicabi rolicabi çevrimdışı

bynogame
Varsayılan Cvp: Prolog bilen

bynogame
arkadaslar ilgilniyosunuz cok tesekkurler...Benim ilgilendigim Visual Prolog ve mesela arkadasin verdigi ornekten farkli bir tarzda programlaniyor mantik ayni tabii...mesela basit (* :-) *) bi soru sorayim..

flatten([a,[b,c],[[d],[],e]],[a,b,c,d,e]) komuttan da anlayacaginiz gibi ilk siradaki listeyi ki bu listenin elemanlari herhangi birsey (integer,symbol,list) olabilir bunlari elemanlar sanki heps atom mus gibi bir listeye cevirmek..bunu Visual Prolog da yapmak istiyorum..Prolog komutlari nette mevcut ama uyarlayamadim :-(
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 28-04-04, 23:06 #6
rolicabi rolicabi çevrimdışı

bynogame
Varsayılan Cvp: Prolog bilen

bynogame
Bu arada Prolog la ilgilenen olursa bende dokuman birikti yollayablirim.Bende tam ogrenemedim ama her gordugume atladim artik sabitlemek lazim
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 01-05-04, 20:09 #7
rolicabi rolicabi çevrimdışı

bynogame
Varsayılan Cvp: Prolog bilen

bynogame
Arkadaslar kimseden ses cikmiyo bende o zaman Prolog notlarini www.rolicabi.nulsha.com a atiyorum isteyen ordan bakabilir baska kaynak isteyen olursa da oradan ulastirabilirim
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 11-06-04, 22:56 #8
skytiger skytiger çevrimdışı

bynogame
Varsayılan Cvp: Prolog bilen

bynogame
http://www.swi-prolog.org
Arayüzde yapabilirsin prolog kodlarına,onlar da mevcut. herşey var burda. Ben kullanmıştım bu programları, çok iyi bir site.
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 12-06-04, 00:50 #9
Aarundel Aarundel çevrimdışı

bynogame
Varsayılan Cvp: Prolog bilen

bynogame
rolicabi arkadas bana yollarmisin? Cok iyi olur sagol PM´den bana haber verki email adresimi aciklayim
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Eski 16-05-07, 19:15 #10
gokan86 gokan86 çevrimdışı

bynogame
Varsayılan C: Cvp: Prolog bilen

bynogame
usta link olmus yenilersen ve bana ulasırsan sevinirim tapan_29@hotmail.com
  Alıntı Yaparak CevaplaAlıntı Yaparak Cevapla
Cevapla

Bu konunun kısa yolunu aşağıdaki sitelere ekleyebilirsiniz

Konu Araçları

Gönderme Kuralları
Yeni konu açamazsınız
Cevap yazamazsınız
Dosya gönderemezsiniz
Mesajlarınızı düzenleyemezsiniz

BB code is Açık
Smiley Açık
[IMG] kodu Açık
HTML kodu Kapalı



Tüm saatler GMT +3. Şuan saat: 21:50
(Türkiye için artık GMT +3 seçilmelidir.)

 
5651 sayılı yasaya göre forumumuzdaki mesajlardan doğabilecek her türlü sorumluluk yazan kullanıcılara aittir. Şikayet Mailimiz. İçerik, Yer Sağlayıcı Bilgilerimiz. Tatil


bynogame