Notepad expert system
Hasil run prolog expert system
Rabu, 16 Desember 2009
Senin, 07 Desember 2009
EXERCISE 6
SOAL 2
SOAL 3
Summary for chapter 6 :
- 6.1 Looping a Fixed Number of Times
Contoh 1 :
The following program outputs integers from a specified value down to 1.
loop(0).
loop(N):-N>0,write('The value is: '),write(N),nl,
M is N-1,loop(M).
Keterangan :
- Looping adalah definisi istilah itu sendiri.
- Untuk loop dari N : pertama tulis nilai N, kurangi satu untuk beri nilai M lalu looping M . ketika kalimat pertama = 0 , tidak melakukan proses apa-apa. Kalimat pertama adalah suatu kondisi untuk menghentikan rekursi
?- 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 hingga kondisi yang diinginkan.
The following program outputs integers from a specified value down to 1.
loop(0).
loop(N):-N>0,write('The value is: '),write(N),nl,
M is N-1,loop(M).
Keterangan :
- Looping adalah definisi istilah itu sendiri.
- Untuk loop dari N : pertama tulis nilai N, kurangi satu untuk beri nilai M lalu looping M . ketika kalimat pertama = 0 , tidak melakukan proses apa-apa. Kalimat pertama adalah suatu kondisi untuk menghentikan rekursi
?- 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 hingga kondisi yang diinginkan.
- 6.2 Looping Until a Condition Is Satisfied
6.2.1 Recursion
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).
?- 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
Penggunaan operator pemisah :
loop:-write('Type end to end'),read(Word),
write('Input was '),write(Word),nl,
(Word=end;loop).
keterangan :
penggunaan (Word=end;loop) yaitu kalimat harus dinyatakan akhir jika tidak
sistem akan berusaha untuk memenuhi tujuan looping rekursif.
?-loop.
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
Program rekursif ini berulang kali mendorong pengguna untuk memasukkan istilah sampai baik
ya atau tidak dimasukkan.
get_answer(Ans):-write('Enter answer to question'),
nl,get_answer2(Ans).
get_answer2(Ans):-
write('answer yes or no'),
read(A),
((valid(A),Ans=A,write('Answer is '),
write(A),nl);get_answer2(Ans)).
valid(yes). valid(no).
?- get_answer(Myanswer).
Enter answer to question
answer yes or no: maybe.
answer yes or no: possibly.
answer yes or no: yes.
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).
?- 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
Penggunaan operator pemisah :
loop:-write('Type end to end'),read(Word),
write('Input was '),write(Word),nl,
(Word=end;loop).
keterangan :
penggunaan (Word=end;loop) yaitu kalimat harus dinyatakan akhir jika tidak
sistem akan berusaha untuk memenuhi tujuan looping rekursif.
?-loop.
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
Program rekursif ini berulang kali mendorong pengguna untuk memasukkan istilah sampai baik
ya atau tidak dimasukkan.
get_answer(Ans):-write('Enter answer to question'),
nl,get_answer2(Ans).
get_answer2(Ans):-
write('answer yes or no'),
read(A),
((valid(A),Ans=A,write('Answer is '),
write(A),nl);get_answer2(Ans)).
valid(yes). valid(no).
?- get_answer(Myanswer).
Enter answer to question
answer yes or no: maybe.
answer yes or no: possibly.
answer yes or no: yes.
Answer is yes
Myanswer = yes
Myanswer = yes
- 6.2.2 Using the 'repeat' Predicate
menciptakan efek perulangan, seperti ditunjukkan pada contoh di bawah ini :
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).
get_answer akan selalu berhasil. pada read (Ans) akan meminta pengguna untuk memasukkan istilah. Lalu tulis jawaban untuk pertanyaan kemudian proses akan diulang ke write(Ans) dan write( 'yes or no').
Backtracking akan berhasil jika 3 kalimat terakhir menyatakan write( 'answer is'), write(ans) dan nl.
write(Ans) dan write( 'yes or no') akan diulang terus sampai mengakhiri kondisi valid(ans).
?- 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
- 6.3 Backtracking with Failure
- 6.3.1 Searching the Prolog Database
Misalkan database berisi klausa seperti :
dog(fred).
dog(jonathan).
Anjing-anjing diatas dapat diproses pada gilirannya menggunakan predikat alldogs, seperti dibawah ini :
alldogs:-dog(X),write(X),write(' is a dog'),nl,fail.
alldogs.
loop melalui database menemukan semua kemungkinan nilai dari X yang
memenuhi tujuan anjing (X).
hasilnya :
alldogs:-dog(X),write(X),write(' is a dog'),nl,fail.
?- alldogs.
fido is a dog
fred is a dog
jonathan is a dog
no
- 6.3.2 Finding Multiple Solutions (multipel mencari solusi)
find_all_routes(Town1,Town2):-
findroute(Town1,Town2,Route),
write('Possible route: '),write(Route),nl,fail.
find_all_routes(_,_).