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 '.


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