Rabu, 16 Desember 2009

Senin, 07 Desember 2009

Input and Output in Prolog (Nomor 2 - Chapter 6)

Tutorial




1. ketik perintah yang diminta dalam notepad seperti dibawah ini. kemudian simpan dalam format prolog (.pl)

















2. setelah itu 'consult' dalam program prolog. kemudian tulis perintah '[?-go.]'. kemudian tekan 'enter'. dan hasilnya akan seperti di bawah ini.
















3. di dalam program prolog yang telah berjalan. hasil yang muncul adalah hasil perubahan tempat saja. misalnya: kita menuliskan kalimat 'habibah'. maka, hasil yang muncul adalah 'habibah'. atau kita menuliskan kalimat 'habibah?sisteminformasi'. maka, hasil yang muncul adalah 'habibah'. yang dibelakang 'Tanda Tanya' tidak dipakai. jika kita merubah perintah pada notepad. maka, hasil yang bertuliskan 'habibah' bisa juga ditulis secara TEGAK ataupun MENDATAR seperti di contoh.

Kamis, 03 Desember 2009

Input and Output in Prolog (Nomor 3 - Chapter 6)

Tutorial



1. ketik perintah yang diminta dalam notepad seperti dibawah ini. kemudian simpan dalam format prolog (.pl)
















kita juga bisa membuat yang baru. misalnya saja kita ingin menampilkan seseorang yang berumur kurang dari 40 tahun serta menampilkan dari negara mana dia berasal serta memiliki nama siapa. aturannya tetap. terlebih dahulu ketik dalam notepad. kemudia simpan dalam format prolog (.pl), seperti di bawah ini :


















DAN

















2. setelah itu 'consult' dalam program prolog. kemudian tulis perintah '[?-find.]'. kemudian tekan 'enter'. dan hasilnya akan seperti di bawah ini.

















SERTA HASIL YANG MEMAKAI RULE LAIN ADALAH :



NEGARA
















NAMA

















3. di dalam program prolog yang telah berjalan. hasil yang muncul adalah hasil yang kita cari. misalnya, kita ingin mencari nama, umur, atau, darimana sesorang itu berasal.

Input and Output in Prolog (Nomor 1 - Chapter 6)

Tutorial



1. ketik perintah yang diminta dalam notepad seperti dibawah ini. kemudian simpan dalam format prolog (.pl)
















2. setelah itu 'consult' dalam program prolog. kemudian tulis perintah '[?-outsquare(angka 1, angka 2).]'. kemudian tekan 'enter'. dan hasilnya akan seperti di bawah ini.















3. di dalam program prolog yang telah berjalan. hasil yang muncul adalah hasil pengkuadratannya. misalnya: angka 1 adalah 9, dan angka 2 adalah 18. maka, hasil yang muncul adalah kuadrat dari 9, 10, 11, 12 ..... , 18. jadi dibatasi yaitu angka 9 sampai dengan 18. begitu juga dengan angka yang lainnya.

Summary For Chapter 6

Loops

Pendahuluan


Kebanyakan bahasa pemrograman konvensional memiliki fasilitas perulangan yang memungkinkan set instruksi yang akan dieksekusi berulang-ulang tetap baik beberapa kali atau sampai kondisi tertentu terpenuhi.Prolog tidak memiliki fasilitas perulangan, efek yang sama dapat diperoleh yang memungkinkan seorang mengurutkan tujuan untuk dievaluasi berulang kali. Hal ini dapat dilakukan dalam berbagaicara, menggunakan backtracking, rekursi, built-in predikat, atau kombinasi dari semuanya.


Looping Tetap Jumlah

Banyak bahasa pemrograman menyediakan 'untuk looping' yang memungkinkan satu set instruksi akan dieksekusi tetap beberapa kali. Tidak ada fasilitas tersebut tersedia dalam Prolog (secara langsung), tetapi efek yang sama dapat diperoleh dengan menggunakan rekursi, seperti ditunjukkan dalam contoh program di bawah ini :



Logika Programing Dengan Prolog


Contoh :

output program berikut bilangan bulat dari nilai tertentu ke 1.
loop (0).
loop (N):-N> 0, write ( 'Nilai adalah:'), menulis (N), nl,
M adalah N-1, loop (M).
Predikat loop didefinisikan dalam istilah itu sendiri.

Kalimat kedua dapat dianggap sebagai: 'untuk loop dari N, pertama menulis nilai N, kemudian kurangi satu untuk memberikan M, kemudian loop dari M '. Proses ini jelas harus dihentikan dan ini dicapai oleh klausa pertama: 'ketika argumen adalah nol, melakukan apa-apa (dan karenanya berhenti) '. Klausa pertama dapat dianggap sebagai suatu kondisi untuk menghentikan rekursi.

? - Loop (6).
Nilai adalah: 6
Nilai adalah: 5
Nilai adalah: 4
Nilai adalah: 3
Nilai adalah: 2
Nilai adalah: 1

ya


penggunaan dua gol M adalah N-1, loop (M) dalam kalimat kedua untuk loop predikat. Alternatif yang jelas loop (N-1) tidak akan bekerja. Prolog hanya mengevaluasi pernyataan seperti N-1 ketika mengevaluasi tujuan dengan atau functor adalah salah satu dari operator relasional.
N-1 jika digunakan sebagai argumen suatu predikat itu diartikan istilah dengan infiks operator - (yaitu tanda minus) dan argumen N dan 1.

Contoh :

Program berikutnya output bilangan bulat dari 'First to Last inklusif'.
/ * Output bilangan bulat dari First to Last inklusif * /
output_values (Terakhir, Last): - write (Terakhir), nl,
write ( 'akhir contoh'), nl.
output_values (First, Last):-Pertama = \ = Terakhir, tulis

(Pertama),
nl, N adalah Pertama +1, output_values (N, Last).
Sini output_values memiliki dua argumen, yang dapat dibaca

sebagai 'output bilangan bulat dari First to Last inklusif '. Loop berakhir ketika kedua argumen sama.

Loops 87
? - Output_values (5,12).
56789
10
11
12
contoh akhir

ya

Contoh :

menentukan sebuah predikat untuk menemukan jumlah bilangan bulat dari 1 sampai N (misal untuk N = 100). Adalah wajar untuk memikirkan secara prosedural ini, yaitu mulai dengan 1, kemudian tambahkan 2, kemudian tambahkan 3, kemudian tambahkan 4, ..., kemudian tambahkan 100. Namun proses ini lebih mudah menggunakan program jika reexpressed declaratively dalam hal itu sendiri.

Jumlah dari 100 bilangan bulat yang pertama adalah jumlah dari 99 bilangan bulat yang pertama, ditambah 100.
Jumlah dari 99 bilangan bulat yang pertama adalah jumlah dari 98 bilangan bulat yang pertama, ditambah 99.
Jumlah dari 98 bilangan bulat yang pertama adalah jumlah dari 97 bilangan bulat yang pertama, ditambah 98.
Jumlah dari 3 bilangan bulat pertama adalah jumlah dari 2 bilangan bulat pertama, ditambah 3.
Jumlah dari 2 bilangan bulat pertama adalah jumlah dari 1 bilangan bulat pertama, ditambah 2.
Jumlah 1 bilangan bulat pertama adalah satu.

