LAPORAN PRAKTIKUM KECERDASAN BUATAN (LIST)

26
                LAPORAN PRAKTIKUM
KECERDASAN BUATAN
(LIST)








Disusun Oleh :

HERI PURNAMA
125410101
TI 04


UPT LABORATORIUM
Sekolah Tinggi Manajemen Informatika dan Komputer
AKAKOM
Yogyakarta
2013



DARTAR ISI

Judul.………………………………………………………………………………………..       01

Daftar isi..…………………………………………………………………………………        02

Bab 1  : Pendahuluan………………………………………………………….......        03
              A.Tujuan…………………………………………………………………………….       03
                B.Dasar Teori……………………………………………………………………….      03

Bab 2  : Hasil Praktikum………………………………………………….…………       05

Bab 3  : Analisa Hasil Praktikum………………………………………………..       06
              A.Praktikum  1……………………….……………………………………………….………       06
              B.Praktikum  2……………………………..…………………………………………………       07
              C.Praktikum  3……………………..………………………………………………………..        08
              D.Praktikum 4……………………………..………………………………………………….       09


Bab 4  : Kesimpulan…………………………………………………………………         11

Bab 5  : Tugas…………………………………………………………………………..        13









Bab 1
Pendahuluan

A.Tujuan
   Mahasiswa mampu :
1.       Mengerti apa yang dimaksud dengan list dan dapat mengimplementasikannya pada bahasa Prolog.
2.       Memahami konsep head (kepala) dan tail (ekor) pada list.
3.       Dapat memproses list seperti menampilkan list, menghitung jumlah anggota list, keanggotaan list dan menambahkan suatu list ke list yang lain.

B.DASAR TEORI
LIST
Pada Prolog, yang dimaksud dengan list adalah sebuah object yang didalamnya mengandung sejumlah object yang lain (jumlahnya dapat berubah-ubah). List dalam bahasa pemrograman lain bisa disamakan dengan tipe data pointer (C dan Pascal). Berikut ini cara penulisan list pada Prolog.

[ 1, 2, 3 ]    /* list yang mengandung integer 1, 2 dan 3 */
[ kucing, anjing, tikus ] /* list yang terdiri dari 3 buah symbol */
[ “Syarif Musadek”, “Yusida Andriani”, “Diana Putri” ]
   /* list yang terdiri dari 3 buah string */

Untuk mendeklarasikan list yang elemennya bertipe integer dapat dilakukan seperti berikut ini.

DOMAINS
   integerlist = integer*

Tanda asterik (*) berarti domain tersebut merupakan sebuah list. Tanda asterik juga dipakai di bahasa C untuk pendeklarasian tipe data pointer. Pada Pascal pendeklarasian pointer menggunakan tanda ^. Elemen list bisa berupa apapun, termasuk suatu list yang lain, namun semua elemen dari suatu list harus berasal dari domain yang sama.
Ø  Head dan Tail (Kepala dan Ekor)
List terdiri dari 2 bagian yaitu head, yang merupakan elemen pertama dari list dan tail, elemen sisanya. Tail dari list adalah juga merupakan sebuah list, sedangkan head dari list merupakan sebuah elemen. Contoh:

head dari list [a, b, c] adalah a
tail dari list [a, b, c] adalah [b, c]

Bagaimana jika suatu list hanya mempunyai satu elemen?

head dari [c] adalah c
tail dari [c] adalah []

Jika kita selalu mengambil elemen pertama dari suatu list maka pada akhirnya kita akan mendapat sebuah list kosonng (empty list) yang dtulis dengan tanda [ ] (kurung siku buka dan kurung siku tutup). List kosong tidak bisa dipecah lagi menjadi head dan tail.
Prolog juga menyediakan cara untuk secara eksplisit memisahkan antara bagian head dan tail dari suatu list. Pemisah tersebut menggunakan tanda vertical bar ( | ). Contoh:

[a, b, c] ekivalen dengan [a|[b, c]]
          ekivalen juga dengan [a|[b|[c]]]
          dan ekivalen juga dengan [a|[b|[c|[]]]]

