sispakb_tugas1_1404505073

Upload: pemainjav

Post on 07-Jul-2018

213 views

Category:

Documents


0 download

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