Ada dua kasus yang berbeda untuk mempertimbangkan: kasus umum: 'jumlah pertama N bilangan bulat adalah jumlah dari N-1 pertama bilangan bulat, ditambah N 'dan kasus mengakhiri:' yang jumlah 1 bilangan bulat pertama adalah 1 '. Ini mengarah langsung ke definisi rekursif:

* Menjumlahkan bilangan bulat dari 1 sampai N (argumen pertama) inklusif *
sumto (1,1).
sumto (N, S):-N> 1, N1 adalah N-1, sumto (N1, S1), S S1 +

N.
? - Sumto (100, N).
N = 5.050
? - Sumto (1,1).
ya



Rekursi

Contoh pertama di bawah ini menunjukkan penggunaan istilah rekursi untuk membaca dimasukkan oleh pengguna dari keyboard dan output mereka ke layar, sampai akhir dijumpai.
go: loop (start). / * Memulai adalah nilai dummy digunakan untuk mendapatkan dalam proses looping dimulai .* /
loop (akhir).
loop (X):-X \ = akhir, menulis ( 'Jenis ujung ke ujung'),

baca (Word),
write ( 'Masukan adalah'), menulis (Word), nl, loop (Word).
? - Pergi.
Jenis ujung ke ujung: universitas.
Masukan universitas
Jenis ujung ke ujung: dari.
Masukan dari
Jenis ujung ke ujung: Portsmouth.
Masukan Portsmouth
Jenis ujung ke ujung: end.
Masukan akhir
ya