Ø  Mencetak elemen list
Berikut ini merupakan program untuk mencetak ke layar setiap elemen dari suatu list.
DOMAINS
  list = integer*

PREDICATES
  cetak_list(list)

CLAUSES
  cetak_list([]).

  cetak_list([H|T]):-
   write(H),nl,
   cetak_list(T).

GOAL
  cetak_list([1,2,3]).

Ø  Menghitung elemen list
Berikut merupakan program untuk menghitung jumlah elemen dari suatu list.
DOMAINS
  list = integer*

PREDICATES
  jumlah_elemen(list,integer,integer)

CLAUSES
  jumlah_elemen([], Hasil, Hasil).
  jumlah_elemen([_|T],Hasil,Pencacah):-
  PencacahBaru = Pencacah + 1,
  jumlah_elemen(T, Hasil, PencacahBaru).

GOAL
  jumlah_elemen([1,2,3],L,0).
Ø  Keanggotaan list
Untuk mengetahui apakah suatu object merupakan anggota dari suatu list dapat digunakan program berikut.
DOMAINS
  listnama = nama*
  nama = symbol

PREDICATES
  nondeterm anggota(nama, listnama)

CLAUSES
  anggota(Nama, [Nama|_]).
  anggota(Nama, [_|Ekor]):-
   anggota(Nama,Ekor).

GOAL
  anggota(susan,[ian,susan,john]).

Ø  Menambahkan suatu list ke list yang lain
Berikut ini merupakan program untuk menambahkan suatu list ke list yang lain.
DOMAINS
  integerlist = integer*

PREDICATES
  tambah(integerlist,integerlist,integerlist)
  
CLAUSES
  tambah([],List,List).
  tambah([H|L1],List2,[H|L3]):-
    tambah(L1,List2,L3).

GOAL
  tambah([1,2,3],[5,6],L).
















Bab 3
Analisa Hasil Praktikum
1.Praktikum 1
    A.Listing
DOMAINS
  list = integer*
Ø  Section domains ini mempunyai manfaat utama yaitu untuk mendeklarasi domain khusus yang digunakan untuk mendeklarasikan struktur data yang tidak didefinisikan oleh standar domain. Dengan mendeklarasikan domain juga dapat mencegah kesalahan logika pada program.Yang mana pada domains ini untuk mendeklarasikan variabel dengan tipe data integer dan tanda (*) asterik untuk menunjukkan bahwa “Domains”tersebut adalah sebuah List .

PREDICATES
  cetak_list(list)
Ø  Pada Section PREDIKAT digunakan untuk mendeklarasikan perintah-perintah yang nanti akan  digunakan dalam section Clauses, seperti :
1.       Predikat cetak_list mempunyai  tipe data yakni Integer.Cetak_list bisa mempunyai tipe data integer karena sudah dideklarasikan pada section Domains.

CLAUSES
  cetak_list([]).

  cetak_list([H|T]):-
                write(H),nl,
                cetak_list(T).
Ø  Pada Section CLAUSES digunakan untuk mendeklarasikan aturan dan fakta. Aturan merupakan suatu konklusi diketahui benar jika satu atau lebih konklusi atau fakta lain ditemukan benar.
·         Pada clausa ini terdapat aturan : Menuliskan angka terlebih dahulu maka akan disimpan pada variabel H kemudian akan dicetak angka yang dimasukkan pada variabel H karena adanya aturan ini : cetak_list([H|T])

GOAL
  cetak_list([1,2,3]).
Ø  Pada Section GOAL ini digunakan untuk memanggil  data atau fakta.Yang mana pada goal yang ini digunakan untuk mencetak atau memanggil data yang telah dimasukkan pada predikat cetak_list yakni angka atau data (1,2,3).

  B.Running
Ø  Pada output diatas terlihat bahwa angka yang dimasukkan pada predikat cetak_data yang akan ditampilkan saja pada outputnya.


2.Praktikum 2
    A.Listing
DOMAINS
  list = integer*
