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