Program rekursif ini berulang kali mendorong pengguna untuk memasukkan istilah sampai baik
ya atau tidak dimasukkan.
get_answer (Jawaban):-write ( 'Masukkan jawaban untuk

pertanyaan'),
nl, get_answer2 (Jawaban).
get_answer2 (Jawaban): --
write ( 'jawaban ya atau tidak "),
read (A),
((berlaku (A), Jawaban = A, menulis ( 'Jawaban ini'),
write (A), nl); get_answer2 (Jawaban)).
berlaku (yes). berlaku (tidak ada).
? - Get_answer (Myanswer).
Masukkan jawaban atas pertanyaan
jawaban ya atau tidak: mungkin.
jawaban ya atau tidak: mungkin.
jawaban ya atau tidak: ya.
Jawabannya adalah ya
Myanswer = yes



Menggunakan 'pengulangan' Predikat


Meskipun sering dapat digunakan untuk efek yang besar, rekursi tidak selalu merupakan cara yang paling mudah untuk menyediakan jenis perulangan yang diperlukan dalam program Prolog. Metode lain yang sering digunakan adalah berdasarkan pada built-in predikat ulangi. Nama predikat ini benar-benar sebuah ironi. Tujuan tidak mengulangi apa pun; itu hanya berhasil setiap kali disebut. Nilai besar mengulang adalah bahwa hal itu juga berhasil (sebanyak yang diperlukan) pada kemunduran. Efek ini, seperti untuk tujuan lainnya berhasil, adalah untuk mengubah urutan mengevaluasi tujuan dari "kanan ke kiri '(yaitu backtracking) kembali ke'kiri-ke-kanan '. Ini dapat digunakan untuk menciptakan efek perulangan, seperti ditunjukkan pada contoh di bawah ini. Program ini berulang kali mendorong pengguna untuk memasukkan istilah sampai entah ya atau tidak dimasukkan. Ini adalah alternatif dari program rekursif ditampilkan di bagian akhir, bagian sebelumnya. Dalam hal ini masih diperdebatkan apakah menggunakan mengulang adalah perbaikan menggunakan rekursi, tetapi contoh adalah termasuk untuk tujuan ilustrasi.

get_answer (Jawaban): --
write ( 'Masukkan jawaban untuk pertanyaan'), nl, ulangi, menulis ( 'jawaban ya atau tidak "), baca (Jawaban), berlaku (Jawaban), menulis ( 'Jawaban ini'), menulis (Jawaban), nl. berlaku (yes). berlaku (tidak ada). Pertama lima gol dalam tubuh get_answer akan selalu berhasil. Mengevaluasi tujuan kelima: read (Jawaban) akan meminta pengguna untuk memasukkan istilah. Jika istilah input apa tapi ya atau tidak, mengatakan tidak yakin, tujuan berikut berlaku (Jawaban) akan gagal. Prolog kemudian akan mundur ke baca (Jawaban) dan menulis ('jawaban ya atau tidak "), baik yang adalah unresatisfiable, yaitu akan selalu gagal pada kemunduran. Backtracking akan mencapai predikat ulangi dan berhasil, menyebabkan evaluasi untuk melangkah maju (kiri-ke-kanan) lagi, dengan menulis ('jawaban ya atau tidak ") dan baca (Jawaban) keduanya berhasil, diikuti oleh evaluasi lebih lanjut yang berlaku (Jawaban). Tergantung pada nilai Jawaban, yaitu input pengguna, yang berlaku (Jawaban) tujuan akan baik gagal, dalam hal Prolog akan mundur sejauh yang berulang, seperti sebelumnya, atau akan berhasil dalam hal mana tiga gol terakhir menulis ('Jawaban ini'), menulis (Jawaban) dan nl semua akan berhasil. Dampak keseluruhan adalah bahwa dua tujuan menulis ( 'jawaban ya atau tidak ") dan baca (Jawaban) disebut berulang kali sampai kondisi mengakhiri valid (Jawaban) adalah puas, efektif menciptakan lingkaran antara mengulangi dan valid (Jawaban).

? - Get_answer (X).
Masukkan jawaban atas pertanyaan
jawaban ya atau tidak: tidak yakin.
jawaban ya atau tidak: mungkin.
jawaban ya atau tidak: tidak.
jawabannya tidak
X = tidak




Backtracking dengan Kegagalan

Seperti namanya, predikat gagal selalu gagal, apakah pada 'standar' evaluasi kiri-ke-kanan atau pada kemunduran. Keuntungan dapat diambil dari ini, dikombinasikan dengan otomatis Prolog backtracking, untuk pencarian melalui database untuk menemukan semua klausa dengan properti tertentu.

Prolog Pencarian Database
Misalkan database berisi klausa seperti
anjing (fido).
anjing (fred).
anjing (jonathan).
Setiap anjing klausul dapat diproses pada gilirannya menggunakan predikat alldogs didefinisikan di bawah.
alldogs:-anjing (X), write (X), menulis ( 'adalah anjing'),
nl, gagal.
alldogs.

Memanggil alldogs akan menyebabkan anjing (X) untuk dicocokkan dengan anjing yang berada di dalam database. Awalnya X akan terikat untuk fido dan "fido adalah anjing 'akan output. Itu tujuan akhir klausa pertama dari predikat alldogs kemudian akan menyebabkan evaluasi untuk gagal. Prolog akan mundur atas nl dan dua tujuan menulis (semua yang unresatisfiable) hingga mencapai anjing (X). Tujuan ini akan berhasil untuk kedua kalinya menyebabkan X untuk terikat untuk fred. Proses ini akan berlanjut sampai fido, fred dan jonathan semua telah menjadi output, ketika evaluasi akan kembali gagal. Kali ini panggilan untuk anjing (X) juga akan gagal karena ada Tidak ada anjing lebih lanjut pasal-pasal dalam database. Hal ini akan menyebabkan klausul pertama untuk alldogs gagal dan Prolog untuk memeriksa klausul kedua alldogs. Ini berhasil dan evaluasi akan berhenti. Efeknya adalah untuk loop melalui database menemukan semua kemungkinan nilai dari X yang memenuhi tujuan anjing (X).

? - Alldogs.
fido adalah anjing
fred adalah anjing
jonathan adalah anjing
ya

Catatan pentingnya klausa kedua dari alldogs predikat. Hal ini ada untuk memastikan bahwa, setelah database telah digeledah, tujuan berhasil. Dengan hanya baris pertama, setiap panggilan ke alldogs akhirnya akan gagal.


alldogs:-anjing (X), write (X), menulis ( 'adalah anjing'),
nl, gagal.
? - Alldogs.
fido adalah anjing
fred adalah anjing
jonathan adalah anjing
tidak

Program berikutnya dirancang untuk mencari database yang berisi klausa mewakili nama, umur, tempat tinggal dan pekerjaan sejumlah orang-orang.
Jika database berisi lima klausa
orang (john, smith, 45, london, dokter).
orang (martin, williams, 33, Birmingham, guru).
orang (henry, smith, 26, manchester, tukang ledeng).
orang (jane, Wilson, 62, london, guru).
orang (mary, smith, 29, glasgow, surveyor).
Nama semua guru dapat ditemukan dengan menggunakan allteachers predikat.

allteachers:-orang (Forename, Surname ,_,_, guru),
write (Forename), menulis ( ''), menulis (Marga), nl,
gagal.
allteachers.

Efek menggunakan backtracking dengan kegagalan dalam kasus ini adalah untuk menemukan semua guru dalam database.

? - Allteachers.
martin williams
jane wilson
ya

Jika kedua klausul allteachers dihilangkan, baik guru masih akan ditemukan tetapi evaluasi allteachers akan berakhir dengan kegagalan. Ini adalah yang sedikit atau tidak penting ketika tujuan yang dimasukkan pada sistem prompt, tetapi jika allteachers itu digunakan sebagai tujuan dalam tubuh aturan itu jelas akan mudah untuk dilaksanakan untuk memastikan bahwa selalu berhasil. Perlu dicatat bahwa tidak selalu perlu untuk menggunakan 'backtracking dengan kegagalan 'untuk mencari database.



Multiple Mencari Solusi

Backtracking dengan kegagalan juga dapat digunakan untuk mencari semua cara untuk memuaskan tujuan. Misalkan sebuah predikat findroute (Town1, Town2, Route) menemukan sebuah rute Route antara dua kota Town1 dan Town2. Rincian predikat ini tidak relevan di sini. Ini dapat diasumsikan bahwa Town1 dan Town2 adalah atom dan bahwa rute ini adalah daftar. Backtracking dengan kegagalan kemudian 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 ( 'Kemungkinan rute:'), menulis (Route), nl, gagal.
find_all_routes (_,_).


Loops ini menjelaskan cara menetapkan tujuan yang dapat dievaluasi berulang-ulang dalam Prolog, baik jumlah tetap kali atau sampai kondisi tertentu terpenuhi, dan bagaimana beberapa solusi dapat dicapai dengan menggunakan teknik 'backtracking dengan kegagalan '.

Rabu, 25 November 2009

Input and Output in Prolog (Nomor 5)

Tutorial


1. ketik perintah pada notepad seperti dibawah ini, kemudian beri nama 'nomor5' yang masih berformat .txt (text notepad).















2. kemudian simpan di Local Disk C atau di lokasi lain.

3. ketik perintah pada notepad seperti dibawah ini, kemudian beri nama 'nomor51' yang masih berformat .txt (text notepad).
















4. kemudian simpan di Local Disk C atau di lokasi lain.

5. Kemudian consult di program prolog. kemudian ketik perintahnya yaitu '?-compare('C:/nomor5.txt','C:/nomor51.txt','C:/output5.txt').'

6. kemudian akan muncul beberapa macam statement dan muncul statement lagi menyatakan YES















7. kemudian akan dengan sendirinya tersimpan 'output' dari program tersebut yang berformat notepad akan secara otomatis tersimpan di Local Disk C (atau lokasi lain).

Input and Output in Prolog (Nomor 4)

Tutorial


1. ketik perintah pada notepad seperti dibawah ini, kemudian beri nama 'nomer4' yang masih berformat .txt (text notepad).

















2. kemudian simpan di Local Disk C atau di lokasi lain.

3. ketik perintah pada notepad seperti dibawah ini, kemudian beri nama 'nomer41' yang masih berformat .txt (text notepad).















4. kemudian simpan di Local Disk C atau di lokasi lain.

5. Kemudian consult di program prolog. kemudian ketik perintahnya yaitu '?-combine('C:/nomor4.txt','C:/nomor41.txt','C:/output4.txt').'

6. kemudian akan muncul statement yang menyatakan YES















7. kemudian akan dengan sendirinya tersimpan 'output' dari program tersebut yang berformat notepad akan secara otomatis tersimpan di Local Disk C (atau lokasi lain).

Input and Output in Prolog (Nomor 3)

Tutorial


1. ketik perintah pada notepad seperti dibawah ini, kemudian beri nama 'nomor3' yang masih berformat .txt (text notepad).

















2. kemudian simpan di Local Disk C atau di lokasi lain.

3. Kemudian consult di program prolog. kemudian ketik perintahnya yaitu '?-readfile('C:/nomor3.txt').'

4. kemudian akan muncul hasil yang menunjukkan berbagai macam angka dan statement yang menyatakan YES

Input and Output in Prolog (Nomor 2)

Tutorial


1. ketik perintah pada notepad seperti dibawah ini, kemudian beri nama 'test 1' yang masih berformat .txt (text notepad).
















2. kemudian simpan di Local Disk C atau di lokasi lain.

3. Kemudian consult di program prolog. kemudian ketik perintahnya yaitu '?-readterms('C:/text1.txt','C:/output1.txt').'

4. kemudian akan muncul statement yang menyatakan YES
















5. kemudian akan dengan sendirinya tersimpan 'output' dari program tersebut yang berformat notepad akan secara otomatis tersimpan di Local Disk C (atau lokasi lain).

Selasa, 24 November 2009

Input and Output in Prolog (Nomor 1)

Prolog (menjadikan hasil menjadi garis vertikal)



Notepad

















Prolog
























Prolog (Menjadikan hasil menjadi garis horizontal)



Notepad


















Prolog

















Langkah-Langkah :


- ketik perintah di notepad. kemudian simpan dalam format prolog (.pl)
- kemudian 'consult' dalam program prolog
- kemudian ketik 'readline:-get0(A),process(A).'. get berguna untuk mengonvert karakter menjadi kode ASCII dan process berguna untuk memproses argumen yang dinyatakan
- kemudian ketik 'case(A,B):-A>64,A<91,B is A+32.' dan 'case(A,B):-B is A+0.'. ini merupakan kondisi-kondisi untuk menentukan kode bilangan ke huruf kecil.
- dan yang terkahir ketik 'process(13).' dan 'process(A):-A=\=13,case(A,B),put(B),nl,readline.'. ini berguna untuk memproses argumen yang akan dinyatakan
- jika ditambah dengan (nl). maka, hasil pernyataan akan menampilkan garis vertikal. jika tidak ditambah dengan (nl). maka, hasil pernyataan akan menampilkan garis horizontal.

Senin, 23 November 2009

Summary For Chapter 5

Input dan Output


built-in predikat yang membaca dari dan menulis baik untuk pengguna
terminal (keyboard dan layar) atau file, kedua istilah tersebut dengan istilah dan characterby -
karakter dalam program Anda sendiri. nilai ASCII untuk memanipulasi string karakter. Prolog memiliki fasilitas untuk mengaktifkan input dan output baik dari istilah atau karakter. Menggunakan istilah lebih sederhana dan akan dijelaskan terlebih dahulu. Awalnya, maka akan diasumsikan bahwa
semua output ke layar pengguna dan semua input adalah dari pengguna keyboard. Masukan dan keluaran menggunakan file eksternal.


Syarat keluaran
predikat mengambil satu argumen, yang harus yang valid Prolog istilah. Mengevaluasi menyebabkan predikat istilah yang akan ditulis ke arus keluaran
sungai, yang secara default adalah layar pengguna. (Yang dimaksud dengan arus keluaran Dengan Logika Pemrograman Prolog
streaming)

Contoh
? - Menulis (26), nl.
26
ya
? - Menulis ( 'string karakter'), nl.
string karakter
ya
? - Menulis ([a, b, c, d, [x, y, z]]), nl.
[a, b, c, d, [x, y, z]]
ya
? - Tulis (mypred (a, b, c)), nl.
mypred (a, b, c)
ya
? - Write ( 'Contoh penggunaan nl'), nl, nl, write ( 'akhir contoh'), nl.
Contoh penggunaan nl
contoh akhir
ya



Syarat memasukkan
Built-in predikat membaca disediakan untuk memasukkan istilah. Dibutuhkan satu argumen, yang harus menjadi variabel.
Mengevaluasi itu menyebabkan istilah berikutnya untuk dibaca dari input arus sungai,
yang secara default adalah pengguna keyboard. (Yang dimaksud dengan arus input). Dalam input stream, istilah harus diikuti oleh sebuah titik ('.') dan setidaknya satu spasi, seperti spasi atau baris baru. Titik dan spasi karakter dibaca dalam tetapi tidak dianggap bagian dari istilah. Perhatikan bahwa untuk masukan dari keyboard (hanya) sebuah prompt karakter seperti titik dua biasanya akan ditampilkan untuk menunjukkan bahwa input pengguna diperlukan. Mungkin perlu untuk tekan tombol 'kembali' tombol sebelum Prolog akan menerima input. Kedua tidak berlaku untuk masukan dari file. Ketika sebuah tujuan membaca dievaluasi, istilah input disatukan dengan argumen variabel. Jika variabel tidak terikat (yang biasanya terjadi) itu adalah terikat pada masukan nilai.

Contoh
? - Read (X).
: Jim.
X = jim
? - Read (X).
: 26.
X = 26
? - Read (X).
: Mypred (a, b, c).
X = mypred (a, b, c)
? - Read (Z).
: [A, b, mypred (p, q, r), [z, y, x]].
Z = [a, b, mypred (p, q, r), [z, y, x]]
? - Read (Y).
: 'String karakter'.
Y = 'string karakter'

Jika variabel argumen sudah terikat (yang bagi sebagian besar pengguna adalah jauh lebih mungkin terjadi karena kesalahan daripada desain), tujuan berhasil jika dan hanya jika masukan istilah adalah identik dengan nilai terikat sebelumnya.


Logika Pemrograman Dengan Prolog

? - X = fred, read (X).
: Jim.
tidak
? - X = fred, read (X).
: Fred.
X = fred



Input dan Output Menggunakan Karakter

Meskipun input dan output dari syarat-syarat sangat mudah, penggunaan tanda kutip dan penuh berhenti dapat menjadi rumit dan tidak selalu sesuai. Sebagai contoh, akan membosankan untuk menentukan predikat (menggunakan baca) yang akan membaca serangkaian karakter dari keyboard dan menghitung jumlah huruf vokal. Sebuah pendekatan yang lebih baik untuk masalah semacam ini adalah untuk masukan sebuah karakter pada satu waktu. Untuk melakukan hal ini, pertama-tama perlu
untuk mengetahui tentang nilai ASCII karakter. Semua mencetak karakter dan banyak karakter non-cetak (seperti ruang dan tab) memiliki sesuai ASCII (American Standard Kode untuk Informasi Interchange) nilai, yang merupakan integer 0-255. Nilai ASCII karakter yang kurang dari atau sama dengan 32 yang dikenal sebagai putih ruang karakter.



Keluaran karakter
Karakter adalah output dengan menggunakan built-in predikat meletakkan predikat mengambil argumen tunggal, yang harus menjadi nomor 0-255 atau ekspresi yang
mengevaluasi ke integer dalam jangkauan. Mengevaluasi tujuan put menyebabkan satu karakter untuk menjadi output untuk saat ini output stream. Ini adalah karakter yang sesuai dengan nilai numerik (ASCII nilai) dari argumen.

misalnya
? - Meletakkan (97), nl.
sebuah
ya
? - Meletakkan (122), nl.
z
ya
? - Meletakkan (64), nl.
@
ya




Logika Pemrograman Dengan Prolog



Output ke sebuah File
Meskipun definisi di atas kirim menyatakan bahwa 'semua file yang sudah ada dengan yang sama Namanya dihapus ', ada kemungkinan lain, yang penting bagi beberapa aplikasi, yaitu bahwa file tersebut tidak dihapus dan setiap output ditempatkan setelah akhir isi yang ada file. Baik 'menimpa' dan 'append' pilihan
kemungkinan besar akan tersedia dalam pelaksanaan praktis Prolog tetapi mungkin melibatkan menggunakan predikat yang berbeda (misalnya terbuka) sebagai pengganti atau serta kirim.



Input: Mengubah Input Current Stream

Input stream yang aktif dapat diubah dengan menggunakan melihat / 1 predikat. Ini membutuhkan argumen tunggal, yang merupakan atom atau variabel yang mewakili nama file, misalnya lihat ( 'myfile.txt'). Mengevaluasi sebuah tujuan melihat menyebabkan file bernama input yang menjadi sungai. Jika file ini belum terbuka itu pertama kali dibuka (untuk akses baca saja). Jika tidak mungkin untuk membuka file dengan nama yang diberikan, kesalahan akan dihasilkan.
Catatan bahwa file yang sesuai dengan arus input yang sebelumnya tetap terbuka ketika sebuah arus input yang baru dipilih. Hanya arus input
dapat ditutup (menggunakan predikat melihat dijelaskan di bawah). Default input stream pengguna, yaitu pengguna terminal. Nilai ini dapat dipulihkan baik dengan menggunakan dilihat predikat atau dengan melihat (pengguna). Built-in predikat melihat / 0 mengambil tanpa argumen. Mengevaluasi sebuah tujuan melihat penyebab masukan saat ini adalah file yang akan ditutup dan arus input yang akan diatur ulang ke pengguna.

Expert System Design

Digital Restaurant Machine



Latar Belakang


Seiring dengan waktu, kemacetan dan mobilitas yang tinggi tidak memungkinkan kita untuk dapat pergi kemana-mana dengan leluasa. Apabila kita berada di kantor dan perut terasa lapar dan waktu tidak memungkinkan kita untuk pergi, maka kami menyediakan Restaurant Digital. Anda dapat mengakses lewat mana saja. Dengan alat ini kita dapat merasakan mudahnya dan enaknya teknologi. Anda tidak perlu susah-susah untuk berlama-lama antri di restaurant tersebut dan bermacet-macet ria. Itu sudah ketinggalan jaman dan tidak berlaku di dunia yang canggih ini. Selain itu kami juga menawarkan pemmbayaran yang menggunakan sistem digital pula. Kami membidik ke seluruh orang yang mempunyai mobilitas yang tinggi dan tidak sempat untuk mendapatkan waktu makan. Dengan alat ini kami dapat memudahkan pekerjaan anda dan perut pun terisi. Dan kami mengaplikasikan programnya melalui prolog yang kami sertakan dibawah ini. Dan contohnya sebagai berikut:



Langkah-langkah:

1. kita menuliskan perintah yang kita inginkan di dalam notepad. kemudian simpan dengan format (.pl)














































2. kemudian 'consult' ke dalam program prolog. maka, akan mucul dengan hasil yang diinginkan anda.








Kamis, 12 November 2009

OPERATOR AND ARITHMETIC in Prolog (TUTORIAL Nomor 2)

Rule Baru

Notepad Nomor 2



















Prolog





















Rule Lama (Menurut soal yang tertulis)


Notepad





















Prolog






















Langkah - Langkah :
- ketik perintah di dalam notepad
- kemudian simpan dengan format (.pl) agar bisa terbuka di dalam progran SWI PROLOG
- kemudian consult di dalam SWI PROLOG
- setelah itu masukkan sesuai dengan perintah yang diminta
- seperti di dalam contoh yaitu :
?- pred (argumen 1, argumen 2)
maka akan muncul hasil yang diminta, yaitu rata-rata, akar, maksimal, dan nilai terbesar

nb : setelah kita membuat dengan rule baru. maka, rule lama juga dibuat lagi. ini bertujuan untuk membandingkan antara rule lama dan rule baru. sehingga tau akan jawabannya. yang dimana jawabannya tersebut sama. hanya untuk perbandingan saja. antara rule lama dan rule baru.

OPERATOR AND ARITHMETIC in Prolog (TUTORIAL Nomor 1)

Rule Baru
Notepad Nomor 1















Prolog




















Rule Lama


Notepad
















Prolog



















Langkah - Langkah :
- ketik perintah di dalam notepad
- kemudian simpan dengan format (.pl) agar bisa terbuka di dalam progran SWI PROLOG
- kemudian consult di dalam SWI PROLOG
- setelah itu masukkan sesuai dengan perintah yang diminta
- seperti di dalam contoh yaitu :
?- X chases Y.
maka akan muncul hasil yang diminta. yaitu :
X = argumen 1
Y = argumen 2
setelah muncul X dan Y untuk pertama kalinya. maka, diakhiri dengan tanda titik koma (;). begitu juga seterusnya. hingga timbul sebuah jawaban yang bertuliskan 'NO'. ini menunjukkan bahwa SWI PROLOG tersebut sudah berakhir.

nb : setelah kita membuat dengan rule baru. maka, rule lama juga dibuat lagi. ini bertujuan untuk membandingkan antara rule lama dan rule baru. sehingga tau akan jawabannya. yang dimana jawabannya tersebut sama. hanya untuk perbandingan saja. antara rule lama dan rule baru.

Rabu, 11 November 2009

Summary For Chapter 4

Operator dan Arithmetic

Operator
notasi yang digunakan untuk predikat adalah salah satu dari standar
functor diikuti oleh sejumlah argumen dalam kurung, misalnya suka (john, mary).
Sebagai alternatif, apapun predikat yang ditetapkan pengguna dengan dua argumen (binary predikat) dapat dikonversi ke operator infiks. Hal ini memungkinkan functor
(predikat nama) yang akan ditulis di antara dua argumen tanpa tanda kurung, misalnya
john suka mary. Setiap predikat yang ditetapkan pengguna dengan satu argumen (a unary predikat)dapat diubah menjadi prefiks operator. Hal ini memungkinkan untuk functor ditulis sebelum argumen tanpa tanda kurung. Notasi operator juga dapat digunakan dengan mudah dibaca aturan untuk bantuan. Setiap predikat yang ditetapkan pengguna dengan satu atau dua argumen dapat dikonversi ke operator dengan memasukkan tujuan menggunakan op predikat pada sistem prompt.

Ada beberapa cara penulisan notasi untuk predikat tunggal dan ganda, yaitu: Dengan menggunakan tanda kurung (parentheses) seperti yang sudah digunakan pada tutorial sebelumnya. Contoh : likes(john,mary); Dengan menggunakan operator sisip (infix operator), yaitu functor (nama predikat) ditulis di antara dua argument tanpa menggunakan tanda kurung. Contoh : john likes mary. ; Dengan menggunakan prefix operator. Cara ini digunakan untuk menuliskan predikat dengan satu argument (predikat tunggal) dengan menuliskan predikat sebelum argument tanpa ada tanda kurung. Contoh isa_dog fred sebagai ganti dari isa_dog(fred); Dengan menggunakan operator posfiks yaitu predikat ditulis setelah argument. Contoh fred isa_dog.

Notasi operator dapat digunakan untuk mempermudah pembacaan sebuah rule. Sebagai contoh ada rule sebagai berikut:

Likes(john,X):- is_female(X),owns(X,Y),isa_cat(Y).

Rule tersebut dapat lebih mudah dipahami jika ditulis sebagai berikut:

John likes X :- X is female, X owns Y,Y isa_cat.

Suatu predikat dengan satu atau dua argument dapat di-konvert ke sebuah operator dengan memasukkan goal menggunakan predikat op pada system prompt. Predikat ini mempunyai tiga argument. Contoh

?-(150,xfy,likes).




Arithmetic



Meskipun contoh-contoh yang digunakan dalam bab-bab sebelumnya buku ini adalah non-numerik(hewan yang mamalia dll), Prolog juga menyediakan fasilitas untuk melakukan aritmatika menggunakan notasi yang serupa dengan yang sudah akrab bagi banyak pengguna dari aljabar dasar. Hal ini dicapai dengan menggunakan built-in predikat adalah / 2, yang telah ditetapkan sebagai infiks operator dan dengan demikian ditulis antara dua argumen. Cara yang paling umum adalah menggunakan / 2 adalah dimana argumen pertama adalah terikat variabel. Mengevaluasi tujuan X -6,5 akan menyebabkan X untuk terikat dengan jumlah -6,5 dan tujuan untuk sukses.

Argumen kedua dapat berupa nomor atau ekspresi aritmatika misalnya
X adalah 6 * Y + Z-3.2 + P-Q / 4 (* menandakan perkalian).
Setiap variabel yang muncul dalam sebuah ekspresi aritmatika sudah harus terikat(sebagai mengevaluasi hasil dari tujuan sebelumnya) dan nilai-nilai mereka harus numerik. Disediakan Dengan 60 Logika Pemrograman Prolog
mereka, tujuan akan selalu berhasil dan variabel yang membentuk pertama
argumen akan terikat dengan nilai ekspresi aritmetik. Jika tidak, kesalahan
pesan akan muncul.

? - X 10,5 4,7 * 2.
X = 19,9
? - Y adalah 10, Z adalah Y 1.
Y = 10,
Z = 11

Simbol seperti + - * / dalam ekspresi aritmatika adalah jenis khusus infiks
operator yang dikenal sebagai operator aritmetika. Tidak seperti operator digunakan di tempat lain di Prolog mereka tidak predikat tetapi fungsi yang mengembalikan nilai numerik. Seperti halnya angka-angka, variabel dan operator, ekspresi aritmatika dapat mencakup fungsi aritmatika, ditulis dengan argumen mereka dalam tanda kurung (yaitu bukan sebagai operator). Seperti operator aritmetika ini kembali nilai-nilai numerik, misalnya menemukan akar kuadrat dari 36:

? - X adalah sqrt (36).
X = 6

Operator aritmetik - dapat digunakan tidak hanya sebagai operator infiks biner
menunjukkan perbedaan dua nilai numerik, misalnya X-6, tetapi juga sebagai awalan unary operator untuk menunjukkan negatif dari sebuah nilai numerik, misalnya

? - X adalah 10, Y-X-2.
X = 10,
Y = -12

Tabel di bawah menunjukkan beberapa operator dan aritmatika aritmetika
fungsi yang tersedia dalam Prolog.
X + Y jumlah X dan Y
X-Y perbedaan dari X dan Y
X * Y produk X dan Y
X / Y hasil bagi X dan Y
X / / Y 'integer hasil bagi' dari X dan Y (hasilnya adalah dipotong ke
terdekat integer antara itu dan nol)
X ^ Y X ke Y kekuatan
-X negatif X
abs (X) nilai absolut X
sin (X) sinus X (untuk X diukur dalam derajat)
cos (X) kosinus X (untuk X diukur dalam derajat)
max (X, Y) yang lebih besar dari X dan Y
sqrt (X) akar kuadrat X


Contoh
? - X adalah 30, Y adalah 5, Z adalah X + Y + X * Y + sin (x).
X = 30,
Y = 5,
Z = 185,5

Meskipun merupakan predikat biasanya digunakan dalam cara yang dijelaskan di sini, pertama argumen juga bisa menjadi nomor atau sebuah variabel terikat dengan nilai numerik. Dalam kasus, nilai numerik dari dua argumen dihitung. Tujuan berhasil
jika ini adalah sama. Jika tidak, itu gagal.

? - X 7, X adalah 6 +1.
X = 7
? - 10 adalah 7 13-11 9.
tidak
? - 18 adalah 7 13-11 9.
ya

Unifikasi
Deskripsi sebelumnya dapat disederhanakan dengan mengatakan bahwa argumen kedua dari
yang adalah / 2 operator dievaluasi dan nilai ini kemudian disatukan dengan argumen pertama. Hal ini menggambarkan fleksibilitas konsep penyatuan.

(a) Jika argumen pertama adalah variabel terikat, ia terikat dengan nilai yang
Argumen kedua (sebagai efek samping) dan tujuan adalah berhasil.

(b) Jika argumen pertama adalah angka, atau variabel terikat dengan nilai numerik, itu dibandingkan dengan nilai argumen kedua. Jika mereka adalah sama, adalah tujuan
berhasil, selain itu gagal. Jika argumen pertama adalah atom, istilah majemuk, daftar, atau variabel terikat satu ini (tidak ada yang seharusnya terjadi), hasilnya adalah tergantung pada implementasi. Kemungkinan besar akan terjadi kesalahan. Perhatikan bahwa tujuan seperti X adalah X 1 akan selalu gagal, apakah X tidak terikat.

? - X adalah 10, X adalah X +1.
tidak
Untuk meningkatkan nilai oleh satu memerlukan pendekatan yang berbeda.

/ * Versi salah * /
meningkatkan (N):-N adalah N +1.
? - Meningkatkan (4).
tidak
/ * Benar versi * /
meningkatkan (N, M):-M adalah N +1.
? - Meningkat (4, X).
X = 5

Operator Precedence di Arithmetic Expressions
Bila ada lebih dari satu operator di sebuah ekspresi aritmatika, misalnya A + B * C-D, Prolog kebutuhan sarana menentukan urutan operator akan diterapkan.
Untuk operator dasar seperti + - * dan / itu sangat diinginkan bahwa ini adalah
adat 'matematika' order, yaitu ekspresi A + B * CD harus ditafsirkan
sebagai 'menghitung produk B dan C, tambahkan ke A dan kemudian kurangi D', bukan sebagai 'menambahkan A dan B, kemudian kalikan dengan C dan kurangi D '. Prolog mencapai hal ini dengan memberikan masing-masing operator numerik nilai didahulukan. Operator didahulukan relatif tinggi seperti * dan / diterapkan sebelum mereka yang didahulukan lebih rendah seperti + dan -. Operator dengan prioritas yang sama (misalnya + dan -, * dan /) diterapkan dari kiri ke kanan. Efeknya adalah untuk memberikan ekspresi seperti A + B * CD makna bahwa pengguna yang akrab dengan aljabar akan mengharapkan untuk memiliki, yaitu A + (B * C)-D. Jika urutan yang berbeda diperlukan evaluasi ini dapat dicapai dengan menggunakan kurung, e.g. X adalah (A + B) * (C-D). Ungkapan tanda kurung selalu dievaluasi terlebih dahulu.

Relational Operator
The infiks operator =: = = \ =>> = <= relasional operator. Mereka digunakan untuk membandingkan nilai dari dua aritmatika
ekspresi. Tujuan berhasil jika nilai ekspresi pertama adalah sama dengan, tidak
sama dengan, lebih besar dari, lebih besar dari atau sama dengan, kurang dari atau kurang dari atau sama dengan
nilai dari ekspresi kedua, masing-masing. Kedua argumen harus angka,
terikat variabel atau ekspresi aritmetika (di mana setiap variabel terikat untuk
nilai numerik).

? - 88 15-3 =: = 110-5 * 2.
ya
? - 100 = \ = 99.
ya

Ada tiga jenis operator relasional untuk pengujian kesetaraan dan ketidaksetaraan
tersedia dalam Prolog. Tipe pertama digunakan untuk membandingkan nilai-nilai aritmatika ekspresi. Dua lainnya jenis tersebut digunakan untuk membandingkan istilah.

Aritmatika Expression Kesetaraan =: =
E1 =: = E2 berhasil jika ekspresi aritmetika mengevaluasi E1 dan E2 yang sama
nilai

? - 6 +4 =: = 6 * 3-8.
ya
? - Sqrt (36) +4 =: = 5 * 11-45.
ya

Untuk memeriksa apakah suatu bilangan bulat ganjil atau bahkan kita dapat menggunakan checkeven / 1 predikat
didefinisikan di bawah ini.

checkeven (N):-M adalah N / / 2, N =: = 2 * M.
? - Checkeven (12).
ya
? - Checkeven (23).
tidak
? - Checkeven (-11).
tidak
? - Checkeven (-30).
ya


Logika Pemrograman Dengan Prolog
Persyaratan Identik ==
Kedua argumen dari operator == infiks harus istilah. Tujuan Term1 == Term2
berhasil jika dan hanya jika Term1 identik dengan Term2. Setiap variabel yang digunakan dalam istilah mungkin atau mungkin tidak sudah terikat, tetapi tidak ada variabel terikat sebagai akibat dari mengevaluasi tujuan.

? - Suka (X, Prolog) == suka (X, Prolog).
X = _
? - Suka (X, Prolog) == suka (Y, Prolog).
tidak
(X dan Y adalah variabel yang berbeda)
? - X adalah 10, pred1 (X) == pred1 (10).
X = 10
? - X == 0.
tidak
? - 6 4 == 3 +7.
tidak

Nilai sebuah ekspresi aritmatika hanya dievaluasi jika digunakan dengan adalah / 2
operator. Berikut 6 +4 hanyalah sebuah istilah dengan functor + dan argumen 6 dan 4. Ini sama sekali berbeda dari istilah 3 +7. Persyaratan Tidak Identik \ ==
Term1 \ == Term2 tes apakah Term1 tidak identik dengan Term2. Tujuan berhasil
jika Term1 == Term2 gagal. Selain itu gagal.

? - Pred1 (X) \ == pred1 (Y).
X = _,
Y = _

(Output menandakan bahwa baik X dan Y adalah terikat dan variabel yang berbeda.)
Syarat Identik Dengan Unifikasi = Istilah kesetaraan operator = adalah serupa dengan == dengan satu penting (dan sering sangat berguna) perbedaan. Tujuan Term1 = Term2 berhasil jika Term2 istilah Term1 dan menyatukan, yaitu ada beberapa cara untuk mengikat nilai-nilai variabel yang akan membuat persyaratan identik. Jika tujuan berhasil, seperti terjadi sebenarnya mengikat.


Logical Operator
Bagian ini memberikan gambaran singkat dari dua operator yang mengambil argumen yang
panggilan istilah, yaitu istilah yang dapat dianggap sebagai tujuan.
Operator yang tidak Operator awalan bukan / 1 dapat ditempatkan sebelum tujuan untuk memberikan yang pengingkaran. Itu tujuan menegasikan berhasil jika tujuan asli gagal dan gagal jika tujuan asli berhasil. Contoh berikut menggambarkan penggunaan tidak / 1. Diasumsikan bahwa database berisi satu klausul

anjing (fido).
? - Tidak anjing (fido).
tidak
? - Anjing (fred).
tidak
? - Tidak anjing (fred).
ya
? - X = 0, X adalah 0.
X = 0
? - X = 0, bukan X adalah 0.
tidak

Rabu, 21 Oktober 2009

Fact, RULES, PREDICATE and VARIABLE (Print Screen) I dan II (NOTEPAD)



NOTEPAD "ANIMAL"

















NOTEPAD "DATING"

Fact, RULES, PREDICATE and VARIABLE (Print Screen) II

Langkah-langkah :

1. setelah menyalin soal dari Exercise 2 ke dalam notepad

2. kemudian save notepad dengan format (.pl)

3. buka dalam program prolog .

4. kerjakan soal tersebut .

5. yaitu mencari pasangan pria dan wanita .

6. Di dalam menjawab jangan lupa tanda titik (.) setelah ENTER jangan lupa tanda titik koma (;). hingga program menunjukkan pernyataan NO.

7. kemudian pada program prolog tersebut akan muncul beberapa pasangan pria dan wanita .

Fact, RULES, PREDICATE and VARIABLE (Print Screen) I


Langkah-langkah :

1. setelah menyalin soal dari Exercise 2 ke dalam notepad

2. kemudian save notepad dengan format (.pl)

3. buka dalam program prolog .

4. kerjakan soal tersebut .

5. a) semua mammalia
b) semua mammalia dan karnivora
c) semua mammalia dengan stripes
d) yang reptilia

