PANDUAN PRAKTIKUM KECERDASAN BUATAN
DISUSUN OLEH YUSFRIZAL , M. KOM
STMIK KAPUTAMA
2020
PERTEMUAN I
DASAR-DASAR PROLOG
1. TUJUAN :
Mahasiswa diharapkan dapat menggunakan dasar-dasar pemrograman Prolog 2. MATERI
Fakta dan Relasi
Aturan
Pertanyaan (Query) 3. TEORI
1. Fakta dan Relasi
Bahasa pemrograman prolog terdiri dari kumpulan data-data obyek yang merupakan suatu fakta. Karena fakta menunjukkan suatu keadaan atau situasi nyata maka fakta selalu benar (True).
Dalam Prolog, fakta dapat dibedakan menjadi 2 macam, yaitu :
Menunjukkan relasi
Menunjukkan milik/sifat
Sebagai contoh, sebuah fakta mengatakan : Slamet adalah ayah Amin
Dalam bahasa Prolog, hal ini dituliskan sebagai : ayah(slamet,amin).
Contoh lain :
Tini suka boneka Dalam Prolog : suka(tini,boneka)
Angga suka renang dan tenis suka(angga,renang) dan suka(angga,tenis).
Sedangkan sebuah fakta :
Anita adalah seorang wanita Dapat dituliskan dalam Prolog sebagai :
Wanita(anita).
Hal ini menunjukkan bahwa Anita bersifat sebagai seorang wanita.
2. Aturan (Rules)
Aturan adalah suatu pernyataan yang menunjukkan bagaimana fakta-fakta berinteraksi satu dengan yang lain untuk membentuk suatu kesimpulan. Sebuah aturan dinyatakan sebgai kalimat bersyarat. Misalnya, ada sebuah fakta :
Tino suka apel
Dan ada sebuah aturan yang berbunyi : Yuli suka sesuatu yang disukai Tino
Informasi yang didapat dari fakta yang diketahui, maka dapat diambil kesimpulan (jawaban) dari aturan tersebut yaitu Yuli suka apel.
Dalam Prolog, fakta diatas dituliskan sebagai : Suka(tino,apel).
Sedangkan aturan tersebut dapat dinyatakan juga sebagai : Yuli suka sesuatu jika Tino suka sesuatu itu juga Dan ini dituliskan sebagai :
Suka(Yuli,Sesuatu) if suka(tina,Sesuatu).
3. Pertanyaan (Query)
Setelah memberikan data-data berupa fakta dan aturan, kita dapat mengajukan pertanyaan berdasarkan fakta dan aturan yang ada. Misalkan :
Apakah Tini suka boneka?
Dalam Prolog, pertanyaan ini dituliskan sebagai : Suka(tini,boneka).
Pertanyaan ini sesuai dengan fakta yang ada, maka Prolog akan memberikan jawaban : Yes (yang berarti benar)
Sedangkan jika diberikan pertanyaan : Suka(tini,mobil-mobilan).
Maka Prolog akan menjawab : No
Pertanyaan diatas bersifat membuktikan terhadap fakta yang ada sehingga hanya ada 2 kemungkinan jawaban yaitu benar atau salah. Disamping itu, Prolog juga mampu memberikan jawaban atas pertanyaan apakah, siapakah, dan lain-lain.
Misalkan :
Apakah yang disukai oleh Tini?
Dalam Prolog, pertanyaan ini dituliskan sebagai : Suka(tini,Apa).
Prolog akan mencoba mencari jawaban dari fakta yang ada dan akan memberikan jawaban :
Apa = boneka
Bila kita mengajukan pertanyaan : Siapakah yang suka boneka?
Dalam Prolog dituliskan : Suka(Siapa,boneka).
Prolog akan memberikan jawaban : Siapa = tini
Latihan
1. Tuliskan pernyataan berikut ini dalam bahasa Prolog :
Andi mempunyai hobby bermain tennis.
Yuli berumur 25 tahun.
Dudung mempunyai seekor anjing Buldog.
Buah anggur berwarna ungu dan tumbuh merambat.
2. Ada sebuah pernyataan berbunyi :
Arman akan pergi menonton film jika punya uang dan hari cerah.
Tuliskan pernyataan tersebut dalam bahasa Prolog.
Apa yang terjadi kalau ternyata hari itu hujan turun?
3. Tuliskan aturan berikut ini dalam bahasa Prolog.
Seseorang dikatakan mempunyai sakit tifus apabila ia mempunyai gejala-gejala:
demam, sakit perut, badan lemas.
Seseorang dapat didakwa sebagai pembunuh apabila ia dicurigai, sidik jarinya ditemukan di tempat kejadian dan ia tidak mempunyai alibi(alasan untuk menyangkal tuduhan).
MODUL II
STRUKTUR PROGRAM PROLOG
Tujuan : Mahasiswa dapat menggunakan bahasa struktur pemrograman Prolog.
TEORI
Secara garis besar, program Turbo Prolog 2.0 terdiri dari 4 bagian utama yaitu :
1. Domains
Domains berisi deklarasi (pernyataan) tentang jenis data yang digunakan dalam fakta dan aturan. Ada 6 buah “domain” standar yang dikenal dalam Turbo Prolog 2.0:
Integer Bilangan bulat dari -32.766 sampai 32.767.
Real Bilangan dari 1e-307 sampai 1e+308.
Char Karakter tunggal yang diapit dengan „ ‟, terdiri atas huruf, angka atau simbol khusus.
String Kumpulan karakter yang diapit dengan “ “,
Symbol Kumpulan karakter yang diakhiri dengan spasi dan harus diawali dengan huruf kecil.
File Digunakan untuk operasi File
Disamping domain standar, pemrogram dapat pula mendefinisikan domain lain yang terdiri dari domain standar.
2. Predicates (Predikat)
Predikat adalah nama simbolik untuk relasi.
Sebagai contoh :
Ayah(slamet,amin).
Predikat dari fakta tersebut dituliskan sebagai : Ayah(symbol,symbol)
DOMAINS
PREDICATES
GOAL
CLAUSES
Dimana ayah adalah nama predikat sedangkan slamet dan amin adalah obyek yang berjenis symbol, serta dituliskan tanpa diakhiri dengan tanda titik.
Dalam predikat, slamet dan amin disebut sebagai argumen. Sebuah predikat dapat tidak memiliki atau memiliki argumen dengan jumlah bebas. Jumlah argumen suatu predikat disebut aritas (arity).
Syarat-syarat penulisan nama predikat :
Harus diawali dengan huruf kecil dan dapat diikuti dengan huruf, bilangan atau garis bawah.
Panjang nama predikat maksimum 250 karakter.
Tidak diperbolehkan menggunakan spasi, tanda minus, tanda bintang dan garis miring.
Argumen dalam suatu predikat tidak harus dituliskan dengan domains standar tetapi dapat dinyatakan dengan argumen lain, misalkan :
mulai
alamat(jalan,kota,kode_pos) ulang_tahun(tanggal,bulan,tahun)
pilih_Nama_Penerbangan(maskapai,tujuan,jam_berangkat,lama_perjalanan) Apabila argumen suatu predikat tidak dituliskan dalam domain standar, maka argumen tersebut harus dinyatakan dalam bagian DOMAINS, begitu juga sebaliknya.
3. Clauses (Klausa)
Klausa berisi fakta dan aturan yang membentuk keseluruhan program. Bagian klausa ini mirip dengan prosedur pada bahasa pemrograman yang lain. Bagian fakta umumnya dituliskan sebelum bagian aturan dan fakta atau aturan yang mempunyai relasi yang sama harus dituliskan berkelompok.
Contoh penulisan Klausa : CLAUSES
ayah(slamet,amin).
ayah(slamet,anang).
ayah(amin,budi).
kakek(slamet,budi).
Contoh penulisan klausa yang salah : CLAUSES
ayah(slamet,amin).
ayah(slamet,anang).
ayah(slamet,budi).
kakek(amin,budi).
4. GOAL
Goal berisi pertanyaan yang kita ajukan kepada program Prolog. Dari bagian-bagian yang terlah dituliskan sebelumnya, hanya bagian GOAL yang dituliskan menggunakan kata tunggal karena hanya boleh ada sebuah goal. Goal ini dapat terdiri dari beberapa bagian yang disebut subgoal. Hal perlu diingat bahwa, suatu pernyataan, baik fakta, relasi atau goal dikatakan satu apabila diakhiri dengan tanda titik.
Ada 2 jenis goal, yaitu :
Goal eksternal Goal yang diberikan melalui compiler terpadu Turbo Prolog (di luar program) dan dituliskan dalam jendela Dialog.
Goal internal Goal yang dituliskan sekaligus dalam program sehingga setiap kali program tersebut dieksekusi, kita tidak perlu lagi menuliskan goal yang anda inginkan.
Latihan
Buatlah program dalam bahasa prolog menggunakan struktur pemrograman prolog dari silisilah berikut :
slamet
anang amin
badu budi didi dadi
MODUL III
VARIABEL DAN GOAL MAJEMUK 1. TUJUAN
Setelah mengikuti praktikum ini mahasiswa diharapkan dapat menggunakan variabel dan goal majemuk.
2. MATERI a. Variabel b. Goal Majemuk 3. TEORI
3.1. Variabel
Variabel yaitu besaran yang nilainya dapat berubah-ubah.
Misalnya :
Siapakah ayah Didi?
Karena ayah Didi belum diketahui, maka dituliskan dalam suatu variabel, misalnya variabel X dan dituliskan sebagai :
GOAL: ayah(X,didi) X = anang
Program Prolog akan mencari padanan pertanyaan tersebut dengan fakta atau aturan yang ada dan variabel X tersebut akan mendapatkan nilai dari konstanta suatu fakta/aturan yang sepadan. Dari fakta-fakta yang ada, pertanyaan tersebut sepadan dengan :
Ayah(anang,didi)
Karena mempunyai relasi yang sama (yaitu ayah) dan obyek kedua yang sama (yaitu didi). Dengan demikian, variabel X akan mendapatkan nilai anang (sesuai dengan obyek yang pertama).
3.2. Goal Majemuk
Kita dapat menuliskan Goal yang terdiri dari lebih satu pernyataan. Bagian goal tersebut disebut sub goal. Contoh berikut ini adalah program yang memuat daftar merk mobil dengan warna dan harga tertentu. Untuk memudahkan, harga dituliskan dalam jutaan.
DOMAINS
merk, warna = symbol
harga = integer
PREDICATES
mbil(merk,warna,harga)
CLAUSES
mobil(toyota,putih,50).
mobil(mazda,merah,40).
mobil(honda,biru,55).
mobil(ford,merah,30).
mobil(bmw,biru,80).
mobil(holden,putih,30).
4. Latihan
a. Tulislah contoh program pada materi goal majemuk!
b. Editlah program tersebut, kompilasi dan eksekusilah!
c. Tuliskan perintah goal untuk mendapatkan informasi tentang merk mobil yang harganya kurang dari 30 juta!
d. Tuliskan perintah goal untuk mednapatkan informasi tentang merk mobil yang harganya diatas 30 juta dan warnanya biru!
5. Tugas
a. Buatlah program dalam bahasa prolog yang menggunakan goal majemuk!
MODUL IV UNIFIKASI 1. TUJUAN
Setelah mengikuti praktikum ini mahasiswa diharapkan dapat memahami unifikasi dan proses pencarian jawaban pada bahasa prolog.
2. Materi Unifikasi
Proses Pencarian Jawaban 3. TEORI
3.1. UNIFIKASI
Unifikasi adalah proses yang dilakukan oleh turbo prolog untuk mencari padanan antara pernyataan yang terdapat pada aturan dengan fakta atau kepala aturan lain.
Syarat terjadinya unifikasi antara 2 pernyataan : 1. Mempunyai relasi yang sama.
2. Mempunyai jumlah argumen yang sama dan posisi argumen yang sama pula.
3. Argumen yang berpadanan harus mempunyai jenis data yang sama.
4. Semua pasangan argumen (pada data majemuk) harus juga berpadanan.
Misalnya :
Ayah(Ayah,amin) dengan ayah(slamet,amin) Contoh berikut ini tidak akan terjadi unifikasi :
Ayah(slamet) dengan ayah(slamet,amin)
Karena mempunyai jumlah argumen yang tidak sama, walaupun mempunyai nama relasi yang sama.
3.2. PROSES PENCARIAN JAWABAN
Proses pencarian jawaban dalam Turbo Prolog dilakukan dengan cara pemadanan.
Bagaimana caranya Turbo Prolog mendapatkan jawaban dari Goal yang kita berikan?
Kita tinjau kembali suatu Goal:
GOAL: kakek(Kakek,budi).
Turbo Prolog akan mencari padanan goal diatas dengan fakta atau aturan, mulai dari yang teratas sampai ditemukan fakta atau aturan yang sepadan yaitu :
Kakek(Kakek,budi) --- kakek(Kakek,Cucu)
Variabel Cucu akan terikat menjadi budi dan Turbo Prolog akan mencari nilai variabel Kakek dengan membuktikan apakah semua pernyataan (subgoal) di dalam aturan tersebut benar.
Pernyataan yang pertama:
Ayah(Ayah,Cucu) --- ayah(Ayah,budi)
Untuk membuktikan kebenaran pernyataan diatas, Turbo Prolog mencari padanan dengan fakta yang ada mulai dari yang teratas, hingga ditemukan :
ayah(Ayah,budi) --- ayah(amin,budi)
Ini berarti Variabel Ayah terikat menjadi amin. Karena subgoal yang pertama benar, maka Turbo Prolog akan melanjutkan ke subgoal berikutnya dengan membawa serta semua variabel yang telah terikat pada subgoal sebelumnya:
ayah(Kakek,Ayah) --- ayah(slamet,amin)
Prolog akan mencari padanan kembali dan akhirnya menemukan:
ayah(Kakek,amin) --- ayah(slamet,amin) sehingga variabel Kakek terikat menjadi slamet.
Pada aturan kakek, hanya nilai variabel Kakek yang dityeruskan sedangkan nilai variabel Ayah tidak diperlukan.
kakek(Kakek,budi) --- kakek(slamet,budi) Berarti jawaban akhir adalah:
Kakek = slamet
4. LATIHAN
Tulislah program dalam bahasa Prolog berikut ini : DOMAINS
nama = symbol PREDICATES
ayah(nama,nama) ibu(nama,nama) nenek(nama,nama) kakek(nama,nama)
saudara_kandung(nama,nama) saudara_sepupu(nama,nama) CLAUSES
/* F A K T A */
/* Orang Tua */
ayah(slamet,amin).
ayah(slamet,anang).
ayah(amin,budi).
ayah(amin,badu).
ayah(anang,didi).
ayah(anang,dadi).
ayah(santoso,bu_amin).
ayah(supardi,bu_anang).
ibu(bu_slamet,amin).
ibu(bu_slamet,anang).
ibu(bu_amin,budi).
ibu(bu_amin,badu).
ibu(bu_anang,didi).
ibu(bu_anang,dadi).
ibu(bu_santoso,bu_amin).
ibu(bu_supardi,bu_anang).
/* ATURAN */
/* Kakek adalah kakek Cucu */
kakek(Kakek,Cucu) :- ayah(Ayah,Cucu), ayah(Kakek,Ayah).
kakek(Kakek,Cucu) :- ibu(ibu,Cucu), ayah(Kakek,ibu).
5. TUGAS
Dari contoh program pohon keluarga, tambahkan aturan-aturan untuk mendapatkan:
Nenek dan Cucu
Saudara Kandung
Saudara Sepupu
MODUL V
TRACE DAN RUNUT BALIK (BACKTRACKING) 1. TUJUAN
Setelah mengikuti praktikum ini mahasiswa dapat mengetahui alur langkah-langkah yang ditempuh oleh Bahasa Prolog.
2. MATERI
Trace
Runut balik (backtracking) 3. TEORI
3.1. Trace
Untuk mengetahuia alur langkah-langkah yang ditempuh oleh Turbo Prolog dalam mencari jawaban dapat menggunakan modus TRACE. Disamping itu, kita dapat pula mengetahui hasil setiap langkah tersebut.
Caranya dengan menambahkan perintah trace sebelum bagian DOMAINS.
trace DOMAINS
nama = symbol
Kemudian program dikompilasi ulang. Pada saat program dieksekusi, kita harus menekan F10 pada setiap langkah dan hasilnya dapat dilihat di jendela Trace.
3.2. Runut Balik (Backtracking)
Dalam mencari jawaban suatu persoalan, seringkali kita tidak menemukan jawaban yang kita inginkan. Tentu saja kita berusaha untuk mencoba kemungkinan jawaban yang lain dengan kembali ke awal dan mengikuti kembali cara (prosedur) yang sama dengan sebelumnya. Cara runut balik ini kita lakukan berulang kali sampai jawaban yang kita inginkan dapat ditemukan atau sampai semua kemungkinan jawaban telah habis dicoba. Begitu pula dengan Turbo Prolog, Ia melakukan cara yang sama dalam mencari jawaban suatu persoalan. Apabila terdapat beberapa kemungkinan jawaban, Turbo Prolog akan mencoba kemungkinan jawaban tersebut satu per satu sampai jawaban didapatkan atau sampai semua kemungkianan jawaban dicoba.
4. LATIHAN
Buatlah program berikut : trace
DOMAINS
orang, kue, rasa = symbol PREDICATES
kue(kue)
rasa(kue,rasa) suka(orang,kue) CLAUSES
kue(martabak).
kue(bolu).
rasa(martabak,gurih).
rasa(bolu,manis).
/* Andi suka kue yang rasanya manis */
suka(andi,Kue) :-
kue(Kue), rasa(Kue,manis).
Lakukan proses runut balik dengan memasukkan GOAL:
suka(andi,Apa)
Lakukan Trace dan Amati apa yang dilakukan oleh prolog dengan Goal tersebut!
5. TUGAS
Buatlah program prolog seperti pada latihan diatas untuk kesukaan terhadap buah- buah dan ciri-ciri suatu buah!
Lakukan trace untuk melihat runut balik dari program tersebut!
MODUL VI
MASUKAN DAN KELUARAN 1. TUJUAN
Setelah mengikuti praktikum ini mahasiswa dapat menggunakan predikat jadi yang ada pada Turbo Prolog 2.0 dan dapat menggunakan jendela (window).
2. MATERI
a. Predikat Keluaran b. Predikat Masukan c. Predikat Not d. Jendela (window) 3. TEORI
Turbo Prolog 2.0 telah dilengkapi dengan predikat jadi dalam jumlah cukup banyak yang mencakup berbagai macam fungsi. Predikat jadi (standar) ini tidak dapat diubah-ubah oleh pemrogram dan nama predikat jadi tidak boleh digunakan sebagai nama predikat yang dibuat oleh pemrogram (reserved word).
Dalam menggunakan predikat jadi, pemrogram hanya menuliskan variabel sesuai dengan argumen predikat tersebut.
Ada 2 fungsi argumen predikat jadi :
Untuk meneruskan nilai yang ditentukan dalam program ke predikat jadi untuk diolah (input). Variabel dalam predikat tersebut harus variabel terikat.
Untuk meneruskan nilai yang didapat oleh predikat jadi ke dalam program (output).
Variabel dalam predikat tersebut harus variabel bebas.
3.1. Predikat Keluaran
Turbo Prolog 2.0 mempunyai 3 buah predikat keluaran, yaitu: write, writef dan writedevice. Bila belum diubah (default), maka sebagai piranti (device) keluaran adalah layar monitor (screen).
a. Write
Digunakan untuk menuliskan konstanta atau isi variabel ke piranti keluaran yang dikenali saat itu. Bentuk umum predikat write adalah:
write(E1,E2,E3,…,En) – (i,i,…,i)
dimana E1, E2, E3,…,En adalah konstanta (karakter atau string) atau variabel.
Variabel yang akan dituliskan isinya harus variabel terikat (bound variabel) dan predikat write selalu benar.
Contoh sebuah klausa:
tes :-
write(“Saya sedang belajar Prolog.”),
write(“Teman Saya belajar Basic”).
Akan menghasilkan tampilan di layar monitor:
Saya sedang belajar Prolog. Teman Saya belajar Basic.
Bagaimana caranya agar kalimat yang kedua dituliskan pada baris berikutnya? Turbo Prolog 2.0 mempunyai predikat jadi nl (new line).
tes :-
write(“Saya sedang belajar Prolog.”),nl, write(“Teman Saya belajar Basic”).
Dan akan menghasilkan tampilan:
Saya sedang belajar Prolog.
Teman Saya belajar Basic.
Disamping itu untuk menuliskan baris baru dapat pula menggunakan perintah garis miring balik (backslash), yaitu \n, yang dituliskan bersama-sama di dalam tanda kutip (tunggal maupun rangkap).
Klausanya dapat dituliskan sebagai berikut:
tes :-
write(“Saya sedang belajar Prolog.\nl”), write(“Teman Saya belajar Basic”).
b. Writef
Predikat writef mempunyai fungsi yang hampir sama dengan predikat write, hanya hasilnya mempunyai format seperti yang diinginkan. Bentuk umum predikat writef adalah:
write(format,E1,E2,E3,…,En) – (i,i,…,i)
dengan variabel format mempunyai bentuk: %-m.pf.
-- : menghasilkan tulisan rapat kiri.
m : menunjukkan lebar tulisan minimum (optional) p : menunjukkan jumlah angka desimal (optional) f : format lain yang diinginkan (optional)
Macam-macam format f:
f : bilangan real dalam notasi desimal e : bilangan real dalam notasi ekponensial g : bilangan real dalam bentuk paling sederhana
d : karakter atau bilangan bulat dalam bilangan desimal u : kaarakter atau bilangan bulat dalam bilangan bulat positif
x : karakter atau bilangan bulat dalam bilangan heksadesimal c : karakter atau bilangan bulat sebagai karakter
s : string
MODUL VII
PERBANDINGAN DAN OPERASI ARITMATIKA 1. TUJUAN
Setelah mengikuti praktikum ini, mahasiswa diharapkan dapat menggunakan fungsi- fungsi operator perbandingan dan operator aritmatika pada prolog.
2. MATERI
Operator Perbandingan Operator Sama dengan Operasi Aritmatika Fungsi Matematika 3. TEORI
3.1 Perbandingan
Operator Perbandingan berfungsi untuk membandingkan nilai suatu variabel terikat atau suatu obyek. Variabel atau obyek yang dibandingkan disebut operand. Kedua operand yang dibandingkan haruslah sudah terikat dengan nilai tertentu (baik variabel maupun obyek), kecuali operator sama dengan.
Operator perbandingan yang dikenal di Turbo Prolog 2.0:
Simbol Arti
=
<
<=
>
>=
<> atau ><
Sama dengan Kurang dari
Kurang dari atau sama dengan Lebih dari
Lebih dari atau sama dengan Tidak sama dengan
3.2 Operator Sama Dengan
Operator sama dengan („=‟) mempunyai arti yang sedikit berbeda dengan bahasa lainnya. Ada 2 buah fungsi yang dapat dilakukan oleh operator sama dengan, yaitu sebagai operator perbandingan dan sebagai tanda permuatan suatu harga.
Perhatikan contoh berikut ini : PREDICATES
tes CLAUSES
tes :-
x = 6 + 4, write(x).
Bila program tersebut dikompilasi dan dieksekusi, akan memberikan hasil:
Goal: tes
10 True
Hasilnya sama dengan bahasa lainnya. Tetapi tambahkanlah contoh program di atas dengan beberapa pernyataan:
PREDICATES tes CLAUSES
tes :-
x = 6 + 4, write(x),nl, x = 6 – 4, write(x),nl.
Bila program tersebut dikompilasi dan dieksekusi, akan memberikan hasil:
Goal: tes 10
False
Pada bagian yang pertama, variabel X terikat dengan nilai 10, kemudian variabel X yang sudah terikat dengan nilai 10 dibandingkan dengan nilai 6 – 4 dan tentu saja hal ini akan menghasilkan kondisi salah (False).
3.3. Operasi Arirmatika
Pernyataan arirmatika terdiri dari operand (bilangan atau variabel), operator dan tanda kurung (bila diperlukan).
Ada 6 buah operator aritmatika, yaitu : + : operator penjumlahan - : operator penngurangan
* : operator perkalian / : operator pembagian div : operator hasil bagi bulat mod : operator sis hasil bagi 3.4. Fungsi Matematika
Disamping mempunyai kemampuan dalam perhitungan aritmatika, Turbo Prolog 2.0 juga dilengkapi dengan predikat jadi yang merupakan fungsi matematika (fungsi aljabar, trigonometri, logaritma).
Fungsi-fungsi tersebut dapat dilihat pada tabel berikut ini:
Fungsi A r t i
abs(X) Harga mutlak dari X cos(X) Cosinus X (radian) sin(X) Sinus X (radian) tan(X) Tangen X (radian)
arctan(X) Arctangen X (X dalam real) dan hasilnya dalam radian exp(X) Bilangan e (2.18) pangkat X
ln(X) Logaritma X dengan bilangan dasar e log(X) Logaritma X dengan bilangan dasar 10 sqrt(X) Akar kuadrat X
round(X) Pembulatan X ke integer terdekat trunc(X) Hilangkan angka desimal
Turbo prolog 2.0 juga memiliki 2 buah predikat jadi yang berfungsi untuk menghasilkan bilangan acak, yaitu :
random(X): menghasilkan X yang merupakan bilangan real secara acak antara 0 dan 1 ( 0 <= X < 1).
random(X,Y): menghasilkan Y yang merupakan bilangan bulat secara acak antara 0 dan X ( 0<= Y < X ).
4. LATIHAN
Berikut adalah program untuk mencari solusi akar persamaan kuadrat yang berbentuk:
AX2 + BX + C
Solusi akar persamaan kuadrat tersebut didapat dengan menghitung terlebih dahulu deksriminannya yaitu:
D = B2 - 4 * A * C Bila :
D < 0, maka tidak ada solusi.
D = 0, maka ada 2 buah akar yang sama yaitu X = -B/(2 * A) D > 0, maka ada 2 buah akar yang tidak sama yaitu:
X1 = ( -B + D) / (2 * A) X2 = ( -B - D) / (2 * A)
Program lengkapnya : DOMAINS
A,B,C,D = real PREDICATES
solusi(A,B,C) jawaban(A,B,D) GOAL
makewindow(1,7,7,”SOLUSI AKAR PERSAMAAN KUADRAT”,5,5,15,70), write(“ Masukkan koefisien persaman kuadrat \n”),
write(“ A = “), readreal(A), write(“ B = “), readreal(B), write(“ C = “), readreal(C), nl, solusi(A,B,C).
CLAUSES
Solusi(A,B,C) :-
D = B*B - 4*A*C,
writef(“Solusi akar persamaan kuadrat %2*X*X +”,A), writef(“ %2*X + %2 = 0 adalah : “,B,C),nl,
jawaban(A,B,D),nl.
/* Diskriman < 0 */
jawaban(_,_,D) :- D < 0,
Write(“ Tidak Ada Jawaban ”),!.
/* Diskriman = 0 */
jawaban(A,B,D) :- D = 0,
X= -B/(2*A),
Write(“ Ada dua akar yang sama yaitu X = ”,X),!.
/* Diskriman > 0 */
jawaban(A,B,D) :- D > 0,
X1 = (-B + sqrt(D))/(2*A), X2 = (-B - sqrt(D))/(2*A), write(“ X1 = ”,X1),nl, write(“ X2 = ”,X2).
5. TUGAS
a. Buatlah program yang menghasilkan tabel harga sinus, cosinus dan tangen mulai dari 0 derajat sampai 360 derajat dengan selang 15 derajat!
b. Buatlah program tebak-tebakan bilangan bulat antara 1 sampai dengan 10 dengan menggunakan predikat Random!
MODUL VIII PENGENDALIAN ALUR
(PREDIKAT FAIL DAN PREDIKAT CUT) 1. TUJUAN :
Setelah mengikuti praktikum ini mahasiswa diharapkan dapat menggunakan predikat fail dan predikat cut.
2. MATERI
Predikat Fail
Predikat Cut
3. TEORI
Turbo Prolog 2.0 dilengkapi dengan 2 buah predikat standar yang digunakan untuk mengendalikan jalannya runut balik, yaitu predikat fail dan predikat cut (dituliskan dengan !).
3.1 Predikat Fail
Turbo prolog 2.0 akan melakukan runut balik apabila menemui kondisi gagal (gagal dalam mencari jawaban dari suatu subgoal). Hal ini bisa dilakukan dengan menggunakan predikat standar fail.
Predikat fail mempunyai sifat tidak pernah benar. Sifat ini dapat diidentikan dengan suatu kesamaan aritmatika:
2 = 3 (apakah 2 = 3) ?
Sehingga sebenarnya predikat fail dapat digantikan dengan pernyataan aritmatika tersebut.
Apabila dalam suatu klausa terdapat fail, maka predikat (subgoal) sesudah predikat fail tidak akan pernah dieksekusi oleh Turbo Prolog 2.0.
3.2 Predikat Cut ( ! )
Predikat cut ( ! ) digunakan untuk menghalangi terjadinya runut balik. Predikat cut selalu benar dan bila predikat cut telah dilewati maka tidak akan mungkin untuk melakukan runut balik ke subgoal sebelum predikat cut dalam klausa yang sedang dieksekusi.
Misalkan:
Ada 4 buah klausa yang terdiri dari 2 jenis yaitu x dan y.
x:- a,b,!,c,d.
x:- e.
y:- r,x,s.
y:- t.
Bila kondisi gagal ditemui pada subgoal a atau b, maka Turbo Prolog 2.0 akan dapat melakukan runut balik pada subgoal a atau b. Bila tidak ditemui kemungkinan jawaban yang lain, maka Turbo Prolog 2.0 akan melanjutkan ke klausa x berikutnya yang terdiri dari subgoal e.
Bila subgoal a dan b benar, Turbo Prolog 2.0 akan mengeksekusi predikat cut yang selalu benar. Kemudian Turbo Prolog 2.0 melanjutkan ke subgoal c. Bila turbo Prolog 2.0 menemui kondisi gagal, maka Turbo Prolog 2.0 hanya dapat melakukan runut balik pada subgoal c dan tidak dapat melakukan runut balik ke subgoal a, b atau ke x yang lain karena dihalangi oleh predikat cut yang berfungsi sebagai pagar.
4. LATIHAN
a. Buatlah program berikut yang merupakan penggunaan dari predikat fail!
/* Program Penggunaan Predikat Fail */
DOMAINS
kota, propinsi = string PREDICATES
ibu_kota(kota,propinsi) tampil
CLAUSES
ibu_kota("Surabaya","Jawa Timur").
ibu_kota("Semarang","Jawa Tengah).
ibu_kota("Bandung","Jawa Barat").
ibut_kota("Palembang","Sumatera Selatan").
tampil :-
ibu_kota(Kota,Propinsi),
write(Kota," adalah ibu kota ",Propinsi,"\n"), fail.
Edit, kompilasi dan eksekusilah program tersebut serta cobalah beberapa goal yang mungkin!
b. Buatlah program berikut yang merupakan penggunaan dari predikat cut!
/* Program Penggunaan Predikat cut */
DOMAINS
kota, propinsi = string PREDICATES
ibu_kota(kota,propinsi) tampil
cek(kota) CLAUSES
ibu_kota("Surabaya","Jawa Timur").
ibu_kota("Semarang","Jawa Tengah).
ibu_kota("Bandung","Jawa Barat").
ibut_kota("Palembang","Sumatera Selatan").
tampil :-
ibu_kota(Kota,Propinsi),
write(Kota," adalah ibu kota ",Propinsi,"\n"), fail.
tampil.
cek("Semarang") :-!, fail.
cek(_).
Edit, kompilasi dan eksekusilah program tersebut serta cobalah beberapa goal yang mungkin!
5. TUGAS
a. Buatlah program penggunaan predikat dan cut pada latihan dengan menemptakan GOAL di dalam program (goal internal)!
b. Tambahkan pada program tersebut beberapa fakta lainnya!
MODUL IX
PENGENDALIAN ALUR (REKURSI)
1. TUJUAN:
Setelah mengikuti praktikum ini mahasiswa diharapkan dapat membuat program rekursi.
2. MATERI Rekursi Rekursi Ekor
Cara mengatasi masalah pada rekursi Penggunaan Variabel pada rekursi Predikat Repeat
3. TEORI 3.1 Rekursi
Dalam bahasa komputer prosedural (Basic, Pascal atau C), rekursi adalah suatu prosedur yang mengandung prosedur itu sendiri. Dalam Turbo Prolog 2.0 didefinisikan sebagai suatu klausa yang salah satu subgoalnya adalah klausa itu sendiri.
Misalkan program untuk menghitung faktorial suatu bilangan (dalam matematika, faktorial dilambangkan dengan !).
1 ! = 1
3 ! = 3 x 2 x 1 = 6 5 ! = 5 x 4 x 3 x 2 x 1 = 120
Faktorial dari bilangan N dapat dirumuskan sebagai:
Bila N adalah 1, maka faktorialnya sama dengan 1.
Bila Tidak, carilah faktorial dari N-1 dan kemudian kalikan dengan N.
Perumusan untuk mendapatkan nilai faktorial suatu bilangan dituliskan sebagai berikut:
/* Contoh program faktorial dengan menggunakan rekursi */
DOMAINS
angka = integer hasil = real PREDICATES
faktorial(angka,hasil) CLAUSES
faktorial(1,1) :-!.
faktorial(X,FaktY) :- Y = X - 1,
faktorial(Y,FaktY), FaktX = X * FaktY.
Bila dimasukkan:
GOAL: faktorial(3,Hasil)
Berarti nilai X = 3 dan faktorial akan memanggil dirinya sendiri dengan X = 2. Bila nilai X telah mencapai 1, maka klausa yang pertama menjadi benar sehingga:
Faktorial(Y,FaktY) - faktorial(1,1) Dan eksekusi dilanjutkan pada subgoal
FaktX = X * FaktY.
Setelah didapatkan hasil faktorial(1,1), maka berarti nilai FaktY = 1, dan Turbo prolog 2.0 memanggil nilai X sebelumnya yaitu X = 2 sehingga:
FaktX = 3 * 2 = 6
Karena tidak ada lagi nilai X yang disimpan di stack frame maka nilai 6 diteruskan ke variabel Hasil.
3.2. Rekursi Ekor
Metode rekursi memiliki suatu kelemahan, yaitu menghabiskan banyak lokasi memori untuk menyimpan stack frame, apalagi bila rekursi harus dilakukan banyak sekali.
Memori komputer hanya dapat menampung paling banyak 4000 stack frame. Itu berarti hanya dapat menampung paling banyak 4000 kali pengulangan.
Untuk mengatasi masalah ini, digunakan metode rekursi ekor (tail recursion). Pada rekursi ekor, tidak diperlukan lagi penyimpanan informasi di stack frame karena pada waktu memanggil dirinya sendiri, informasi tersebut telah diikutsertakan juga dalam bentuk variabel.
Syarat penggunaan metode rekursi ekor:
Subgoal yang memanggil dirinya sendiri diletakkan pada bagian akhir klausa tersebut.
Tidak ada titik runut balik di dalam klausa tersebut.
Berikut ini adalah program untuk menghasilkan deret dengan pertambahan 1.
DOMAINS
angka = integer PREDICATES
deret(angka)
CLAUSES deret(N) :-
write(N," "), NN = N + 1, deret(NN).
Ada beberapa hal yang menyebabkan rekursi ekor tidak akan terjadi, yaitu:
a. Bila subgoal yang memanggil dirinya sendiri tidak terletak di bagian akhir.
Contoh : deret(N) :-
write(N," "), NN = N + 1, deret(NN), nl.
b. Bila masih ada klausa yang sama lainnya belum dicoba pada saat rekursi terjadi (terdapat titik runut balik).
Contoh : deret2(N) :-
write(N," "), NN = N + 1, deret2(NN).
deret2(N) :- N < 0,
Write(“ N adalah bilangan negatif”).
c. Bila di dalam klausa tersebut terdapat subgoal yang mempunyai beberapa alternatif jawaban (yang memungkinkan terjadinya runut balik).
deret3(N) :-
write(N," "), NN = N + 1, Cek(NN), Deret3(NN).
cek(X) :- X >= 0 cek(X):- X < 0
3.3 Cara Mengatasi Masalah Pada Rekursi Ekor.
Masalah yang terjadi pada rekursi ekor yang menyebabkan tidak terjadinya rekursi ekor dapat diatasi dengan menggunakan predikat cut (!). Predikat cut menyebabkan Turbo Prolog 2.0 tidak dapat melakukan runut balik ke subgoal sebelumnya.
Dengan demikian Turbo Prolog 2.0 sudah tidak melihat adanya kemungkinan lain yang dapat dicoba sehingga rekursi yang terjadi benar-benar merupakan rekursi ekor yang tidak menghabiskan memori.
Contoh program deret3 dapat diperbaiki dengan menambahkan predikat cut.
deret3(N) :-
write(N," "), NN = N + 1, Cek(NN),!, Deret3(NN).
cek(X) :- X >= 0 cek(X):- X < 0
Begitu pula program deret2 dapat diperbaiki dengan menambahkan predikat cut.
deret2(N) :- N >= 0,!, write(N," "), NN = N + 1, deret2(NN).
deret2(N) :-
Write(“ N adalah bilangan negatif”).
Sedangkan pada contoh program deret1 tidak dapat diperbaiki lagi sehingga satu-satunya cara adalah dengan mengubah susunan program tersebut sehingga predikat yang memanggil dirinya sendiri berada pada paling akhir klausa tersebut.
3.4 Penggunaan Variabel pada Rekursi
Perhatikan contoh program deret, dalam contoh tersebut digunakan variabel baru NN.
Lain halnya dalam bahasa bersifat prosedural, pernyataan tersebut dapat dituliskan dengan :
N = N + 1
Dimana nilai N yang sama digantikan dengan nilai N yang baru. Dalam Turbo Prolog 2.0 hal ini tidak dapat diperkenankan karena selama suatu variabel masih terikat dengan nilai tertentu, maka variabel tersebut tidak bisa digunakan untuk memuat nilai yang lain dan operasinya hanya bersifat pemadanan.
4. LATIHAN
Edit, Kompilasi dan eksekusi program deret dengan menggunakan rekursi ekor berikut:
/* Program deret menggunakan rekursi ekor */
DOMAINS
angka = integer PREDICATES
deret(angka,angka,angka) GOAL
makewindow(1,13,9,"REKURSI",5,10,15,60),
write(" Program ini akan menghasilkan deret hitung \n"), write("\n Angka awal : "),readint(Awal),
write("\n Angka akhir : "),readint(Akhir), write("\n Selang : "),readint(Selang), write("\n\n"),
deret(Awal,AKhir,Selang).
CLAUSES
deret(AKhir,AKhir,_).
deret(Awal,Akhir,Selang) :- write(Awal," "), Bil = Awal + Selang, deret(Bil,AKhir,Selang).
5. TUGAS
Buatlah program faktorial dengan menggunakan rekursi ekor!
MODUL X PREDIKAT REPEAT 1. TUJUAN:
Setelah mengikuti praktikum ini mahasiswa diharapkan dapat membuat program menggunakan predikat Repeat.
2. MATERI Predikat Repeat 3. TEORI
Predikat repeat digunakan untuk memaksa program agar mencari kemungkinan jawaban yang lain melalui runut balik. Predikat repeat bukanlah predikat jadi sehingga bila kita akan menggunkannya, kita harus mendefinisikanny di dalam program dan kita bisa menggunakan kata sembarang, misalnya ulang,
repeat.
repeat :- repeat.
Dengan struktur seperti diatas, program akan selalu mencatat adanya titik runut balik pada klausa tersebut.
Predikat repeat selalu benar. Bila salah satu subgoal dalam suatu klausa yang mengandung predikat repeat mendapatkan kondisi gagal, maka program akan selalu melakukan runut balik ke predikat repeat, setelah runut balik ke subgoal sesudahnya telah selesai dilakukan. Dengan menggunakan predikat repeat, program kita bisa berulang tanpa batas dan biasanya digunakan dalam program yang alurnya selalu kembali ke menu utama.
Sebagai gambaran, bandingkanlah dua program logon pada Latihan sehingga Anda dapat mengerti penggunaan predikat repeat.
4. LATIHAN
Bandingkan dua program logon dibawah ini, dalam program logon ini Anda diminta untuk menuliskan nama Anda dan kata sandi (password). Bila kata sandi yang Anda tuliskan cocok dengan yang sudah dicantumkan dalam program, maka Anda boleh meneruskan ke bagian program berikutnya!
1. Tidak menggunakan predikat repeat:
/* Program Logon */
DOMAINS
nama,password = symbol
PREDICATES logon
masukkan_nama(nama,password) pemakai(nama,password)
GOAL logon.
CLAUSE
pemakai(anto,bodor).
pemakai(nano,superman).
pemakai(toto,aneh).
logon :-
makewindow(1,13,2,"LOGON",5,10,10,60), clearwindow,
masukkan_nama(_,_),
write("Anda diperkenankan menggunakan komputer ini") logon :-
write("Maaf, password anda tidak tidak termasuk dalam \n"), write("daftar pemakai komputer ini").
masukkan_nama(Nama,Password) :-
write("Masukkan Nama Anda = "),readln(Nama),nl, write("Masukkan Password Anda = "),readln(Password), pemakai(Nama,Password).
2. Menggunajan repeat:
/* Program Logon menggunakan predikat repeat */
DOMAINS
nama,password = symbol PREDICATES
logon
masukkan_nama(nama,password) pemakai(nama,password)
repeat GOAL
logon.
CLAUSE
pemakai(anto,bodor).
pemakai(nano,superman).
pemakai(toto,aneh).
logon :-
makewindow(1,13,2,"LOGON",5,10,10,60), clearwindow,
masukkan_nama(_,_),
write("Anda diperkenankan menggunakan komputer ini").
logon :-
write("Maaf, password anda tidak tidak termasuk dalam \n"), write("daftar pemakai komputer ini \n"),
write("Silahkan Mencoba lagi \n\n"), masukkan_nama(_,_),
write("Anda diperkenankan menggunakan komputer ini").
masukkan_nama(Nama,Password) :-
write("Masukkan Nama Anda = "),readln(Nama),nl, write("Masukkan Password Anda = "),readln(Password), pemakai(Nama,Password).
repeat.
repeat :- repeat.
5. TUGAS
Buatlah program logon tersebut diatas dengan menggunakan metoda rekursi!
MODUL XI STRUKTUR DATA
(OBYEK TUNGGAL DAN OBYEK MAJEMUK) 1. TUJUAN :
Setelah mengikuti praktikum ini mahasiswa diharapkan dapat menggunakan obyek tunggal dan obyek majemuk dalam prolog.
2. MATERI Obyek Tunggal Obyek Majemuk 3. TEORI
3.1 Obyek Tunggal
Obyek tunggal terdiri dari Variabel dan Konstanta.
3.1.1 Variabel
Penulisan nama variabel harus didahului dengan huruf besar (A-Z) atau garis bawah (_). Variabel yang hanya terdiri dari garis bawah menyatakan variabel tak bernama, yang berarti kita dapat tidak menghiraukan nilai variabel tersebut.
3.1.2 Konstanta
Konstanta terdiri dari karakter, bilangan dan atom. Nilai dari data tersebut sama dengan yang tertulis. Jadi konstanta 5 menyatakan bilangan 5, konstanta apa saja menyatakan simbol apa saja.
a. Karakter
Karakter mempunyai jenis char, yang terdiri dari karakter ASCII yang dapat dicetak ataupun yang tidak dapat. Karakter yang dapat dicetak adalah ASCII 20H – FFH yang terdiri dari bilangan 0-9, huruf besar A-Z, huruf kecil a-z, tanda baca dan karakter khusus (ASCII 80H – FFH).
Ada 2 cara menyatakan suatu konstanta:
Dengan menuliskan secara langsung:
„a‟ „A‟
„@‟ „[„
„1‟ „J‟
Dengan didahului karakter escape (\):
Bila kita ingin menyatakan karakter yang sudah mempunyai arti (digunakan) oleh Turbo Prolog 2.0, misalnya:
„\”‟ : tanda petik ganda
„\\‟ : garis miring balik
„\‟‟ : tanda petik tunggal
b. Bilangan
Ada 2 jenis data yang menyatakan bilangan yaitu integer(bilangan bulat) dan real (bilangan nyata). Bilangan integer dapat menyatakan bilangan antara - 32.768 sampai +32.767 sedangkan bilangan real dapat menyatakan bilangan antara + 1.E-308 sampai + 1.E+308 (10-308sampai 10308).
c. Atom
Ada 2 jenis data yang menyatakan atom, yaitu symbol dan string. Kedua jenis data ini dapat saling dipertukarkan. Artinya, Anda dapat menuliskan sebagai atom symbol untuk domains string dan sebaliknya Anda dapat menuliskan sebagai atom string untuk domains symbol.
Perbedaan antara symbol dan string adalah:
Symbol diawali dengan huruf kecil dan hanya terdiri dari satu kumpulan karakter, contoh:
Saya, a, makanan_kecil, kota_surabaya
String diapit oleh tanda petik ganda dan dapat berisi karakter apa saja, contoh:
“Kota Surabaya”, “Saya”, “Jl. Serayu No. 20”
3.2 Obyek Majemuk
Dalam obyek data majemuk, Anda dapat menyatakan beberapa informasi data sebagai suatu data tunggal. Misalnya, Anda ingin menyatakan data tanggal 10 Nopember 2005.
Hal ini dapat dituliskan sebagai:
tanggal(10,”Nopember”,2005)
Bagian depan obyek majemuk adalah nama obyek tersebut dan disebut functor sedangkan bagian-bagiannya disebut argumen. Functor tidak mencerminkan suatu operasi tertentu tetapi hanya sekedar sebuah nama.
Argumen suatu obyek data majemuk dapat merupakan obyek majemuk pula tanpa suatu batasan sehingga struktur obyek data majemuk mirip dengan struktur pohon yang dapat bercabang-cabang. Misalnya, sebuah data pribadi yang terdiri dari nama, alamat, tanggal lahir dan pekerjaan dapat dituliskan sebagai:
data_pribadi(nama,alamat,tgl_lahir,pekerjaan)
Dengan alamat dan tgl_lahir merupakan obyek data majemum juga.
alamat = alamat(jalan,kota,kode_pos) tgl_lahir = tgl_lahir(tanggal,bulan,tahun)
Argumen obyek majemuk tidak harus mempunyai jenis data yang sama. Misalkan, tanggal didefinisikan sebagai integer, bulan sebagai string, dan lain-lain.
3.2.1 Unifikasi pada Obyek Data Majemuk
Dalam proses unifikasi, obyek majemuk dapat berpadanan dengan variable tunggal atau dengan obyek majemuk. Misalnya:
tanggal(10,”Nopember”,2005)
berpadanan dengan variable bebas X, maka variable X akan terikat dengan nilai tanggal(10,”Nopember”,2005). Ini berarti Anda dapat mengganggap suatu obyek data majemuk sebagai suatu obyek data tunggal. Bila data di atas berpadanan dengan:
tanggal(Tanggal,Bulan,Tahun)
maka variable Tanggal akan terikat dengan 10, Bulan dengan “Nopember”, Tahun dengan 2005 tanpa menyertakan functor data tersebut. Ini berarti Anda mengambil bagian-bagian obyek data majemuk tersebut secara terpisah.
Syarat suatu obyek data majemuk dapat berpadanan dengan obyek data majemuk yang lain adalah nama functor dan jumlah argument harus tepat sama. Misalnya:
Alamat(“Jl. Banteng 10”,”Jakarta”,”10110”) Tidak akan berpadanan dengan:
Alamat(Jalan,Kota)
3.2.2 Menyatakan Domain Obyek Data Majemuk
Sama halnya seperti onyek data tunggal, dalam program, obyek data majemuk juga harus dinyatakan di bagian DOMAINS. Yang dituliskan pada bagian ini adalah semua argument baik argument yang berupa data majemuk maupun argumen yang merupakan data tunggal. Misalnya:
data_pribadi(nama,alamat,tgl_lahir,pekerjaan)
nama, alamat, tgl_lahir dan pekerjaan harus dituliskan dalam bagian DOMAINS.
Karena alamat dan tgl_lahir merupakan obyek majemuk, maka argumen- argumennya juga harus dinyatakan.
DOMAINS
alamat = alamat(jalan,kota,kode_pos) tgl_lahir = tgl_lahir(tanggal,bulan,tahun) tanggal,tahun = integer
nama,jalan,kota,kode_pos,bulan,pekerjaan = string
3.2.3 Deklarasi Domain Majemuk
Argumen sebuah predikat mungkin mempunyai domain yang berbeda. Untuk ini, Anda tidak bisa menyatakan domain tersebut secara langsung berupa domain standar(integer, char atau string) tetapi harus melalui functor.
Misalkan, argument sebuah predikat yang menyatakan harga barang dapat mempunyai domain integer, real atau string. Ketiga macam domain tersebut harus dideklarasi untuk masing-masing predikat dengan domain yang berbeda.
4. LATIHAN DOMAINS
alamat = alamat(jalan,kota,kode_pos) tgl_lahir = tgl_lahir(tanggal,bulan,tahun) tanggal, tahun = integer
nama,jalan,kota,kode_pos,bulan,pekerjaan = string PREDICATES
data_pribadi(nama,alamat,tgl_lahir,pekerjaan) CLAUSES
data_pribadi("Andi",alamat("Jl. Singosari 101","Bandung","40113"), tgl_lahir(20,"Oktober",1980),"Mahasiswa").
data_pribadi("Amran",alamat("Jl. Gajahmada 123","Palembang","30123"), tgl_lahir(27,"Maret",1981),"Sekretaris").
--- Tambahkan fakta-fakta sebanyak 10 data ---
Editlah program berikut di atas dan cobalah beberapa Goal berikut ini serta perhatikan penggunaan variable tak bernama!
Tampilkan data pribadi seseorang (misalnya Andi)!
Siapakah yang tinggal di kota tertentu (misalnya Bandung)!
Sipa dan dimana alamat orang-orang yang lahir pada bulan tertentu (misalnya bulan Januari)!
Sipakah yang tinggal di Kota X dan mempunyai pekerjaan sebagai Y!
5. TUGAS
Lengkapilah program data pribadi berikut dengan fakta-fakta dan aturan-aturan!
DOMAINS
alamat = alamat(jalan,kota,kode_pos)
tgl_lahir = tgl_lahir(tanggal,bulan,tahun) tanggal, tahun = integer
nama,jalan,kota,kode_pos,bulan,pekerjaan = string lama = real
PREDICATES
data_pribadi(nama,alamat,tgl_lahir,pekerjaan) lama_tinggal(nama,lama)
penduduk(nama,alamat) menu(nomer)
pilihan(nomer)
GOAL
menu(Nomer), pilihan(Nomer).
CLAUSES
data_pribadi("Andi",alamat("Jl. Singosari 101","Bandung","40113"), tgl_lahir(20,"Oktober",1980),"Mahasiswa").
data_pribadi("Amran",alamat("Jl. Gajahmada 123","Palembang","30123"), tgl_lahir(27,"Maret",1981),"Sekretaris").
………
………
/* Lama tinggal dalam tahun */
………..
………..
/* Seseorang dikatakan menjadi penduduk, apabila sudah tinggal di kota tersebut lebih dari 2 tahun */
………..
………..
menu(Nomer) :-
makewindow(1,13,1,”DATA PRIBADI”,3,0,20,80), write(“1. Data pribadi semua orang \n”),
write(“2. Data orang yang tinggal di kota tertentu \n”),
write(“3. Data orang yang mempunyai pekerjaan tertentu”),nl, write(“4. Data orang yang telah menjadi penduduk \n\n”), write(„Masukkan pilihan anda (1,2,3,4) : “),
readint(Nomer).
Pilihan ……….
……….
……….
MODUL XII STRUKTUR DATA
( LIST ) 1. TUJUAN:
Setelah mengikuti praktikum ini mahasiswa diharapkan dapat menggunakan list dalam Turbo Prolog 2.0.
2. MATERI List
Menyatakan List Operasi List 3. TEORI
List adalah kumpulan data yang terurut dan jumlahnya tak tentu. List mirip dengan array pada bahasa Pascal atau C, tapi perbedaannya, jumlah data pada array tertentu sedangkan pada list tak tentu. List dituliskan dengan kurung siku dan tiap anggotanya dipisahkan dengan koma. Misalkan list yang terdiri dari angka 1, 2 dan 3 dituliskan:
[1,2,3]
Anggota list disebut elemen dan elemen suatu list dapat merupakan list yang lain.
List terdiri atas kepala(“head”) dan ekor(“tail”). Kepala merupakan elemen pertama dari list sedangkan ekor adalah list sisanya. Jadi sebenarnya, list adalah suatu obyek majemuk yang bersifat rekursif (pengulangan). Oleh sebab itu, list selalu dioperasikan dengan metode rekursi.
Sebagai contoh:
Kepala dari [1,2,3] adalah 1 Ekor dari [1,2,3] adalah [2,3]
Misalkan sebuah list yang hanya terdiri dari 1 elemen:
Kepala dari [a] adalah a
Ekor dari [a] adalah [] (list kosong) 3.1 Menyatakan List
List harus dinyatakan dalam bagian DOMAINS dan dituliskan dengan tanda bintang (*).
DOMAINS
list_angka = integer*
Domain di atas menyatakan suatu list yang elemennya terdiri dari bilangan bulat.
Untuk menyatakan suatu list yang elemen-elemennya terdiri dari list yang lain, misalkan:
[[1,2],[3,4,5],[6,7,8,9]]
DOMAINS
list_angka = integer*
list_total = list_angka*
List tidak dapat berdiri sendiri tetapi merupakan bagian dari data yang lain atau setingkat dengan data tunggal dan data majemuk.
3.2 Operasi List
a. Menuliskan Elemen List Perumusan:
Untuk menuliskan elemen suatu list, tuliskan kepalanya (sebagai elemen tunggal) kemudian tuliskan ekornya(berupa list yang lain).
Contoh:
tulis_list([]) :-!.
tulis_list([K:E]) :- /*K : kepala, E : ekor */
write(K), nl,
tulis_list(E).
b. Menghitung Jumlah Elemen Perumusan:
Jumlah elemen dari [] sama dengan 0. Jumlah elemen suatu list sama dengan 1 ditambah jumlah elemen ekornya.
Contoh:
cacah([],0) :-!.
cacah([_:E],Cacahan) :-
cacah(E,Cacah_Ekor),
Cacahan = Cacah_Ekor + 1.
c. Keanggotaan Suatu List
Aturan digunakan untuk memeriksa apakah suatu konstanta (bilangan,karakter atau atom) terdapat dalam suatu list.
Perumusan:
Suatu Nama adalah anggota dari list:
Bila Nama merupakan kepala dari list tersebut.
Atau Nama adalah anggota dari list tersebut.
Contoh:
anggota(Nama,[Nama:_]).
anggota(Nama,[_:Ekor]) :-
Anggota(Nama,Ekor).
d. Gabungan Dua Buah List Perumusan:
List3 adalah gabungan dari List1 dan List2:
Bila List1 kosong maka List3 sama dengan List2.
Bila tidak ada list kosong, maka Anda dapat membentuk List3 dengan cara menjadikan kepala List1 sebagai Kepala List3 dan ekor List3 merupakan gabungan dari ekor List1 dan List2.
Contoh:
gabung([],L,L).
gabung([X:L1],L2,[X:L3] :-
gabung(L1,L2,L3).
e. Mencari Elemen ke N dalam Suatu List Perumusan:
Bila N = 1, maka Elemen tersebut sama dengan Kepala List tersebut.
Bila tidak, ambillah sejumlah N-1 elemen terdepan, maka Kepala list sisanya adalah elemen yang dicari.
Contoh:
CLAUSES
elemen_n([Kepala:_],1,Kepala) :-!.
elemen_n([_:Ekor],N,Nama) :- NN = N – 1,
elemen_n(Ekor,NN,Nama).
f. Membalik Urutan Elemen Suatu List Perumusan:
Letakkan Kepala ditempat Ekor List yang dibalik hingga elemen yang terakhir.
Contoh:
CLAUSES
list_balik(Awal,Hasil) :-
balik(Awal,[],Hasil).
balik([],Hasil,Hasil) :-!
balik([Kepala:Ekor],List,Hasil) :- balik(Ekor,[Kepala:List],Hasil).
3.3 Mendapatkan Semua Solusi Sekaligus
Misalkan terdapat data pribadi yang berisi data umur. Kemudian Anda ingin menghitung umur rata-rata dari orang-orang tersebut. Anda tidak dapat melakukan dengan cara sebagai berikut:
Ambil data umur.
Jumlahkan dengan jumlah umur sebelumnya.
Lakukan rekursi ekor ke ambil data umur.
Bila semua data sudah dihitung, keluar dari klausa.
Karena dalam melakukan rekursi ekor, tidak boleh ada titik runut balik di dalamnya.
Cara yang bias ditempuh adalah dengan mengumpulkan semua data umur menjadi satu terlebih dahulu menjadi sebuah data tunggal dalam bentuk list kemudian baru dihitung nilai rata-ratanya.
Turbo Prolog 2.0 dilengkapi dengan predikat jadi findall untuk melakukan hal di atas dan mempunyai format:
findall(NamaVariabel,<predikat>,ListHasil) dimana:
Nama variable menyatakan argument mana dalam predikat tersebut yang hasilnya dikumpulkan.
<predikat> menyatakan predikat yang data-datanya akan dikumpulkan.
Argumen yang tidak diperlukan dapat dituliskan dengan menggunakan variable tak bernama.
ListHasil adalah variable tempat menyimpan nilai-nilai yang telah dikumpulkan melalui runut balik.
3.4 List Majemuk
Seperti yang telah dijelaskan bahwa elemen-elemen dalam suatu list haruslah mempunyai jenis data yang sama. Misalkan: [1,3,6.5,”Anda”] merupakan pernyataan yang salah.
Tetapi dengan cara khusus masih dapat menangani list yang mempunyai elemen dengan jenis data yang berbeda-beda (list majemuk). Caranya yaitu dengan menggunakan functor karena domains dapat mengandung lebih dari satu jenis data sebagai argument terhadap functor.
Contoh berikut bagaimana menyatakan domain dari suatu list yang dapat terdiri dari integer, symbol,karakter,string atau list yang lain dengan jenis data yang bermacam- macam pula.
DOMAINS
elemen = s(symbol);i(integer);c(char);t(string);](list)
list = elemen*
4. LATIHAN
Editlah program berikut dan cobalah beberapa Goal ! 1. Menuliskan elemen suatu list:
DOMAINS
list = integer*
PREDICATES tulis_list(list) CLAUSES
tulis_list([]) :-!.
tulis_list([K:E]) :- /*K : kepala, E : ekor */
write(K), nl,
tulis_list(E).
2. Menghitung jumlah elemen:
DOMAINS
list = integer*
cacahan = integer PREDICATES
cacah(list,cacahan) CLAUSES
cacah([],0) :-!.
cacah([_:E],Cacahan) :-
cacah(E,Cacah_Ekor),
Cacahan = Cacah_Ekor + 1.
3. Keanggotaan suatu list:
DOMAINS
nama = string list_nama = nama*
PREDICATES
anggota(nama,list_nama) CLAUSES
anggota(Nama,[Nama:_]).
anggota(Nama,[_:Ekor]) :-
Anggota(Nama,Ekor).
4. Gabungan dua buah list:
DOMAINS
List_integer = integer*
PREDICATES
Gabung(list_integer,list_integer,list_integer) CLAUSES
gabung([],L,L).
gabung([X:L1],L2,[X:L3] :-
gabung(L1,L2,L3).
5. Mencari elemen ke N dalam suatu list:
DOMAINS
Nama = symbol List_nama = nama*
Nomer = integer PREDICATES
Elemen_n(list_nama,nomer,nama) CLAUSES
elemen_n([Kepala:_],1,Kepala) :-!.
elemen_n([_:Ekor],N,Nama) :- NN = N – 1,
elemen_n(Ekor,NN,Nama).
6. Membalik urutan elemen suatu list:
DOMAINS
Angka = integer List_angka = angka*
PREDICATES
List_balik(list_angka,list_angka) Balik(list_angka,list_angka,list_angka) CLAUSES
list_balik(Awal,Hasil) :- balik(Awal,[],Hasil).
balik([],Hasil,Hasil) :-!
balik([Kepala:Ekor],List,Hasil) :- balik(Ekor,[Kepala:List],Hasil).
7. Mendapatkan semua solusi sekaligus:
DOMAINS
jml,umur = integer list_umur = integer*
nama = string PREDICATES
data(nama,umur)
jumlah(list_umur,jml,jml) GOAL
findall(Umur,data(_,Umur),ListUmur, jumlah(ListUmur,Jml,N),
Rata_rata = Jml/N,
write("Umur rata-rata = ",Rata_rata).
CLAUSES
data("Bonce",18).
data("Donny",20).
data("Adi",21).
data("Dono",220).
jumlah([],0,0).
jumlah([H:T],Jml,N) :- jumlah(T,Jml1,N1), Jml = H + Jml1, N = 1 + N1.
8. List Majemuk:
DOMAINS
clist = l(list);s(symbol);i(integer);c(char);t(string);
list = clist*
PREDICATES
gabung(list,list,list) GOAL
gabung([s(saya),i(5),c('*'],[t("Anda"),i(10)],Jawaban, write(Jawaban).
CLAUSES
gabung([],L,L).
gabung([X:L1],L2,[X:L3]) :- gabung(L1,L2,L3).
5. TUGAS
Buatlah program dalam Turbo Prolog 2.0 yang menggunakan struktur data list untuk:
a. Menuliskan elemen suatu list b. Menghitung jumlah elemen c. Keanggotaan suatu list d. Gabungan dua buah list
e. Membalik urutan elemen suatu list f. Mendapatkan semua solusi sekaligus g. List Majemuk:
MODUL XIII
STRUKTUR DATA REKURSIF 1. TUJUAN
Setelah mengikuti praktikum ini mahasiswa diharpkan dapat menggunakan struktur data rekursif.
2. MATERI
Membaca Isi Data Tree Membuat Tree
3. TEORI
Pada bagian ini, hanya aturan yang dapat melakukan rekursi. Tetapi sebenarnya data pun dapat bersifat rekursif. Ini berarti, struktur data tersebut mengandung struktur data yang sama dengan dirinya sendiri. Sifat rekursif ini juga dimiliki oleh list yang sudah pernah dipelajari sebelumnya. Struktur data rekursif ini disebut struktur data pohon (tree).
Sebagai bahan pembahasan, digunakan kembali silsilah keluarga berikut ini:
Kalau ditinjau per titik, maka struktur keluarga tersebut dapat dikatakan sebagai berikut:
Titik slamet terdiri dari 2 data yaitu amin dan anang.
Titik amin terdiri dari 2 data yaitu badu dan budi.
Titik anang terdiri dari 2 data yaitu didi dan dadi.
Titik budi, badu, didi dan dadi terdiri dari 0 data.
Struktur data pohon seperti di atas dapat dinyatakan dalam Turbo Prolog sebagai:
DOMAINS
nama = string
datatree = tree(nama,datatree,datatree).
slamet
anang amin
badu budi didi dadi
Dengan deklarasi seperti di atas, terlihat bahwa struktur tree tersebut tidak terbatas.
Padahal ini tidak benar. Titik budi, badu, didi dan dadi tidak mempunyai cabang lagi.
Oleh sebab itu, dalam mendeklarasikan suatu struktur tree harus diberi penutup dengan mendeklarasikan suatu keadaan nol (kosong).
DOMAINS
nama = string
datatree = tree(nama,datatree,datatree);kosong Silsilah keluarga tersebut dapat dituliskan sebagai:
tree(slamet, tree(amin,
tree(budi,kosong,kosong), tree(badu,kosong,kosong)), tree(anang,
tree(didi,kosong,kosong), tree(dadi,kosong,kosong)))
Untuk lebih menghemat tempat, dapat pula dituliskan:
tree(slamet,
tree(amin,tree(budi,kosong,kosong),tree(badu,kosong,kosong)), tree(anang,tree(didi,kosong,kosong),tree(dadi,kosong,kosong))) 3.1 Membaca Isi Data Tree
Salah satu operasi yang sangat sering dilakukan terhadap suatu struktur data adalah membaca data tersebut. Setelah data dibaca, maka data tersebut dapat diolah, misalkan untuk mencari data tertentu, menghapus, mengurutkan, dan lain-lain. Pada struktur data tree, hal ini disebut traversing tree.
Cara yang digunakan adalah:
Bila tree tersebut kosong, jangan mengerjakan sesuatu.
Bila tidak, baca titik(node), kemudian lanjutkan membaca tree sebelah kiri, kemudian tree sebelah kanan. Cara yang digunakan untuk membaca tree sebelah kiri adalah sama dengan membaca tree setingkat diatasnya.
Dalam prolog cara diatas dapat dituliskan sebagai:
baca(kosong).
baca(tree(X,Y,Z)):-
kerjakan sesuatu pada X, baca(Y),
baca(Z).
Cara tersebut disebut dept-first search karena mencari sejauh mungkin (sampai habis) pada satu cabang, kemudian baru melanjutkan ke cabang lain.
a. Membuat Tree
Cara untuk membuat sebuah tree baru dari sebuah data N adalah dengan menambahkan tree kosong di sebelah kiri dan sebelah kanan data tersebut. Hal ini dapat dituliskan dengan:
Membuat_tree(N,tree(N,kosong,kosong)).
Untuk membangun sebuah struktur data tree yang lengkap, maka masing-masing tree tersebut digabungkan. Ada 2 macam penggabungan yaitu penggabungan di sebelah kiri dan di sebelah kanan.
Untuk menggabungkan sebuah tree X di sebelah kiri tree A dapat dituliskan sebagai:
sisip_kiri(X,tree(A,_,B),tree(A,X,B)).
Misalkan, Anda ingin menggabungkan tree yang terdiri dari budi di sebelah kiri tree yang terdiri dari amin untuk membentuk struktur yang baru. Untuk melakukan ini, dapat dituliskan:
sisip_kiri(budi,kosong,kosong), tree(amin,kosong,kosong),T) dan tree T akan berisi:
tree(amin,tree(budi,kosong,kosong),kosong).
Sedangkan untuk menggabungkan sebuah tree Y di sebelah kanan tree A, dapat dituliskan sebagai:
sisip_kanan(Y,tree(A,B,_),tree(A,B,Y)).
Misalkan tree yang mengandung badu digabungkan dengan tree T:
tree(amin,tree(budi,kosong,kosong),tree(badu,kosong,kosong).
4. LATIHAN
Editlah program berikut:
1. Program struktur data tree DOMAINS
nama = symbol
datatree= tree(nama,datatree,datatree); kosong
PREDICATES
cetak_semua_data(datatree) CLAUSES
cetak_semua_data(kosong). /* Bila tidak ada data, stop */
cetak_semua_data(tree(X,Y,Z)) :- write(X),nl,
cetak_semua_data(Y), cetak_semua_data(Z).
GOAL
cetak_semua_data(tree(slamet, tree(amin,
tree(budi,kosong,kosong), tree(badu,kosong,kosong), tree(anang,
tree(didi,kosong,kosong), tree(dadi,kosong,kosong)))).
2. Program membuat struktur data tree DOMAINS
nama = symbol
datatree= tree(nama,datatree,datatree); kosong PREDICATES
membuat_tree(nama,datatree) sisip_kiri(datatree,datatree,datatree) sisip_kanan(datatree,datatree,datatree) CLAUSES
membuat_tree(A,tree(A,kosong,kosong)).
sisip_kiri(X,tree(A,_,B),tree(A,X,B)).
sisip_kanan(Y,tree(A,B,_),tree(A,B,Y)).
GOAL
makewindow(1,7,7,"DATA TREE",0,0,15,00), /* membuat tree dari masing-masing data tunggal */
membuat_tree(budi,Budi), membuat_tree(badu,Badu), membuat_tree(didi,Didi),
membuat_tree(dadi,Dadi), membuat_tree(amin,Amin), membuat_tree(anang,Anang), membuat_tree(slamet,Slamet),
/* menyisipkan tree mulai 1 tingkat dari bawah */
sisip_kiri(Budi,Amin,Amn1), sisip_kanan(Badu,Amn,Amn1), sisip_kiri(Didi,Anang,Ang), sisip_kanan(Dadi,Ang,Ang1), sisip_kiri(Amn1,Slamet,Slm), sisip_kanan(Ang1,Slm,Slm1), write(Slm1).
5. TUGAS
a. Buatlah program dengan untuk mencetak semua data dari gambar silsilah berikut!
b. Buatlah program untuk menyisipkan data pada struktur tree diatas!
Edi
Rudi Joni
Dono Doni Arman Ardi
Eko Badu
danang deni
MODUL XIV SISTEM PAKAR (EXPERT SYSTEM)
Modul 1. Lingkungan Visual Prolog
LABORATORIUM KOMPUTER STMIK KAPUTAMA
1
MODUL I
LINGKUNGAN VISUAL PROLOG (VISUAL PROLOG ENVIRONMENT, VPE)
A. TUJUAN
1. Mengetahui cara memulai program VPE.
2. Dapat membuat program menggunakan jendela editor VPE.
3. Dapat menjalankan dan menguji program pada VPE.
4. Dapat membuka file dari disk.
5. Mengetahui (jika) adanya kesalahan dan di baris mana pada program kesalahan itu terjadi.
B. DASAR TEORI
1. Visual Prolog Environment (VPE)
VPE didesain agar seorang programmer dapat dengan mudah, nyaman dan cepat dalam membangun, menguji dan memodifikasi suatu aplikasi atau program yang ditulis dalam Visual Prolog. VPE memiliki beberapa varian sehingga mendukung untuk digunakan di beberapa platform sistem operasi seperti MS- DOS, MS Windows 3.1, MS Windows 95, MS Windows NT, Win-OS/2, atau OS/2 PM, yang digunakan pada platform prosesor 16 bit ataupun prosesor 32 bit dari keluarga prosesor Intel 80x86 ataupun kompatibelnya seperti prosesor AMD.
Pengguna VPE diasumsikan mempunyai pengalaman dan pengetahuan dalam menggunakan sistem GUI (Graphical User Interface), seperti menggunakan menu, menutup, meminimize, memaximize ataupun meresize suatu jendela (window), meloading file dari jendela File Open dialog, mengklik toolbar dan lain-lain. Jika praktikan belum punya pengetahuan ini, praktikan dapat mempelajari dari literatur yang berkaitan dengan sistem operasi terkait, seperti buku cara menggunakan MS Windows 95 atau yang lainnya.
2. Menjalankan VPE
Sebelum menjalankan VPE, tentu saja, diasumsikan program VPE sudah terinstall di komputer yang digunakan. Program instalasi akan membuat sebuah program group yang di dalamnya terdapat icon yang digunakan untuk menjalankan VPE, yaitu dengan cara mengklik icon tersebut. Namun ada banyak cara untuk menjalankan VPE, seperti, dengan menggunakan Windows Explorer, men-double klik file VIP.EXE di direktori BIN\WIN\16 untuk platform 16 bit atau direktori BIN\WIN\32 untuk platform 32 bit yang direktori tersebut terletak di bawah direktori utama VIP.
Jika Visual Prolog telah pernah membuka suatu project (dengan ekstensi .VPR) terakhir kali dan VPE ditutup, maka secara otomatis akan membuka project tersebut ketika VPE dijalankan kembali.
3. Membuka jendela editor (editor window)
Untuk menciptakan jendela editor yang baru, praktikan dapat menggunakan menu perintah File | New. Setelah itu akan muncul jendela editor
Modul 1. Lingkungan Visual Prolog
LABORATORIUM KOMPUTER STMIK KAPUTAMA
2 baru dengan judul “NONAME”. Editor ini layaknya seperti editor teks standar lainnya, seperti NOTEPAD yang dimiliki oleh MS Windows. Praktikan dapat menggunakan tombol kursor (tanda panah atas, bawah, kiri dan kanan) dan mouse untuk menggerakkan kursor seperti layaknya editor lain. Juga editor ini mendukung operasi cut, copy and paste, undo/redo yang diaktifkan dari menu Edit atau melalui penekanan tombol akselerator yang dapat dilihat pada menu Edit.
Untuk lebih mendalami editor ini lebih jauh praktikan dapat membaca dari manual Visual Development Environment (VDE) pada file VDE.DOC di direktori DOC yang terletak di bawah direktori utama VIP.
4. Menjalankan dan menguji suatu program
Untuk mengecek bahwa sistem diset dengan baik, praktikan dapat mencoba mengetikkan teks berikut pada jendela editor:
GOAL write(“Selamat belajar Visual Prolog”),nl.
Baris kode di atas pada Prolog dinamakan GOAL dan baris tersebut telah cukup syarat untuk menjadi program yang bisa dieksekusi. Untuk mengeksekusi GOAL, aktifkan item menu Project | Test Goal, atau cukup dengan menekan tombol akselerator Ctrl+G. Jika sistem terinstall dengan baik, maka di layar akan tampak seperti gambar berikut:
Modul 1. Lingkungan Visual Prolog
LABORATORIUM KOMPUTER STMIK KAPUTAMA
3
Hasil eksekusi akan ditampilkan pada jendela yang berbeda yang harus ditutup sebelum menguji GOAL lainnya. Visual Prolog memperlakukan GOAL sebagai sebuah program yang telah ter-compile, kemudian di-links dan dibangkitkan menjadi suatu bentuk jendela yang dapat dieksekusi (executable).
5. Membuka file dari disk
Contoh-contoh program untuk mendukung manual Language Tutorial Visual Prolog disediakan di direktori /DOC/EXAMPLES pada direktori utama VIP (dengan syarat manual beserta contohnya terinstall pada waktu menginstall Visual Prolog pertama kali). Salah satu file contoh tersebut dapat dibuka dengan menggunakan item menu File | Open atau menekan tombol akselerator F8. Pilih salah satu file (berekstensi .PRO) dan uji GOAL program tersebut dengan menekan tombol Ctrl+G.
6. Melihat dan memperbaiki kesalahan
Jika programmer membuat kesalahan dalam menuliskan kode Visual Prolog, maka VPE akan menampilkan jendela kesalahan (error window) di mana pada jendela tersebut terdapat daftar kesalahan yang dibuat. Programmer dapat men-double klik kesalahan tersebut agar kursor beralih ke posisi di mana kesalahan tersebut dibuat pada baris kode di jendela editor, sehingga dengan lebih cepat kesalahan tersebut dapat diperbaiki. Tampilan jendela kesalahan dapat dilihat pada gambar berikut: