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

Rabu, 16 Desember 2009

expert system

Notepad expert system


Hasil run prolog expert system

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(_,_).






Kamis, 26 November 2009

exercise 5

Nomor 5


gambar compare



gambar prolog

Penjelasan
  1. buka progam prolog
  2. klik file -> new
  3. beri nama file
  4. ketik data untuk prolog di notepad
  5. klik file ->save
  6. tutup notepad
  7. membuat data untuk prolog di notepad untuk kedua kalinya
  8. setelah itu membuat file pl. untukmengcombine 2 data di dua notepad yang sudah dimasukan sebelumnya.
  9. Maka hasilnya setelah prolog dijalankan adalah seperti gambar diatas.







Nomor 4




gambar notepad1


gambar notepad2



gambar notepad 1&2 di combine



gambar prolog

Penjelasan
  1. buka progam prolog
  2. klik file -> new
  3. beri nama file
  4. ketik data untuk prolog di notepad
  5. klik file ->save
  6. tutup notepad
  7. membuat data untuk prolog di notepad untuk kedua kalinya
  8. setelah itu membuat file pl. untukmengcombine 2 data di dua notepad yang sudah dimasukan sebelumnya.
  9. Maka hasilnya setelah prolog dijalankan adalah seperti gambar diatas.
Nomor 3




gambar pada notepad



gambar prolog

Penjelasan
  1. buka progam prolog
  2. klik file -> new
  3. beri nama file
  4. ketik data untuk prolog di notepad
  5. klik file ->save
  6. tutup notepad
  7. klik file->consult
  8. Ketik readfile yang diakhiri tanda titik(.)
  9. tulis testa
  10. dan akan muncul hasil seperti gmbar diatas.

Selasa, 24 November 2009

INPUT AND OUTPUT

Outputing terms
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)
yes(argumen bernilai benar)

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(?)
Outputting Characters
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