6. kemudian jawab ke dalam program prolog. di dalam menjawab jangan lupa sertakan tanda titik (.) setelah memencet ENTER jangan lupa sertakan tanda titik koma (;). hingga program menunjukkan pernyataan NO. kemudian lanjutkan ke dalam soal berikutnya.

Selasa, 20 Oktober 2009

Literature Review (Expert System and Rule-based Expert System)

Sistem Pakar berbasis kaidah

Sistem pakar adalah suatu program komputer yang memperlihatkan derajat keahlian dalam pemecahan masalah di bidang tertentu sebanding dengan seorang pakar (Ignizio, 1991). Keahlian sistem pakar dalam memecahkan suatu masalah diperoleh dengan cara merepresentasikan pengetahuan seorang atau beberapa orang pakar dalam format tertentu dan menyimpannya dalam basis pengetahuan. Sistem pakar berbasis kaidah (rule-based expert system) adalah sistem pakar yang menggunakan kaidah (rules) untuk merepresentasikan pengetahuan di dalam basis pengetahuannya.
Mesin inferensi (inference engine) merupakan bagian yang bertindak sebagai pencari solusi dari suatu permasalahan berdasar pada kaidah-kaidah yang ada dalam basis pengetahuan sistem pakar. Selama proses inferensi, mesin inferensi memeriksa status dari basis pengetahuan dan memori kerja (working memory) untuk menentukan fakta apa saja yang diketahui dan untuk menambahkan fakta baru yang dihasilkan ke dalam memori kerja tersebut. Fakta-fakta yang merupakan hasil dari proses inferensi disimpan dalam memori kerja.

