Perşembe, Mayıs 04, 2006

Prolog da Berber Paradoksu

Meraklısı için, bernard Russel'ın berber paradoksunun Prolog da programlanışı.
Programı çalıştırmak için aşağıdaki veritabanını bir text dosyasına yazın ve "dosyaadi.pl"
şeklinde kaydedin. Bu haliyle SWI Prologda açılmaya hazır bir dosyanız olacaktır. SWI Prologda
dosyayı açtıktan sonra;
basla. ve paradoks. komutlarıyla kuralları yürütün.

%Seville’de bir berber var. Bu berber o köyde kendini
%tıraş etmeyenleri tıraş eder .Kendini tıraş edenleri ise tıraş
%etmez. Bu berber kendini tıraş eder mi etmez mi?

:-op(600, xfx, tras_eder).
koy_halki(X):-(X=emre ; X=ahmet ; X=berber).
traslama(X):-
berber tras_eder X ; X tras_eder X.
berber tras_eder X:-!,koy_halki(X), X\=berber, print(X), write(' berber tarafından traş edilir'), nl.
X tras_eder X:-!, koy_halki(X), X\=berber, print(X), write(' kendini traş eder'), nl.
X tras_eder Y:-print(X), write(' tras eder '), print(Y), write(' OLMAZ!'), nl, fail.
basla:-koy_halki(X),traslama(X),fail.
paradoks:-trace, koy_halki(kim), kim tras_eder berber.

Hiç yorum yok: