Anda di halaman 1dari 11

SISTEM PAKAR

Bahasa Pemrograman List Processing (LISP)

Oleh :
KETUT SULYA ARYA WASIKA

(1404505045)

JURUSAN TEKNOLOGI INFORMASI


FAKULTAS TEKNIK UNIVERSITAS UDAYANA
TAHUN PELAJARAN 2016

BAB I

PENDAHULUAN
1.1

Latar Belakang
1.2 kepentingan
Sistem
pakar
(expert
adalah
software
yang
menggunakan
suatu
masalah
konsultasi
dari
kata
lain,
tersebut.
1.8
memadukan
praktis.
Suatu
jawaban,
sistem
dan
menyimpan
1.14
Pengetahuan
tersebut
kemudian
digunakan
oleh
siapa
saja
yang
memerlukan.
1.15
suatu
tentunya
kerusakan
mereparasi
mesin
1.21
Padahal,
selama
lain.
inisistem)
pabrik
itusoftware
hanya
bergantung
pada
teknisi
itu.
Sistem
pakar
(expert
sistem)
adalah
yang
menggunakan
suatu
basisbasis
pengetahuan

(knowledge base) dari keahlian manusia untuk melakukan pemecahan masalah (problem solving)
atau mengklarifikasikan hal-hal yang tidak pasti di mana perlu konsultasi dari manusia yang ahli
pada bidang yang diklarifikasikan. Dengan kata lain, expert sistem berguna untuk melakukan
klarifikasi dan memberikan solusi terhadap suatu masalah seperti sedang berkonsultasi oleh
seorang pakar/ahli dalam bidang/masalah tersebut. Sistem pakar juga merupakan sebuah teknik
inovatif dalam menangkap dan memadukan pengetahuan yang kekuatannya terletak dalam
memecahkan masalah-masalah praktis. Suatu sistem pakar umumnya dapat menimbulkan suatu
dialog setelah diberikan jawaban, sistem pakar dapat memberikan solusi atau saran. Sistem pakar
dapat mengumpulkan dan menyimpan pengetahuan seorang pakar atau beberapa orang pakar ke
dalam komputer. Pengetahuan tersebut kemudian digunakan oleh siapa saja yang memerlukan.
Sistem pakar pada dasarnya dibuat dan digunakan untuk membantu memecahkan suatu masalah,
tanpa tergantung dari seorang pakar. Kemudian untuk membuat system pakar tersebut
menggunakan bahasa pemrograman salah satunya yaitu bahasa pemrograman List Processing
(LISP) yang akan dapat membantu dalam proses pembuatan.
1.2

Rumusan Masalah
Berdasarkan latar belakang permasalahan diatas, dapat dirumuskan suatu permasalahan

yaitu sebagai berikut.


1.2.1 Apa yang dimaksud dengan bahasa pemrograman LISP?
1.2.2 Bagaimanakah contoh program bahasa pemrograman LISP?
1.2.3 Bagaimanakan output yang dihasilkan?
1.3

Manfaat
Manfaat dari penulisan makalah ini yaitu untuk menambah wawasan pembaca mengenai

bahasa pemrograman LISP beserta contohnya dan output yang dihasilkan.

BAB II
PEMBAHASAN
2.1

Pengertian Bahasa Pemrograman LISP


LISP (LISt Processing) dispesifikasikan John McCarthy pada tahun 1950. Mulanya LISP

dimaksudkan sebagai model komputasi alternatif berdasarkan teori fungsi/persamaan rekursif.


Tujuan McCarthy adalah sebagai berikut untuk menciptakan bahasa untuk komputasi simbolik
bukan numerik, implementasi model komputasi berdasarkan teori fungsi rekursif menyediakan
definisi sintaks dan simantiks bahasa yang bersih dan 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 tangung jawab mengelola pointer dan operasi-operasi pointer
secara eksplisit. LISP berkembang menjadi lingkungan yang kaya, ampuh dan praktis untuk
membangun 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.

2.2

Contoh Pemrograman LISP Dalam Sistem Pakar