Literature Review (Expert System and Rule-based Expert System)

Expert systems topics

There are two main methods of reasoning when using inference rules: backward chaining and forward chaining.

Forward chaining starts with the data available and uses the inference rules to conclude more data until a desired goal is reached. An inference engine using forward chaining searches the inference rules until it finds one in which the if clause is known to be true. It then concludes the then clause and adds this information to its data. It would continue to do this until a goal is reached. Because the data available determines which inference rules are used, this method is also called data driven.

Backward chaining starts with a list of goals and works backwards to see if there is data which will allow it to conclude any of these goals. An inference engine using backward chaining would search the inference rules until it finds one which has a then clause that matches a desired goal. If the if clause of that inference rule is not known to be true, then it is added to the list of goals. For example, suppose a rule base contains

  1. If Fritz is green then Fritz is a frog.
  2. If Fritz is a frog then Fritz hops.

Suppose a goal is to conclude that Fritz hops. The rule base would be searched and rule (2) would be selected because its conclusion (the then clause) matches the goal. It is not known that Fritz is a frog, so this "if" statement is added to the goal list. The rule base is again searched and this time rule (1) is selected because its then clause matches the new goal just added to the list. This time, the if clause (Fritz is green) is known to be true and the goal that Fritz hops is concluded. Because the list of goals determines which rules are selected and used, this method is called goal driven.