Ø  Section domains ini mempunyai manfaat utama yaitu untuk mendeklarasi domain khusus yang digunakan untuk mendeklarasikan struktur data yang tidak didefinisikan oleh standar domain. Dengan mendeklarasikan domain juga dapat mencegah kesalahan logika pada program.Yang mana pada domains ini untuk mendeklarasikan variabel dengan tipe data integer dan tanda (*) asterik untuk menunjukkan bahwa “Domains”tersebut adalah sebuah List .

PREDICATES
  jumlah_elemen(list,integer,integer)
Ø  Pada Section PREDIKAT digunakan untuk mendeklarasikan perintah-perintah yang nanti akan  digunakan dalam section Clauses, seperti :
1.Predikat jumlah_elemen mempunyai  tiga argument dan masing-masing argument mempunyai tipe data yang berbeda yakni list,integer,dan integer.

CLAUSES
 jumlah_elemen([_|T],Hasil,Pencacah):-
 PencacahBaru = Pencacah + 1,
 jumlah_elemen(T, Hasil, PencacahBaru).
Ø  Pada Section CLAUSES digunakan untuk mendeklarasikan aturan dan fakta. Aturan merupakan suatu konklusi diketahui benar jika satu atau lebih konklusi atau fakta lain ditemukan benar.
·         Pada section klausa jumlah_elemen didapat dari rumus berikut: jumlah_elemen([ ], Hasil, Hasil). Pada variabel PencacahBaru = Pencacah + 1, pencacah merupakan angka 1 kemudian ditambah 1 lagi yaitu angka 2 yang merupakan elemen kedua dari suatu list, hasilnya sudah 2 kemudian ditambah 1 lagi yaitu angka 3 yang merupakan elemen ketiga yang ada dalam suatu list. Maka jumlah elemen yang terdapat dalam program contoh 2 adalah ada 3 elemen, yang dideklarasikan dengan L=3, dimana L merupakan suatu argumen.
  GOAL
  jumlah_elemen([1,2,3],L,0).
Ø  Pada Section GOAL ini digunakan untuk memanggil  data atau fakta.Yang mana pada goal yang ini digunakan untuk program untuk menghitung jumlah elemen dari suatu list yang mana list yang dimasukkan adalah 1,2,3.

  B.Running
Ø  Terlihat pada hasil  outputnya adalah L=3 karena akibat dari peraturan yang telah ditetapkan pada program pada klausa tersebut.




3.Praktikum 3
·         Bila nama ada didalam list
       A.Listing
DOMAINS
  listnama = nama*
  nama = symbol
Ø  Section domains ini mempunyai manfaat utama yaitu untuk mendeklarasi domain khusus yang digunakan untuk mendeklarasikan struktur data yang tidak didefinisikan oleh standar domain. Dengan mendeklarasikan domain juga dapat mencegah kesalahan logika pada program.Yang mana pada domains ini ada dua buah domains yakni listnama dan nama yang mana listnama sama dengan argument nama dan nama mempunyai tipe data symbol.Tanda asterisk(*) menunjukkan bahwa domains tersebut adakah LIST.

PREDICATES
  nondeterm anggota(nama, listnama)
Ø  Pada Section PREDIKAT digunakan untuk mendeklarasikan perintah-perintah yang nanti akan  digunakan dalam section Clauses, yaitu :
1.anggota yang mana predikat anggota mempunyai dua argument yakni nama dan listnama.Pada predikat anggota juga disisipkan kata atau symbol nondeterm yang mana kata tersebut untuk menunjukkan bahwa predikat anggota mempunyai nilai bawaan lebih dari satu nilai.
CLAUSES
  anggota(Nama, [Nama|_]).
  anggota(Nama, [_|Ekor]):-
  anggota(Nama,Ekor).
Ø  Pada Section CLAUSES digunakan untuk mendeklarasikan aturan dan fakta. Aturan merupakan suatu konklusi diketahui benar jika satu atau lebih konklusi atau fakta lain ditemukan benar.
·         Pada klausa ini digunakan untuk mencari suatu nama apakah ada didalam suatu list yang mana list tersebut adalah list dengan nama list anggota.Jika nama terdapat didalam list maka visual prolog akan menjawab “ya” dan bila nama tidak ada dalam list maka visual prolog akan memberi jawaban “no”.

GOAL
  anggota(susan,[ian,susan,john]).
