26
|
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
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
0 komentar:
Post a Comment
Thanks For Your Feedback.