Certainty factors

One advantage of expert systems over traditional methods of programming is that they allow the use of "confidences", also known as certainty factors. A human, when reasoning, does not always conclude things with 100% confidence: he might venture, "If Fritz is green, then he is probably a frog" (after all, he might be a chameleon). This type of reasoning can be imitated by using numeric values called confidences. For example, if it is known that Fritz is green, it might be concluded with 0.85 confidence that he is a frog; or, if it is known that he is a frog, it might be concluded with 0.95 confidence that he hops. These numbers are probabilities in a Bayesian sense, in that they quantify uncertainty.

Expert system architecture

The following general points about expert systems and their architecture have been illustrated.

1. The sequence of steps taken to reach a conclusion is dynamically synthesized with each
new case. It is not explicitly programmed when the system is built.
2. Expert systems can process multiple values for any problem parameter. This permits more than one line of reasoning to be pursued and the results of incomplete (not fully
determined) reasoning to be presented.
3. Problem solving is accomplished by applying specific knowledge rather than specific technique. This is a key idea in expert systems technology. It reflects the belief that human experts do not process their knowledge differently from others, but they do possess different knowledge. With this philosophy, when one finds that their expert system does not produce the desired results, work begins to expand the knowledge base, not to re-program the procedures.

There are various expert systems in which a rulebase and an inference engine cooperate to simulate the reasoning process that a human expert pursues in analyzing a problem and arriving at a conclusion. In these systems, in order to simulate the human reasoning process, a vast amount of knowledge needed to be stored in the knowledge base. Generally, the knowledge base of such an expert system consisted of a relatively large number of "if then" type of statements that were interrelated in a manner that, in theory at least, resembled the sequence of mental steps that were involved in the human reasoning process.

