Welcome to my blog, hope you enjoy reading :)
RSS

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.

  • 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.
Answer is yes
Myanswer = yes

  • 6.2.2 Using the 'repeat' Predicate
penggunaan predikat "repeat" ini untuk mengubah urutan mengevaluasi tujuan dari kanan ke kiri (backtracking) kembali ke kiri-ke-kanan . Ini dapat digunakan untuk
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
backtracking dengan kegagalan ini memiliki keuntungan yakni dengan cara mengkombinasikan secara otomatis Prolog backtracking untuk pencarian melalui database untuk menemukan semua klausa dengan properti tertentu.
  • 6.3.1 Searching the Prolog Database
    Mis
    alkan database berisi klausa seperti :
dog(fido).
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)
Misalkan sebuah predikat findroute (Town1, Town2, Route) dapat diasumsikan bahwa Town1 dan Town2 adalah atom dan Route adalah daftar. Maka disini dapat menggunakan backtracking dengan kegagalan dapat digunakan untuk mencari semua kemungkinan rute antara Town1 dan Town2 dan menulis masing-masing satu di baris terpisah, sebagai berikut:

find_all_routes(Town1,Town2):-
findroute(Town1,Town2,Route),
write('Possible route: '),write(Route),nl,fail.
find_all_routes(_,_).






0 komentar:

Posting Komentar