sispakb_tugas1_1404505073
TRANSCRIPT
-
8/18/2019 SispakB_Tugas1_1404505073
1/12
SISTEM PAKAR B
“Tugas 1 : Program LISP (Ganjil) ”
Oleh :
I Wayan Agus Kerta Nugraha
1404505073
Jurusan Teknologi Informasi
Fakultas Teknik
Universitas Udayana
2016
-
8/18/2019 SispakB_Tugas1_1404505073
2/12
BAB I
Definisi LISP
LISP (LISt Processing) dispesifikasikan John McCarthy pada tahun 1950.Mulanya LISP dimaksudkan sebagai model komputasi alternatif berdasarkan teori
fungsi/persamaan rekursif. Bahasa McCarthy berdasarkan makalahnya: "Recursive
functions of symbolic expressions and their computation by machine"
Tujuan McCarthy adalah sebagai berikut:
Menciptakan bahasa untuk komputasi simbolik bukan numerik.
Implementasi model komputasi berdasarkan teori fungsi rekursif.
Menyediakan definisi sintaks dan simantiks bahasa yang bersih.
Mendemonstrasikan secara formal kelengkapan model komputasi ini.
Selain sebagai formalisasi matematika, LISP merupakan bahasa pemrograman
yang praktis. LISP sesuai namanya LISt Processing dirancang untuk menyediakan
kemampuan manipulasi simbol untuk menangani masalah pemrograman yang
melibatkan banyak manipulasi simbolik.
Pada LISP, list adalah basis program dan struktur data. LISP menyediakan
fungsi-fungsi penanganan list yang diimplementasikan secara internal sebagai
struktur pointer berkait. Program dapat menggunakan keampuhan dan generalitas
penuh struktur berkait dengan bebas dari tangungjawab mengelola pointer dan
operasi-operasi pointer secara eksplisit.
Mulanya LISP adalah bahasa yang sangat kecil dan sederhana, yaitu:
Fungsi untuk membentuk dan mengakses list Mendefinisikan fungsi baru
Mendeteksi kesamaan
Evaluasi ekspresi
Kendali Program: Rekursi dan Kondisi tunggal
-
8/18/2019 SispakB_Tugas1_1404505073
3/12
Selain itu, adanya penambahan pada LISP yaitu :
Fungsi untuk penstrukturan data
Kendali program
Aritmatika real dan integer
I/O
Penyuntingan fungsi LISP
Penelusuran eksekusi program.
LISP berkembang menjadi lingkungan yang kaya, ampuh dan praktisuntukmembangun sistem perangkat lunak besar. Pada tahun 1993, DARPA
mengusulkan standarisasi disebut Common LISP.
LISP merupakan bahasa yang memiliki fitur unik. Bahasa LISP menjadi
media yang luar biasa untuk mempelajari bentukan-bentukan pemrograman dan
struktur data serta menghubungkannya ke fitur-fitur bahasa yang mendukungnya.
Fitur paling berarti adalah deskripsi proses di LISP yang disebut procedure
dapat direpresentasikan dan dimanipulasi sebagai data.
Pentingnya hal ini adalah bahwa teknik-teknik perancangan program yang
ampuh yang bergantung pada pengaburan antara data "pasif" dan proses "aktif".
Fleksibilitas LISP dalam menangani prosedur sebagai data membuatnya
menjadi bahasa yang cocok untuk eksplorasi teknik-teknik pengaburan.
Kemampuan merepresentasi prosedur sebagai data juga membuat LISP
merupakan bahasa luar biasa untuk menulis program yang harus memanipulasi
program lain sebagai data seperti interpreter atau kompilator yang mendukung bahasa
pemrograman.
-
8/18/2019 SispakB_Tugas1_1404505073
4/12
BAB II
CONTOH PROGRAM
A. Logika dan Screenshot Aplikasi Sederhana Alur
Misalnya, Andi sedang mengalami masalah pada lambungnya, tapi dia tidak
tahu penyakit apa yang dideritanya. Lalu, Andi pergi ke dokter dan diperiksa. Andi
diperiksa dan ditanya berbagai keluhannya pada lambung, seperti “Apa Andi mual?”,
dsb. Setelah diperiksa, dokter mengindikasi bahwa Andi terkena maag. Dokter
kemudian memberi resep obat dan solusinya.
Dari cerita di atas, bagaimana kalau kita bisa membuat suatu software yang
mampu menggantikan peran dokter dalam hal konsultasi keluhan penyakit perut
Andi? Tentunya akan lebih menghemat biaya untuk ke dokter (bagi Andi), dan dokter
bisa mengehemat waktu periksa. Nah, itulah peran dari expert sistem. Ia akan
menggantikan para ahli untuk memberikan solusi atau klarifikasi layaknya seorang
ahli. Untuk lebih jelasnya, perhatikan contoh alur logika sederhana program indikasi
penyakit maag di bawah
-
8/18/2019 SispakB_Tugas1_1404505073
5/12
Gambar 1. Alur logika program indikasi sakit maag
Penjelasan singkat logika pengindikasiannya:
Pasien akan ditanya, “Apakah Anda sakit perut?”
Jika pasien menjawab ‘ya’, maka logikanya akan berjalan ke sebelah kiri
(lihat gambar).
Jika pasien menjawab ‘tidak’, maka alur logika akan berjalan ke sebelah
kanan.
Pasien akan ditanya lagi, “Apakah Anda mual?”
Jika ‘ya’, maka software akan memberi kesimpulan dari konfirmasinya
terhadap pasien,
dan memunculkan kalimat “Anda menderita sakit maag.”
-
8/18/2019 SispakB_Tugas1_1404505073
6/12
Tabel 1. Alur logika dan kesimpulan dari program indikasi sakit maag
Program indikasi sakit maag di atas itu memang sederhana, tapi sudah
menggambarkan kinerja umum dari expert sistem, yaitu problem solving. Pemecahan
masalah dengan expert sistem juga banyak dipakai di perusahaan untuk memecahkan
masalah dengan mengklarifikasi jawaban dari pertanyaan-pertanyaan seperti contoh
di atas.
Main Menu => Pilihan 1: Pendeteksi Sakit Maag
Gambar 2. Menu Utama
-
8/18/2019 SispakB_Tugas1_1404505073
7/12
Apakah perut Anda sakit? [1] Yes
Gambar 3. Percabangan Pertama
Apakah perut Anda mual? [1] Yes
Gambar 4. Percabangan Kedua
A. Algoritma Dalam LISP
;fungsi untuk mengubah isi variabel menjadi tipe integer
(defun to-integer (var &optional (default 0))
(if (not (equal var nil))
(setf var (or (parse-integer var :junk-allowed t) default))
(setf var default)))
;fungsi untuk membaca prompt
(defun prompt-read (prompt)
(format *query-io* "~a: " prompt)
(force-output *query-io*)
(read-line *query-io*))
;fungsi untuk menampilkan prompt yang mengharuskan input berupa
integer
(defun prompt-integer (prompt &optional (default 0))
(to-integer (prompt-read prompt) default))
-
8/18/2019 SispakB_Tugas1_1404505073
8/12
;fungsi untuk print karakter ke konsol
(defun print-list (list)
(format t "~{~a~%~}" list))
;fungsi looping untuk menampilkan baris kosong(defun print-spacer (space)
(defvar i 0)
(loop for i from 0 to (- space 1)
do (format t "~%")))
;definisi variabel
(defvar *y-maag*)
(defvar *no-maag*)
(defvar *maag-q*)
(defvar *y-maag-q*)
(defvar *no-maag-q*)
(defvar *y-maag-def*)
(defvar *y-maag-def2*)
(defvar *no-maag-def*)(defvar *no-maag-def2*)
(defvar *y-maag-list*)
(defvar *y-maag-list2*)
(defvar *no-maag-list*)
(defvar *no-maag-list2*)
(defvar *id-cf*)
(defvar *id-km*)
(defvar *id-mu*)
(defvar *im-choice*)
(defvar *im-active* 1)
;fungsi untuk memanggil var *y-maag-list*
(defun y-maag-def ()
(print-spacer 2)
(print-list *y-maag-list*)
(print-spacer 4))
;fungsi untuk memanggil var *no-maag-list*
(defun no-maag-def ()
(print-spacer 2)
(print-list *no-maag-list*)
(print-spacer 4))
;fungsi untuk memanggil var *no-maag-list2*
(defun no-maag-def2 ()
(print-spacer 2)
(print-list *no-maag-list2*)(print-spacer 4))
;interface yang ditampilkan di konsol
(defvar *ci-welcome-header*
(list " Mata Kuliah "
" SISTEM BERBASIS PENGETAHUAN "
"
=================================================================
-
8/18/2019 SispakB_Tugas1_1404505073
9/12
="
" "
" Program Pendeteksi Sakit Maag "))
(defvar *ci-welcome-footer*
(list " "
"
=================================================================
=="
" "
" "))
(defvar *ci-i-main-menu*
(list "
=================================================================
="
" || MENU UTAMA ||"
" || Silakan masukkan angka yang sesuai dengan pilihan Anda ||"
" ||-------------------------------------------------------------
--||"
" || 1. Pendeteksi Sakit Maag ||"" ||-------------------------------------------------------------
--||"
" || 9. Kembali ke Menu Utama ||"
" || 0. Keluar ||"
" ||-------------------------------------------------------------
--||"
" || (Bimo A.P/31045)||"
"
=================================================================
="))
;pesan kesimpulan dari tiap percabangan ‘if’
(defvar *y-maag-list*(list "Anda menderita sakit maag."))
(defvar *y-maag-list2*
(list "Perut Anda sakit, tapi tidak sakit maag."))
(defvar *no-maag-list*
(list "Perut Anda mual, tapi tidak sakit maag."))
(defvar *no-maag-list*
(list "Perut Anda mual, tapi tidak sakit maag."))
;notifikasi program
(defvar *ci-imenu-helper*
(list " ----- Silakan masukkan pilihan Anda -----"))
(defvar *ci-imenu-wrong-choice*
(list " ----- Maaf, pilihan Anda salah, mohon coba lagi -----"))
(defvar *ci-imenu-message*
(list " ----- Selamat datang. Silakan masukkan pilihan Anda -----
"))
-
8/18/2019 SispakB_Tugas1_1404505073
10/12
;fungsi untuk memanggil var *ci-welcome-header* dan *ci-welcome-
footer*
(defun welcome ()
(print-spacer 25)
(print-list *ci-welcome-header*)
(print-list *ci-welcome-footer*))
;fungsi quit
(defun quit ()
(SB-EXT:QUIT))
;fungsi percabangan pertama
(defun generate1 ()
(progn
(print-spacer 2)
(print-list (list "==============================="))
(print-list (list "Apakah perut Anda sakit?"))
(print-list (list "Pilih Angka: ([1] Yes / [2] No)"))
(print-list (list "==============================="))
(setq *maag-q* (prompt-integer "Masukkan no. pilihan Anda:")))
(if (equal *maag-q* 1) (y-maag)
(if (equal *maag-q* 2) (no-maag)
(print-list (list "no. yang anda masukkan tidak ada dalam
daftar")))))
;percabangan ketika dijawab ‘yes’
(defun y-maag ()
(progn
(print-spacer 2)
(print-list (list "==============================="))
(print-list (list "Apakah perut Anda mual?"))
(print-list (list "Pilih Angka: ([1] Yes / [2] No)"))
(print-list (list "==============================="))
(setq *y-maag-q* (prompt-integer "Masukkan no. pilihan Anda:")))(if (equal *y-maag-q* 1) (y-maag-def)
(if (equal *y-maag-q* 2) (y-maag-def2)
(print-list (list "no. yang anda masukkan tidak ada dalam
daftar")))))
;percabangan ketika dijawab ‘no’
(defun no-maag ()
(progn
(print-spacer 2)
(print-list (list "==============================="))
(print-list (list "Apakah perut Anda mual?"))
(print-list (list "Pilih Angka: ([1] Yes / [2] No)"))
(print-list (list "==============================="))
(setq *no-maag-q* (prompt-integer "Masukkan no. pilihan Anda:")))(if (equal *no-maag-q* 1) (no-maag-def)
(if (equal *no-maag-q* 2) (no-maag-def2)
(print-list (list "no. yang anda masukkan tidak ada dalam
daftar")))))
;fungsi untuk memilih message yang ditampilkan di bawah menu
(defun imenu-message-selector (menu)
(if (equal *im-choice* 9999)
-
8/18/2019 SispakB_Tugas1_1404505073
11/12
(progn
(print-spacer 25)
(print-list menu)
(print-spacer 1)
(print-list *ci-imenu-wrong-choice*))
(progn
(if (equal *ci-imenu-message* "##MENU-NAV##")
(setf *ci-imenu-message* *ci-imenu-helper*)
(prompt-read "Tekan tombol [ENTER] untuk melanjutkan"))
(print-spacer 25)
(print-list menu)
(print-spacer 1)
(print-list *ci-imenu-message*))))
;fungsi untuk menampilkan menu utama
(defun imenu-main ()
(print-spacer 25)
(print-list *ci-i-main-menu*)
(print-spacer 1)
(print-list *ci-imenu-helper*)(print-spacer 1)
(setq *im-choice* (prompt-integer "Pilihan Anda" 999))
(loop
(cond
((= *im-choice* 0) (quit))
((= *im-choice* 1) (generate1))
((= *im-choice* 2) (generate2))
((= *im-choice* 3) (generate3))
((= *im-choice* 9) (progn (setf *ci-imenu-message* "##MENU-
NAV##") (welcome)
(return)))
(t (setf *im-choice* 9999)))
(print-spacer 1)
(imenu-message-selector *ci-i-main-menu*)(print-spacer 1)
(setf *im-choice* (prompt-integer "Pilihan Anda" 999))))
(if (equal *im-active* 1)
(imenu-main)
(welcome))
-
8/18/2019 SispakB_Tugas1_1404505073
12/12
BAB III
REFERENSI
Buku:
Suyoto, Dr. Intelegensi Buatan, Teori dan Pemrograman. Penerbit Gava Media.
Yogyakarta, 2004.
Situs Web:
http://agro.web.ugm.ac.id/lisp-tutorial.html
http://www.globalkomputer.com/Bahasan/Programming/Produk/LISP.html
http://yosha-05913.blogspot.com/2012/04/bahasa-pemrograman-lisp.html
http://en.wikipedia.org/wiki/Knowledge_base
http://www.globalkomputer.com/Bahasan/Programming/Produk/LISP.htmlhttp://www.globalkomputer.com/Bahasan/Programming/Produk/LISP.htmlhttp://en.wikipedia.org/wiki/Knowledge_basehttp://en.wikipedia.org/wiki/Knowledge_basehttp://www.globalkomputer.com/Bahasan/Programming/Produk/LISP.html