Because of the need for large storage capacities and related programs to store the rulebase, most expert systems have, in the past, been run only on large information handling systems. Recently, the storage capacity of personal computers has increased to a point where it is becoming possible to consider running some types of simple expert systems on personal computers.

In some applications of expert systems, the nature of the application and the amount of stored information necessary to simulate the human reasoning process for that application is just too vast to store in the active memory of a computer. In other applications of expert systems, the nature of the application is such that not all of the information is always needed in the reasoning process. An example of this latter type application would be the use of an expert system to diagnose a data processing system comprising many separate components, some of which are optional. When that type of expert system employs a single integrated rulebase to diagnose the minimum system configuration of the data processing system, much of the rulebase is not required since many of the components which are optional units of the system will not be present in the system. Nevertheless, earlier expert systems require the entire rulebase to be stored since all the rules were, in effect, chained or linked together by the structure of the rulebase.

When the rulebase is segmented, preferably into contextual segments or units, it is then possible to eliminate portions of the Rulebase containing data or knowledge that is not needed in a particular application. The segmenting of the rulebase also allows the expert system to be run with systems or on systems having much smaller memory capacities than was possible with earlier arrangements since each segment of the rulebase can be paged into and out of the system as needed. The segmenting of the rulebase into contextual segments requires that the expert system manage various intersegment relationships as segments are paged into and out of memory during execution of the program. Since the system permits a rulebase segment to be called and executed at any time during the processing of the first rulebase, provision must be made to store the data that has been accumulated up to that point so that at some time later in the process, when the system returns to the first segment, it can proceed from the last point or rule node that was processed. Also, provision must be made so that data that has been collected by the system up to that point can be passed to the second segment of the rulebase after it has been paged into the system and data collected during the processing of the second segment can be passed to the first segment when the system returns to complete processing that segment.

The user interface and the procedure interface are two important functions in the information collection process.

End user

The end-user usually sees an expert system through an interactive dialog, an example of which follows:

Q. Do you know which restaurant you want to go to?

A. No
Q. Is there any kind of food you would particularly like?

A. No
Q. Do you like spicy food?

A. No
Q. Do you usually drink wine with meals?

A. Yes
Q. When you drink wine, is it French wine?

A. Yes

As can be seen from this dialog, the system is leading the user through a set of questions, the purpose of which is to determine a suitable set of restaurants to recommend. This dialog begins with the system asking if the user already knows the restaurant choice (a common feature of expert systems) and immediately illustrates a characteristic of expert systems; users may choose not to respond to any question. In expert systems, dialogs are not pre-planned. There is no fixed control structure. Dialogs are synthesized from the current information and the contents of the knowledge base. Because of this, not being able to supply the answer to a particular question does not stop the consultation.

Rabu, 14 Oktober 2009

Logic Programming

Logic Programming

• Pemrograman deklaratif, mendeklarasikan tujuan

komputasi, bukan menyusun algoritme secara

detil.

• Disebut juga rule‐based programming.

• Aplikasinya:

– Artificial intelligence, misalnya MYCIN

– Database information retrieval, misalnya SQL

• Fitur dari pemrograman logika:

– Nondeterministik, program bisa memperoleh banyak


jawaban, tidak hanya satu jawaban


– Backtracking, lacak balik secara otomatis



Horn clauses


• Program logika menggunakan ekspresi logika


matematika untuk jawaban masalah.


• Dasar pemrograman logika adalah proposisi

dan predikat.

• Salah satu bentuknya adalah Horn clause.

• Definisi:

Horn clause memiliki sebuah head h yang disebut


sebagai predikat, dan body sebagai daftar dari


predikat p1, p2, …., pn.


• Dapat ditulis sebagai


h ← p1, p2, …., pn


Artinya, h adalah benar (true) hanya jika p1, p2, …., pn


secara simultan adalah benar.


• Contoh:


salju(C) ← hujan(C), beku(C)


Logika Predikat


• Disebut juga kalkulus predikat.


• Dinyatakan dalam bentuk fakta dan aturan.

• Contoh:

– lelaki(andi) // fakta


– menikah(andi , ana) // fakta

– ∀y∃x orang(y) → ibu(x,y) // aturan

– ∀x∀y[menikah(x,y) ∧ lelaki(x)] → ~lelaki(y)

• lelaki, menikah, orang, ibu disebut relasi.


Bahasa Deklaratif

• Ari adalah bapak dari Andi, ditulis:

bapak(Ari, Andi).


• A adalah kakek dari F, dibuat aturan:

jika A bapaknya X dan X bapaknya F


atau


jika A bapaknya X dan X ibunya F


ditulis sebagai


kakek(A,F) :‐ bapak(A,X), bapak(X,F).


kakek(A,F) :‐ bapak(A,X), ibu(X,F).


Fakta

• Kenyataan atau kebenaran yang diakui


• Menyatakan:


– Hubungan dua atau lebih obyek


– Sifat obyek


• Contoh:


bapak(ari, andi).


biru(langit).


manis(gula).



Aturan


• Logika yg dirumuskan dalam bentuk relasi


sebab‐akibat dan hubungan implikasi.


• Contoh:

kakek(A,F) :‐ bapak(A,X), bapak(X,F).


kakek(A,F) :‐ bapak(A,X), ibu(X,F).


Blogspot Template by Isnaini Dot Com. Powered by Blogger and Supported by ArchitecturesDesign.Com Beautiful Architecture Homes