Ø  Pada Section GOAL ini digunakan untuk memanggil  data atau fakta.Yang mana pada goal yang ini digunakan untuk mencari nama susan apakah ada didalam list anggota yang mana nama anggota terdiri dari nama[ian,susan,john].

            B.Running
Ø  Terlihat bahwa hasil pada output tersebut adalah ‘yes’ karena memang nama dengan nama susan terdapat pada list anggota.

·         Bila nama tidak ada didalam list
GOAL
   anggota(herii,[ian,susan,john]).
Ø  Pada Section GOAL ini digunakan untuk memanggil  data atau fakta.Yang mana pada goal yang ini digunakan untuk mencari nama herii apakah ada didalam list anggota yang mana nama anggota terdiri dari nama[ian,susan,john].
A.listing






B.Running
Ø  Terlihat bahwa hasil pada output tersebut adalah ‘no’ karena memang nama dengan nama herii tidak terdapat pada list anggota.

4.Praktikum 4
    A.Listing
DOMAINS
  integerlist = integer*
Ø  Section domains ini mempunyai manfaat utama yaitu untuk mendeklarasi domain khusus yang digunakan untuk mendeklarasikan struktur data yang tidak didefinisikan oleh standar domain. Dengan mendeklarasikan domain juga dapat mencegah kesalahan logika pada program.Yang mana pada domains ini untuk mendeklarasikan variabel dengan tipe data integer dan tanda (*) asterik untuk menunjukkan bahwa “Domains”tersebut adalah sebuah List .

PREDICATES
  tambah(integerlist,integerlist,integerlist)
Ø     Pada Section PREDIKAT digunakan untuk mendeklarasikan perintah-perintah yang nanti akan  digunakan dalam section Clauses, yaitu :
1)      Predikat tambah dengan tiga argument dengan tiga tipe data yang sama yakni integerlist.
CLAUSES
  tambah([],List,List).
  tambah([H|L1],List2,[H|L3]):-
    tambah(L1,List2,L3).
Ø  Pada Section CLAUSES digunakan untuk mendeklarasikan aturan dan fakta. Aturan merupakan suatu konklusi diketahui benar jika satu atau lebih konklusi atau fakta lain ditemukan benar.
·         Aturan tersebut mempunyai aturan angka yang dimasukkan pada list pertama akan ditambahkan

GOAL
                tambah([1, 2], [3], L), tambah(L, L, LL).
Ø  Pada Section GOAL ini digunakan untuk memanggil  data atau fakta.Elemen [1,2,3] dideklarasikan dalam suatu argumen yaitu L. kemudian elemen L akan ditambah elemen L lagi tapi dengan nama argumen berubah yakni LL.Maka pencarian akan dilakukan dengan mencari klausa mana yang cocok dengan goal yang diberikan. Maka akan didapat rumus sebagai berikut: list 1 + list 2 setelah program ini dijalankan.

  B.Running
Ø  Terlihat bahwa pada hasil output untuk argument L dengan elemen [1,2,3] dan hasil  dari pertambahan elemen L dan L dengan nama argument LL dengan hasil elemen [1,2,3,1,2,3].Dapat hasil seperti itu diakibatkan perintah “tambah(L, L, LL)”.
    A.Listing
GOAL
  tambah([1,2,3],[5,6],L).
Ø  Pada Section GOAL ini digunakan untuk memanggil  data atau fakta.elemen [1,2,3] akan ditambah dengan elemen [5,6], dan dideklarasikan dalam suatu argumen yaitu L. maka pencarian akan dilakukan dengan mencari klausa mana yang cocok dengan goal yang diberikan. Maka akan didapat rumus sebagai berikut: list 1 + list 2, setelah program ini dijalankan.
  B.Running
Ø  Terlihat bahwa pada hasil output tersebut untuk argument L adalah [1,2,3,5,6] dapat seperti itu karena argument L tidak ditambahkan argument lain.Tapi hanya dalam satu argument yakni L ditambahkan elemen baru yakni [5,6] terlihat pada perintah dalam goal ini :  tambah([1,2,3],[5,6],L).











Bab 4
Kesimpulan

Dari Program yang dijalan dalam Visual Prolog diatas saya dapat menggambil kesimpulan bahwa:

1.     LIST

Pada Prolog, yang dimaksud dengan list adalah sebuah object yang didalamnya mengandung sejumlah object yang lain (jumlahnya dapat berubah-ubah).

2.     Tanda asterik (*)

Tanda asterik (*) berarti domain tersebut merupakan sebuah list.
3.     List terdiri dari 2 bagian yaitu head dan tail
·         Head adalah merupakan elemen pertama dari list dan tail, dan elemen sisanya. Tail dari list adalah juga merupakan sebuah list, sedangkan head dari list merupakan sebuah elemen. Contoh:
head dari list [a, b, c] adalah a
tail dari list [a, b, c] adalah [b, c]

4.     Tanda [ ]
         Pada list selalu mengambil elemen pertama dari suatu list maka pada akhirnya kita akan mendapat sebuah list kosonng (empty list) yang ditulis dengan tanda [ ] (kurung siku buka dan kurung siku tutup). List kosong tidak bisa dipecah lagi menjadi head dan tail.

5. vertical bar ( | ).
Prolog juga menyediakan cara untuk secara eksplisit memisahkan antara bagian head dan tail dari suatu list. Pemisah tersebut menggunakan tanda vertical bar ( | ). Contoh:

[a, b, c, d] ekivalen denga [a, b|[c, d]]













Bab 5
TUGAS

LISTING PROGRAM
DOMAINS
      nama_mk, nama_mhs = symbol
      nilai = string
      list = nilai*

PREDICATES
      nondeterm mata_kuliah(nama_mk, nama_mhs, nilai)
      nondeterm lulus(nama_mk, nama_mhs)
      nondeterm tidak_lulus(nama_mk, nama_mhs)
CLAUSES     
      mata_kuliah("Intelegensi Buatan", "Supardi", "A").
      mata_kuliah("Intelegensi Buatan", "Suradi", "B").
      mata_kuliah("Intelegensi Buatan", "Suyatmi", "C").
      mata_kuliah("Intelegensi Buatan", "Suparni", "D").
      mata_kuliah("Intelegensi Buatan", "Sujiman", "C").
      mata_kuliah("PDE", "Suharto", "B").
      mata_kuliah("PDE", "Sudirman", "C").
      mata_kuliah("PDE", "Supardi", "C").
      mata_kuliah("PDE", "Suyatmi", "B").
      mata_kuliah("PDE", "Sutini", "D").
      mata_kuliah("Sistem Operasi", "Suharto", "B").
      mata_kuliah("Sistem Operasi", "Sutini", "A").
      mata_kuliah("Sistem Operasi", "Supardi", "A").
      mata_kuliah("Sistem Operasi", "Suparni", "B").
      mata_kuliah("Sistem Operasi", "Suripah", "C").
                   
      lulus(X,Y):-
             mata_kuliah(X,Y,"A");
             mata_kuliah(X,Y,"B");
             mata_kuliah(X,Y,"C").
                          
      tidak_lulus(X,Y):-
             mata_kuliah(X,Y,"D");
             mata_kuliah(X,Y,"E").                                 
GOAL
      write("Nama Mahasiswa : Supardi"),nl,
      mata_kuliah(Nama_MK, "Supardi" ,Nilai).

1.       Nilai-nilai yang dimiliki oleh supardi beserta mata_kuliahnya
RUNNING PROGRAM

2.       Goal untuk mengecek apakah Suripah mengikuti perkuliahan pada semester tersebut, maka goal diganti :
GOAL
write("Nama Mahasiswa : Suripah"),nl,
mata_kuliah(_, "Suripah",_).
RUNNING PROGRAM
fffdffdfgfggfggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg


3. Goal untuk menampilkan mahasiswa yang tidak lulus (nilai
GOAL
write("Nama Mahasiswa yang tidak Lulus :"),nl,nl,
tidak_lulus(Nama_mata_kuliah, Nama_Mahasiswa).
RUNNING PROGRAM


    Blogger Comment
    Facebook Comment

0 komentar:

Post a Comment

Thanks For Your Feedback.