Prolog Öğrenen Program Örneği

Öğ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.