Misalnya,
mengalami
Andi
masalah
sedang
pada
lambungnya,
tidak
tahu
tapi
dia
dideritanya.
Lalu,
Andi
pergi
diperiksa.
ke
dokter
Andi
diperiksa
dan
dan
keluhannya
lambung,
seperti
pada
Apa
diperiksa,
Andi
mual?,
dsb.
Setelah
bahwa
Andi
terkena
maag.
memberi
Dokter
resep
kemudian
obat
dan
solusinya.
bagaimana
kalau
kita
bisa
membuat
yang
mampu
suatu
software
dokter
dalam
hal
konsultasi
penyakit
perut
keluhan
Andi?
Tentunya
akan
untuk
Andi),
ke
dan
dokter
dokter
(bagi
bisa
mengehemat
waktu
dari
akan
expert
menggantikan
sistem.
Iapara
ahli
untuk
memberikan
layaknya
Untuk
lebih
seorang
jelasnya,
ahli.
perhatikan
logika
contoh
alur
indikasi
penyakit
maag
di
bawah:
1.

Contoh Pemrograman LISP Dalam Sistem Pakar

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:

Gambar 1. Alur logika program indikasi sakit maag

Program
indikasi
sakit
maag
sederhana,
di
atas
tapi
itusudah
memang
menggambarkan
sistem,
solving.
yaitu
Pemecahan
problem
expert
dipakai
untuk
memecahkan
di
perusahaan
masalah
mengklarifikasi
dengan
pertanyaan
seperti
contoh
di
atas.

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.

2.

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))
;fungsi untuk print karakter ke konsol
(defun print-list (list) (format t "~{~a~%~}" 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 *y-maag-list2*

(defun y-maag-def2 ()
(print-spacer 2)
(print-list *y-maag-list2*)
(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*
(defvar
(listkesimpulan
*ci-i-main-menu*
"
=================================================================="
||"
||---------------------------------------------------------------||"
A.P/31045)||"
=================================================================="))
;pesan
*y-maag-list*
dari
tiap
percabangan
if
menderita
sakit
maag."))
*y-maag-list2*
sakit,
tapi
tidaksakit
sakit
maag."))
*no-maag-list*
"Perut
Anda
mual,
tapi
tidak
maag."))
*no-maag-list2*
"Anda
masih
sehat."))
;notifikasi
*ci-imenu-helper*
program
*ci-imenu-wrong-choice*
*ci-imenu-message*
-----"))
(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
||"
" ||---------------------------------------------------------------||"
;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-list2*
(list "Anda masih sehat."))
;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

welcome
untuk
memanggil
var
*ci-welcome-header*
dan
*ci-welcome-footer*
(print-spacer
*ci-welcome-header*)
25)
(print-list
*ci-welcome-footer*))
quit
(SB-EXT:QUIT))
quit
()
;fungsi
(defun
generate1
percabangan
()
pertama
sakit?"))
*maag-q*
(prompt-integer
(y-maag)
"Masukkan
no.
pilihan
Anda:")))
*maag-q*
2)
(no-maag)
yes
y-maag
()
*y-maag-q*
(prompt-integer
"Masukkan
no.
pilihan
Anda:")))
*y-maag-q*
1)
2)
(y-maag-def)
(y-maag-def2)
;percabangan
no-maag
ketika
()
dijawab
no
(print-spacer
(progn
2)
"Apakah
perut
Anda
mual?"))
"Pilih
"==============================="))
Angka:
([1]
Yes
/
[2]
No)"))
(setq
*no-maag-q*
(prompt-integer
1)
(no-maag-def)
"Masukkan
no.
pilihan
Anda:")))
(if
(print-list
(equal
*no-maag-q*
(list
"no.
2)
yang
(no-maag-def2)
anda
masukkan
tidak
ada
dalam
daftar")))))
(defun
;fungsi
imenu-message-selector
untuk
memilih
message
yang
(menu)
ditampilkan
di
bawah
menu
(if
(equal
*im-choice*
9999)
menu)
25)
(print-spacer
(print-list
*ci-imenu-wrong-choice*))
1)
(progn
(if
(equal
*ci-imenu-message*
"##MENU-NAV##")
(setf
*ci-imenu-message*
*ci-imenu-helper*)

;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
"==============================="))
(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")))))

(list

;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)
(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* "##MENUNAV##") (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))

2.3

Output yang Dihasilkan

1. Main Menu Pilihan 1: Pendeteksi Sakit Maag

2. Apakah perut Anda sakit? [1] Yes

3. Apakah perut Anda mual? [1] Yes

BAB III
PENUTUP
3.1

Kesimpulan
LISP (LISt Processing) digunakan sebagai model komputasi alternatif berdasarkan teori

fungsi/persamaan rekursif. Tujuannya untuk menyediakan definisi sintaks dan simantiks bahasa
yang bersih. Selain sebagai formalisasi matematika, LISP merupakan bahasa pemrograman yang
praktis dirancang untuk menyediakan kemampuan manipulasi simbol untuk menangani masalah
pemrograman yang melibatkan banyak manipulasi simbolik. 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. Dalam kaitannya bahasa pemrograman LIST cocok digunakan dalam mendesain
system pakar sehingga hasil memenuhi tujuan dari system pakar tersebut.

DAFTAR PUSTAKA

https://hendrachristiandika.wordpress.com/2012/04/20/lisp-bahasa-pemrograman/
http://anakjadul.blogspot.co.id/p/program-menggunakan-lisp.html
http://alogoritmapemrograman.blogspot.co.id/
https://hendrachristiandika.wordpress.com/2012/04/20/lisp-bahasa-pemrograman/
http://dokumen.tips/documents/makalah-kecerdasan-buatan-artificial-intelligenceprogram-sederhana-dengan-bahasa-lisp-wwwdigizonekucom.html

Anda mungkin juga menyukai