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
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
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.
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(_,_).
Kamis, 26 November 2009
exercise 5
gambar compare
gambar prolog
Penjelasan
- buka progam prolog
- klik file -> new
- beri nama file
- ketik data untuk prolog di notepad
- klik file ->save
- tutup notepad
- membuat data untuk prolog di notepad untuk kedua kalinya
- setelah itu membuat file pl. untukmengcombine 2 data di dua notepad yang sudah dimasukan sebelumnya.
- Maka hasilnya setelah prolog dijalankan adalah seperti gambar diatas.
Nomor 4
gambar notepad1
gambar notepad2
gambar notepad 1&2 di combine
gambar prolog
Penjelasan
- buka progam prolog
- klik file -> new
- beri nama file
- ketik data untuk prolog di notepad
- klik file ->save
- tutup notepad
- membuat data untuk prolog di notepad untuk kedua kalinya
- setelah itu membuat file pl. untukmengcombine 2 data di dua notepad yang sudah dimasukan sebelumnya.
- Maka hasilnya setelah prolog dijalankan adalah seperti gambar diatas.
gambar pada notepad
gambar prolog
Penjelasan
- buka progam prolog
- klik file -> new
- beri nama file
- ketik data untuk prolog di notepad
- klik file ->save
- tutup notepad
- klik file->consult
- Ketik readfile yang diakhiri tanda titik(.)
- tulis testa
- dan akan muncul hasil seperti gmbar diatas.
Selasa, 24 November 2009
INPUT AND OUTPUT
prolog mempunyai suatu istilah untuk keluarkan yang dihasilkan, keluaran tersebut sebelumnya didiskripsikan terlebih dahulu. Dalam keluaran digunakan write/1 untuk mengambil predikat pada satu argumen, dimana prolog tersebut bernilai benar. Predikat nl/0 digunakan apabila tidak ada argumen yang diambil. Sedangkan nl digunakan untuk memberikan baris baru pada keluaran.
contohnya:
?-write(26),nl.keluarannya pada baris baru adalah
26 (argumen yang dimasukkan)
bisa juga menggunakan writeq yang hasil keluarnnya akan sama dengan menggunakan write.
Bila inputan("paul","hello world") maka output tidak perlu menggunakan write/writeq.
Inputting Terms
Dalam prolog inputan yang benar harus menggunakan tanda titik dibelakang argumen.
Pada inti evaluasi menbaca prolog, istilah dalam input selalu sama dengan variabel argumen.
Contohnya:
?-Read(x).
:Jim
x=Jim
Penjelasan contoh diatas adalah x adalah argumen yang akan dibaca sedangkan jim adalah masukkannya sehingga x tersebut adalah jim.
bisa juga ditulis dalam bentuk
?-x=fred,read(x)
:fred
x=fred
Input and output using characters
Dalam prolog telah ada suatu istilah pada sistem input ataupun output pada prolog, namun dalam prolog juga digunakan karakter. Karakter tersebut memiliki no.seri yang sesuai ASCII, sehingga user tinggal memasukkan no.seri pada argumennya. Untuk itu ada baiknya user menghafal kode karakter agar ,udah mengerjakan prolog.
Contoh Karakter dan no.serienya :
- 9 untuk tab
- 32 untuk spasi
- 65-90 untuk A to Z
- 97-122 untuk a to z
- 63 untuk tanda tanya(?)
Pengambilan predikat dalam suatu argumen dapat juga menggunakan karakter, contohnya:
?-Put(97),nl.
a
yes
dalam contoh tersebut 97 merupakan no.seri dari karakter yang akan diambil dan pernyataan tersebut bernilai benar.
File input : Changing the Current Input Stream
Mengubah input stream :
- Gunakan “see/1”
- Butuh argumen tunggal berupa atom atau variabel yang mewakili nama file
Misal : see(‘myfile.txt’)
- Evaluasi menyebabkan file yang telah dinamai menjadi input stream. Jika file tidak dapat dibuka akan menghasilkan error
- Untuk file yang sesuai dengan input stream sebelumnya akan membuka ulang ketika sebuah input stream baru dipilih
- Input stream dapat ditutup dengan menggunakan “seen”
- Kesalahan pada input stream(user) dapat diatasi dengan menggunakan “seen “ atau bisa dengan menggunakan “see(user)”.
- Tidak terdapat pernyataan pada “seen/0”. Evaluasi bisa menyebabkkan input file yang telah dipilih akan ditutup dan input file yang dipilih akan direset ualng ke user. Disini user’s terminal
- Terdapat 1 pernyataan pada “seen/1” dan menjadi sebuah variabel yang terikat
Reading from Files : End of file
Jika akhir dari file telah ditemukan ketika “read(X)” sedang dievaluasi, variabel X terkait di atom file tersebut. Ketika get(X) atau get0(X) dievaluasi, variabel X diisi dengan nilai numerik khusus. ASCII berkisar antara 0-255, tapi tidak mesti.
Reading from Files : End of Record
Bisa terjadi ketidakcocokan pada saat membaca karakter dari user’s terminal dan dari sebuah file. Masukan akhir ditunjukkan oleh karakter dengan nilai ASCII 13. Akhir dari record/catatan ditunjukkan oleh karakter dengan nilai ASCII : 13 diikuti dengan 10,
dicetaknya satu per baris. Berikut programnya :
Readline:-get0 (X), proses (X).
proses (13).
proses (X):-X = \ = 13, memakai (X), nl, Readline.
Untuk menghindari put>write gunakan karakter “*” untuk menunjukkan masukan akhir.
?- readline.
: Prolog test
P
R
O
L
O
G
T
E
S
T
yes