Wednesday, December 9, 2009

Looping in Prolog

Loops
Sebagian besar bahasa pemrograman mempunyai fasilitas looping. Akan tetapi, fasilitas ini tidak terdapat di prolog. Sebagai penggantinya, kita dapat menggunakan backtracking, rekursi, built-in predikat, atau mengkomninasikannya.

Looping a Fixed Number of Times
Dalam prolog tidak ada fasilitas ‘for loops’ sebagaimana bahasa pemrograman lain. Sebagai penggantinya, kita dapat menggunakan rekursi.
Contoh :
Program ini mengeluarkan bilangan bulat mulai dari angka yang dimasukkan hingga 1.
Notepad :
loop(0).
loop(N):-N>0,write('The value is: '),write(N),nl,
M is N-1,loop(M).

Prolog :
?- loop(6).
The value is: 6
The value is: 5
The value is: 4
The value is: 3
The value is: 2
The value is: 1
yes

Looping Until a Condition Is Satisfied

Dalam prolog tidak ada fasilitas ‘until loops’ sebagaimana bahasa pemrograman lain. Sebagai penggantinya, kita dapat menggunakan :
1. Rekursi
Contoh :
Notepad :
go:-loop(start). /* start is a dummy value used to get
the looping process started.*/
loop(end).
loop(X):-X\=end,write('Type end to end'),read(Word),
write('Input was '),write(Word),nl,loop(Word).

Prolog :
?- go.
Type end to end: university.
Input was university
Type end to end: of.
Input was of
Type end to end: portsmouth.
Input was portsmouth
Type end to end: end.
Input was end
Yes

2. ‘Repeat’ predikat
Contoh :
Notepad :
get_answer(Ans):-
write('Enter answer to question'),nl,
repeat,write('answer yes or no'),read(Ans),
valid(Ans),write('Answer is '),write(Ans),nl.
valid(yes). valid(no).

Prolog :
?- get_answer(X).
Enter answer to question
answer yes or no: unsure.
answer yes or no: possibly.
answer yes or no: no.
answer is no
X = no

Backtracking with Failure

Berikut adalah fungsi-fungsi backtracking dalam prolog.
1. Mencari database prolog
Contoh :
Notepad :
dog(fido).
dog(fred).
dog(jonathan).

alldogs:-dog(X),write(X),write(' is a dog'),nl,fail.
alldogs.

Prolog :
?-alldogs
fido is a dog
fred is a dog
jonathan is a dog
yes
2. Menemukan solusi ganda
Contoh :
find_all_routes(Town1,Town2):-
findroute(Town1,Town2,Route),
write('Possible route: '),write(Route),nl,fail.
find_all_routes(_,_).

No comments:

Post a Comment