.
Pengguna VPE diasumsikan mempun$ai pengalaman dan pengetahuan
dalam menggunakan sistem 671 "Graphical User Interface#% seperti
menggunakan menu% menutup% meminimi8e% mema4imi8e ataupun meresi8e suatu
jendela "window#% meloading ile dari jendela 9ile )pen dialog% mengklik toolbar
dan lain(lain. :ika praktikan belum pun$a pengetahuan ini% praktikan dapat
mempelajari dari literatur $ang berkaitan dengan sistem operasi terkait% seperti
buku cara menggunakan M' *indo+s ,! atau $ang lainn$a.
%. M#&ala'a VPE
'ebelum menjalankan VPE% tentu saja% diasumsikan program VPE sudah
terinstall di komputer $ang digunakan. Program instalasi akan membuat sebuah
program group $ang di dalamn$a terdapat icon $ang digunakan untuk
menjalankan VPE% $aitu dengan cara mengklik icon tersebut. -amun ada ban$ak
cara untuk menjalankan VPE% seperti% dengan menggunakan *indo+s E4plorer%
men(double klik ile V1P.E;E di direktori <1-=*1-=10 untuk platorm 10 bit
atau direktori <1-=*1-=32 untuk platorm 32 bit $ang direktori tersebut terletak
di ba+ah direktori utama V1P.
:ika Visual Prolog telah pernah membuka suatu project "dengan
ekstensi .VP># terakhir kali dan VPE ditutup% maka secara otomatis akan
membuka project tersebut ketika VPE dijalankan kembali.
(. M#")u'a &#*#la #*i$or (editor window)
7ntuk menciptakan jendela editor $ang baru% praktikan dapat
menggunakan menu perintah +il# , N#-. 'etelah itu akan muncul jendela editor
LABORATORIUM TERPADU +TIK UNMUL
1
Modul 1. Lingkungan Visual Prolog
baru dengan judul ?-)-5ME@. Editor ini la$akn$a seperti editor teks standar
lainn$a% seperti -).EP5D $ang dimiliki oleh M' *indo+s. Praktikan dapat
menggunakan tombol kursor "tanda panah atas% ba+ah% kiri dan kanan# dan mouse
untuk menggerakkan kursor seperti la$akn$a editor lain. :uga editor ini
mendukung operasi cut, copy and paste, undo/redo $ang diaktikan dari menu
E*i$ atau melalui penekanan tombol akselerator $ang dapat dilihat pada menu
E*i$.
7ntuk lebih mendalami editor ini lebih jauh praktikan dapat membaca dari
manual Visual De&elopment En&ironment "VDE# pada ile VDE.D)A di direktori
D)A $ang terletak di ba+ah direktori utama V1P.
.. M#&ala'a *a "#gu&i sua$u /rogra"
7ntuk mengecek bah+a sistem diset dengan baik% praktikan dapat
mencoba mengetikkan teks berikut pada jendela editorB
GOAL write(Selamat belajar Visual Prolog),nl.
<aris kode di atas pada Prolog dinamakan 6)5L dan baris tersebut telah cukup
s$arat untuk menjadi program $ang bisa dieksekusi. 7ntuk mengeksekusi 6)5L%
aktikan item menu Pro�$ , T#s$ Goal% atau cukup dengan menekan tombol
akselerator 1$rl2G. :ika sistem terinstall dengan baik% maka di la$ar akan tampak
seperti gambar berikutB
LABORATORIUM TERPADU +TIK UNMUL
2
Modul 1. Lingkungan Visual Prolog
Casil eksekusi akan ditampilkan pada jendela $ang berbeda $ang harus
ditutup sebelum menguji 6)5L lainn$a. Visual Prolog memperlakukan 6)5L
sebagai sebuah program $ang telah ter(compile% kemudian di(links dan
dibangkitkan menjadi suatu bentuk jendela $ang dapat dieksekusi "executable#.
3. M#")u'a 4il# *ari *is'
Aontoh(contoh program untuk mendukung manual Language .utorial
Visual Prolog disediakan di direktori /D)A/E;5MPLE' pada direktori utama
V1P "dengan s$arat manual beserta contohn$a terinstall pada +aktu menginstall
Visual Prolog pertama kali#. 'alah satu ile contoh tersebut dapat dibuka dengan
menggunakan item menu +il# , O/# atau menekan tombol akselerator +5. Pilih
salah satu ile "berekstensi .P>)# dan uji 6)5L program tersebut dengan
menekan tombol 1$rl2G.
6. M#li7a$ *a "#"/#r)ai'i '#sala7a
:ika programmer membuat kesalahan dalam menuliskan kode Visual
Prolog% maka VPE akan menampilkan jendela kesalahan "error window# di mana
pada jendela tersebut terdapat datar kesalahan $ang dibuat. Programmer dapat
men(double klik kesalahan tersebut agar kursor beralih ke posisi di mana
kesalahan tersebut dibuat pada baris kode di jendela editor% sehingga dengan lebih
cepat kesalahan tersebut dapat diperbaiki. .ampilan jendela kesalahan dapat
dilihat pada gambar berikutB
LABORATORIUM TERPADU +TIK UNMUL
3
Modul 1. Lingkungan Visual Prolog
1. PRAKTIK
1. <uka jendela editor $ang baru.
2. Detikkan program di ba+ah ini.
D)M51-'
orang E s$mbol
P>ED1A5.E'
nondeterm putra"orang%orang#
nondeterm saudaraFperempuan"orang%orang#
nondeterm saudaraFlaki"orang%orang#
nondeterm menikah"orang%orang#
nondeterm a$ah"orang%orang#
nondeterm kakek"orang%orang#
nondeterm iparFperempuan"orang%orang#
AL57'E'
putra"ikhsan%bentang#.
saudaraFperempuan"dini%dina#.
saudaraFlaki"adi%lintang#.
menikah"ikhsan%dini#.
menikah"lintang%surga#.
a$ah"5%<#B(putra"<%5#.
kakek"5%<#B(a$ah"5%A#% a$ah"A%<#.
iparFperempuan"5%<#B(menikah"5%A#% saudaraFperempuan"A%<#.
iparFperempuan"5%<#B(saudaraFlaki"5%A#% menikah"A%<#.
6)5L
iparFperempuan"ikhsan%;#.
PRE!"A#ES
$utra(S#R!%G,S#R!%G)
sau&ara'$erem$uan(S#R!%G,S#R!%G)
sau&ara'la(i(S#R!%G,S#R!%G)
meni(a)(S#R!%G,S#R!%G)
a*a)(S#R!%G a*a),S#R!%G $utra)
(a(e((S#R!%G (a(e(,S#R!%G +u+u)
non&eterm i$ar'$erem$uan(S#R!%G,S#R!%G)
"LA,SES
$utra(-!()san-,-.entang-).
sau&ara'$erem$uan(-ini-,-ina-).
sau&ara'la(i(-A&i-,-Lintang-).
meni(a)(-!()san-,-ini-).
LABORATORIUM TERPADU +TIK UNMUL
4
Modul 1. Lingkungan Visual Prolog
meni(a)(-Lintang-,-Surga-).
a*a)(A,.)/0$utra(.,A).
(a(e((A,.)/0a*a)(A,"), a*a)(",.).
i$ar'$erem$uan(A,.)/0meni(a)(A,"), sau&ara'$erem$uan(",.).
i$ar'$erem$uan(A,.)/0sau&ara'la(i(A,"), meni(a)(",.).
GOAL
i$ar'$erem$uan(-!()san-,1).
AatatanB
( De$+oard non&eterm pada section P>ED1A5.E' $ang mendahului predikat
i$ar'$erem$uan berungsi untuk memberitahu ke compiler Visual Prolog
bah+a predikat tersebut mempun$ai lebih dari satu kemungkinan ja+aban
"non(deterministik#. 'ecara default Visual Prolog akan menganggap predikat
$ang ada di section predicates sebagai deterministik "kecuali pada section
facts% merupakan kebalikann$a#.
( Desalahan karena tidak memberikan ke$+ord non&eterm pada predikat $ang
nondeterministik% pada Visual Prolog !.1 han$a akan diberi peringatan
"warning# tetapi eksekusi program tetap diteruskan dan memberikan solusi
$ang diinginkan. -amun pada Visual Prolog !.2% hal ini dianggap error
"kesalahan# dan kompiler tidak meneruskan eksekusi dan memberikan pesan
kesalahan.
3. 7ji goal tersebut. 5mati hasiln$a.
4. 6anti goal tersebut denganB
i$ar'$erem$uan(-A&i-,2).
i$ar'$erem$uan(a&i,2).
dan lakukan uji goal "catatanB sebelum menjalankan uji goal berikutn$a% jendela
hasil uji goal sebelumn$a harus ditutup terlebih dahulu#. 5mati hasiln$a.
D. PERTAN8AAN9TUGAS
1. 'isipkan baris kode berikut diba+ah kata AL57'E'B
$utra(-.entang-,Genta).
$utra(bentang,genta).
<erikan 6)5L sebagai berikut.
(a(e((Genta,"u+u).
(a(e((genta,"u+u).
Demudian 7ji goal dan apa hasiln$aG
2. 5pa tombol(tombol akselerator untuk perintah(perintah berikut B cop$% cut% paste%
delete% redo% undo% ne+% open% sa&e% e4it% dan test goal.
LABORATORIUM TERPADU +TIK UNMUL
!
Modul 1. Lingkungan Visual Prolog
LABORATORIUM TERPADU +TIK UNMUL
0
Modul 3. Program Visual Prolog
MODUL %
DASAR:DASAR PROLOG
A. TUJUAN
1. Mengetahui apa $ang dimaksud dengan pemrograman logika "PROgramming in
OGic#.
2. Dapat mengkon&ersikan dari bahasa natural "natural language# ke bahasa
P>)L)6 dan begitu juga sebalikn$a.
3. Mengetahui konsep dasar akta(akta "facts#% aturan(aturan "rules#% predikat(
predikat "predicates# dan !ariable.
B. DASAR TEORI
P#"rogra"a Logi'a
Prolog dikenal sebagai bahasa deskripti "descripti!e language#% $ang
berarti dengan diberikan serangkaian akta(akta dan aturan(aturan% Prolog%
dengan menggunakan cara berpikir dedukti "deducti!e reasoning#% akan dapat
men$elesaikan permasalahan suatu program. 1ni dikontraskan dengan bahasa
komputer tradisional seperti A% <5'1A% Pascal $ang dikenal sebagai bahasa
prosedural "procedural language#. Dalam bahasa prosedural% programmer harus
memberikan instruksi tahap demi tahap agar komputer dapat dengan pasti
bagaimana men$elesaikan permasalahan $ang diberikan. Dengan kata lain%
programmer harus tahu lebih dahulu bagaimana cara men$elesaikan permasalahan
sebelum diinstuksikan ke komputer. Lain jika dibandingkan dengan programmer
Prolog. Programmer Prolog han$a membutuhkan deskripsi/gambaran
permasalahan% lalu menerjemahkann$a ke bahasa Prolog. 'elanjutn$a tinggal
sistem Prolog $ang menentukan bagaimana mencari solusin$a.
Prolog didasarkan pada klausa(klausa Corn "Corn clauses#% $ang
merupakan himpunan bagian dari sistem ormal $ang dinamakan logika predikat
"predicate logic#. Logika predikat men$ederhanakan cara agar jelas bagaimana
berpikir akan dilakukan. Prolog menggunakan &ariasi sintak logika predikat $ang
telah disederhanakan dengan demikian sintakn$a mudah dimengerti dan sangat
mirip dengan bahasa natural.
Prolog mempun$ai mesin inerensi "infrence engine# $ang merupakan
suatu proses berpikir logis mengenai inormasi. Mesin inerensi mempun$ai
pencocok pola "pattern matcher# $ang akan mengambil inormasi $ang telah
disimpan "diketahui# dan kemudian mencocokkan ja+aban atas pertan$aan. 'atu
feature penting dari Prolog adalah bah+a% sehubungan mencari ja+aban logis atas
pertan$aan $ang diajukan% ia dapat berhubungan dengan ban$ak alternati dan
mencari semua kemungkinan dari pada han$a satu solusi.
Logika predikat dibangun agar mudah menerjemahkan ide(ide berbasis
logika menjadi bentuk tertulis. Prolog mengambil keunggulan dari sintak ini
untuk membangun suatu bahasa pemrograman $ang berbasis logika. Dalam logika
predikat% pertama kali harus membuang semua kata(kata $ang tidak dibutuhkan
dari suatu kalimat. Demudian mentransormasi kalimat tersebut dengan mencari
LABORATORIUM TERPADU +TIK UNMUL
H
Modul 3. Program Visual Prolog
relasi terlebih dahulu% kemudian setelah itu melakukan pengelompokkan ob"ect.
Ob"ect kemudian menjadi argumen dari relasi atas ob"ect tersebut. <erikut ini
merupakan contoh kalimat bahasa natural ditransormasikan menjadi sintak logika
predikatB
Ba7asa Na$ural Logi'a Pr#*i'a$
Eskrim rasan$a enak enak"eskrim#
Ma+ar ber+arna merah merah"ma+ar#
Mitah men$ukai mobil suka"mitah%mobil#
*ening suka bakso jika bakso rasan$a
enak
suka"+ening% bakso# B( enak"bakso#
a. Kali"a$ ; +a'$a *a A$ura
Programmer Prolog mendeinisikan ob"ect#ob"ect dan relasi(relasi%
kemudian mendeinisikan aturan mengenai kapan relasi(relasi ini dikatakan
benar "true#. Aontoh kalimat B
3ening su(a ba(so.
memperlihatkan relasi antara ob"ect 3ening dan ba(so% relasi ini adalah
su(a. <erikutn$a membuat aturan kapan 3ening su(a ba(so adalah
kalimat $ang benarB
3ening su(a ba(so ji(a ba(so rasan*a ena(.
9akta B 5pa $ang diketahui
Dalam Prolog% relasi antara ob"ect#ob"ect dinamakan /r#*i'a$. Dalam
bahasa natural relasi disimbolisasikan oleh suatu kalimat. Dalam logika
predikat $ang Prolog gunakan% suatu relasi adalah kesimpulan dalam suatu
rase sederhana. 'uatu akta memiliki nama relasi diikuti ob"ect atau ob"ect#
ob"ect di dalam tanda kurung. 'ebagaimana kalimat% akta tersebut diakhiri
dengan tanda titik ".#.
<erikut ini beberapa akta $ang mengekspresikan relasi suka dalam bahasa
naturalB
#oni su(a !nung.
!nung su(a #oni.
#oni su(a (u+ing.
Dan dalam sintak Prolog% akta di atas ditulisB
su(a(toni,inung).
su(a(inung,toni).
su(a(toni,(u+ing).
9akta juga bisa mengekspresikan siat "property# dari suatu ob"ect
sebagaimana suatu relasi. Dalam bahasa natural kalimat ?Dodok ber+arna
hijau@ dan ?Domeng adalah laki(laki@ diubah ke dalam sintak Prolog menjadiB
LABORATORIUM TERPADU +TIK UNMUL
2
Modul 3. Program Visual Prolog
)ijau((o&o().
la(ila(i((omeng).
5turanB 5pa $ang dapat disimpulkan dari akta $ang ada
5turan membuat kita dapat mengambil suatu akta dari akta $ang lain.
Dengan bahasa lain% aturan adalah suatu konklusi diketahui benar jika satu
atau lebih konklusi atau akta lain ditemukan benar. <erikut ini beberapa
aturan $ang berhubungan dengan relasi su(aB
!nung su(a a$a$un *ang #oni su(a.
4omeng su(a a$a$un *ang berwarna )ijau.
Dengan aturan di atas% dapat disimpulkan dari beberapa akta sebelumn$a
mengenai sesuatu $ang 1nung dan Domeng sukaB
!nung su(a !nung.
4omeng su(a 4o&o(.
7ntuk menuliskan aturan tersebut dalam sintak Prolog han$a dibutuhkan
sedikit perubahan seperti iniB
su(a(inung, Sesuatu)/0 su(a(toni, Sesuatu).
su(a((omeng, Sesuatu)/0 )ijau(Sesuatu).
'imbol /0 diucapkan dengan ?jika@ dan memisahkan dua bagian dari
aturan $aitu head dan body. 5turan di atas dalam makna prosedur% bisa berarti
?untuk membuktikan 1nung suka sesuatu% buktikanlah bah+a .oni suka hal
$ang sama@ dan ?untuk membuktikan Domeng suka sesuatu% buktikanlah
bah+a sesuatu itu ber+arna hijau@.
). <u#r=
Dalau kita sudah memberikan Prolog sekumpulan akta% selanjutkan dapat
diajukan pertan$aan sehubungan dengan akta(akta. 1ni dikenal dengan nama
memberikan Iuer$ ke sistem Prolog "$uerying the Prolog system#. Pertan$aan
$ang diajukan ke Prolog sama tipen$a seperti dalam bahasa natural.
<erdasarkan pada akta dan aturan $ang diberikan sebelumn$a% kita dapat
menja+ab pertan$aan tentang relasi(relasi ini sebagaimana Prolog juga bisaB
A$a(a) #oni men*u(ai !nung5
dalam sintak PrologB
su(a(toni, inung).
dengan memberikan Iuer$ ini% Prolog akan menja+abB
2es
LABORATORIUM TERPADU +TIK UNMUL
,
Modul 3. Program Visual Prolog
karena Prolog mempun$ai akta $ang mengatakan hal tersebut. <erikut
merupakan pertan$aan $ang lebih rumit dalam bahasa naturalB
A$a *ang #oni su(a5
dalam sintak PrologB
su(a(toni, A$a).
'intak Prolog tidak berubah ketika mengajukan Iuer$ dan tampak bah+a
sintak Iuer$ sangat mirip dengan sintak akta. Jang penting untuk diingat
adalah bah+a ob"ect kedua A$a dia+ali dengan huru besar sedang ob"ect
pertama toni tidak. 1ni karena toni sudah fix sebagai konstanta ob"ect
sedangkan A$a adalah sebuah &ariabel. Variabel selalu dia+ali dengan sebuah
huru besar atau sebuah garis ba+ah "underscore, % #.
Prolog selalu mencari ja+aban dari suatu Iuer$ dengan memulai dari
bagian paling atas "top# dari akta(akta dan melihat setiap akta sampai ke
bagian paling ba+ah "bottom# dimana tidak ada satupun akta lagi. 7ntuk
menja+ab Iuer$ di atas% Prolog akan menampilkanB
3)at6inung
3)at6(u+ing
7 Solutions
karena Prolog tahu bah+aB
su(a(toni, inung).
dan
su(a(toni, (u+ing).
jika kita bertan$a pada PrologB
su(a(inung, 3)at).
maka Prolog akan menja+abB
3)at6toni
3)at6inung
3)at6(u+ing
8 Solutions
karena Prolog tahu 1nung suka .oni dan juga 1nung suka apapun $ang .oni
suka% sedangkan .oni suka 1nung dan juga suka kucing.
Prolog mendukung Iuer$ jamak "compound $uery#. 5da 2 jenis Iuer$
jamak $aituB
1. Donjungsi "logika an&#
2. Disjungsi "logika or#
LABORATORIUM TERPADU +TIK UNMUL
13
Modul 3. Program Visual Prolog
Donjungsi dalam sintak Prolog% antara satu Iuer$ dengan Iuer$ $ang lain
dipisahkan dengan tanda koma "%# sedangkan disjungsi dipisahkan dengan
tanda semicolon "K#. Aontohn$a untuk Iuer$ ?'iapakah orang $ang suka
berenang *a sekaligus suka membacaG@ ditulis dalam sintak PrologB
su(a(Orang, renang), su(a(Orang, ba+a).
sedangkan jika Iuer$ berbun$i ?'iapakah orang $ang suka berenang a$au
suka membacaG@ dalam Prolog ditulisB
su(a(Orang, renang)9 su(a(Orang, ba+a).
0. Varia)#l
'eperti $ang telah disebutkan sebelumn$a% untuk memberikan nama
&ariabel dalam Visual Prolog harus dia+ali dengan huru besar "capital letter#
atau garis ba+ah "underscore#% berikutn$a dapat berupa huru "besar atau
kecil#% angka "?3(,@# dan garis ba+ah "?F@#. <erikut ini merupakan contoh
penamaan &ariabel $ang &alidB
!ni'a&ala)':ariabel'*ang':ali&
#anggal'La)ir'Ana('Sa*a';';7';<<<
'!ni'juga':ali&
sedangkan berikut ini penamaan &ariabel $ang tidak &alidB
;&esember';<<< =&iawali &engan ang(a
ini'ti&a(':ali& =&iawali &engan )uru> (e+il
?Pengganggu =ter&a$at (ara(ter *ang &ilarang (@?A)
Penamaan &ariabel selain &alid sebaikn$a $ang mudah dimengerti. 'ebagai
contoh daripada memberikan nama &ariabel 1 untukB
su(a(1, tennis).
akan lebih dimengerti jika menggunakan nama &ariabel Orang sehingga
menjadiB
su(a(Orang, tennis).
&nonnymous 'ariables "Variabel 5nonim#
Variabel anonim digunakan jika han$a dibutuhkan inormasi tertentu dari
suatu Iuer$. Variabel anonim akan mengabaikan nilai(nilai $ang tidak
dibutuhkan. Dalam Prolog% &ariabel anonim direpresentasikan dengan tanda
garis ba+ah tunggal "?F@#. Aontoh jika ada akta(akta berikutB
orangtua(&au&,ir>an).
orangtua(roger,o:a).
orangtua(suroto,toni).
LABORATORIUM TERPADU +TIK UNMUL
11
Modul 3. Program Visual Prolog
jika ingin tahu siapa saja $ang berstatus orangtua tanpa melihat siapa anakn$a%
maka bisa dilakukan Iuer$ sebagai berikut
orangtua(Ortu, ').
Maka Prolog akan memberikan ja+abanB
Ortu6&au&
Ortu6roger
Ortu6suroto
8 Solutions
Variabel anonim juga bias berlaku sebagai akta. :ika ditulisB
$un*a(', se$atu).
ma(an(').
maka dalam bahasa natural dapat dituliskanB
'etiap orang mempun$ai sepatu.
'etiap orang makan.
*. Ko"#$ar
Programmer $ang baik selalu memberikan catatan atau komentar untuk
menjelaskan sesuatu $ang mungkin tidak jelas bagi orang lain "atau bahkan
bagi programmer sendiri dalam setahun ke depan misaln$a#. Domentar akan
membuat program menjadi lebih mudah untuk dimengerti.
Domentar dengan baris jamak harus dimulai dengan karakter /L "slash,
asterik# dan diakhiri dengan karakter L/ "asterik, slash#. 7ntuk memberikan
komentar dengan baris tunggal dapat menggunakan karakter $ang sama atau
dapat dimulai dengan tanda persen "M#. AontohB
BC !ni +onto) sebua) (omentar CB
= !ni juga +onto) (omentar
BC !ni (omentar
&engan
tiga baris CB
BC !ni +onto) (omentar BC &alam (omentar CB &i Visual
Prolog CB
1. PRAKTIK
1. <uat jendela baru.
2. Detikkan program berikutB
PRE!"A#ES
non&eterm &a$at'membeli(s*mbol, s*mbol)
non&eterm orang(s*mbol)
non&eterm mobil(s*mbol)
LABORATORIUM TERPADU +TIK UNMUL
12
Modul 3. Program Visual Prolog
su(a(s*mbol, s*mbol)
&ijual(s*mbol)
"LA,SES
&a$at'membeli(1,2)/0
orang(1),
mobil(2),
su(a(1,2),
&ijual(2).
orang(nur).
orang(*u&i).
orang(&ian).
orang()eni).
mobil(atoD).
mobil((ijang).
su(a(&ian, atoD).
su(a(*u&i, $e+el).
su(a()eri, bu(u).
su(a(nur, (om$uter).
&ijual((ijang).
&ijual(atoD).
&ijual(bu(u).
GOAL
&a$at'membeli(Sia$a,A$a).
3. 7ji goal dan amati hasiln$a.
4. .ambahkan akta berikut pada bagian AL57'E' dan kelompokkan pada predikat
$ang samaB
su(a()eni, (ijang).
!. 7ji goal dan amati hasiln$a
0. 6anti(ganti goal pada program di atas denganB
a. su(a(',A$a).
b. su(a(Sia$a,').
+. &a$at'membeli(',A$a).
&. &a$at membeli(Sia$a,').
dan uji masing(masing goal serta amati hasiln$a.
D. PERTAN8AAN9TUGAS
1. 7bah bahasa Prolog berikut menjadi bahasa naturalB
a. orang(&ian).
b. mobil(atoD)
+. su(a(&ian, atoD)).
&. &ijual(atoD).
e. &a$at'membeli(1,2)/0
orang(1),
mobil(2),
su(a(1,2),
LABORATORIUM TERPADU +TIK UNMUL
13
Modul 3. Program Visual Prolog
&ijual(2).
>. su(a(',A$a).
2. 7bah bahasa natural berikut menjadi bahasa PrologB
a. >ick$ mempun$ai hobi bermain catur.
b. Embang orangn$a pemalas.
c. Jusida seorang &egetarian.
d. Dusdiar pandai bermain gitar.
e. Mobil $ang ber+arna merah itu milik 'adek% bermerk <M*.
. 5+an seorang pemain piano% berasal dari Pontianak bersuku :a+a.
g. 'eseorang dikatakan baik jika mempun$ai siat pen$a$ang dan derma+an.
h. 'eseorang dikatakan pintar jika salah satu dari Matematika atau 1P5 atau 1P'
mendapat nilai tinggi.
i. 'etiap orang pasti mati.
3. Diberikan akta sebagai berikut B
anak ":hon% :ames#.
anak ":ames% Peter#.
istri "Mar$% Peter#.
anak "'ue% 5nn#.
istri "5nn% :ames#.
pria":hon#.
pria ":ames#.
pria "Peter#.
+anita "Mar$#.
+anita"'ue#.
+anita"5nn#.
usia":hon% 13#.
usia"'ue% 13#.
Dari akta di atas buatlah program dalam bahasa P>)L)6 dan 7jilah dengan
rule(rule sebagai berikut B a. cucu
b. ibu
c. adik
d. Dakek
LABORATORIUM TERPADU +TIK UNMUL
14
Modul 3. Program Visual Prolog
MODUL (
PROGRAM VISUAL PROLOG
A. TUJUAN
1. Mengerti dan dapat menerapkan section(section dasar $ang ada di Visual Prolog
seperti P>ED1A5.E'% D)M51-'% AL57'E'% dan 6)5L.
2. Mengetahui section(section lainn$a $ang ada di Visual Prolog seperti 95A.'%
A)-'.5-.% 6L)<5L.
3. Mengerti tentang (ompiler )irecti!es*
4. Mengerti dan dapat menerapkan aritas jamak "multiple arity# pada Visual Prolog.
!. Mengerti konsep aturan "rule# pada Prolog dan perbedaann$a dengan bahasa
lain.
0. Mengerti mengenai kon&ersi tipe otomatis "automatic type con!ersion#.
B. DASAR TEORI
Progra" Visual Prolog
1. S#0$io *asar Visual Prolog
'ecara umum% program Visual Prolog terdiri dari empat section dasar%
$aitu section 0laus#s% section /r#*i0a$#s% section *o"ais% dan terakhir section
goal. <erikut akan dijelaskan secara singkat masing(masing section tersebut.
S#0$io 1laus#s
'ection clauses merupakan section $ang paling penting pada program
Visual Prolog. Pada section inilah kita meletakkan akta dan aturan. Detika
mencari ja+aban% Visual Prolog akan mencari dari bagian paling atas dari section
clauses% melihat setiap akta dan aturan untuk mendapat ja+aban benar% hingga ke
bagian paling ba+ah dari section ini.
LABORATORIUM TERPADU +TIK UNMUL
1!
Modul 3. Program Visual Prolog
S#0$io Pr#*i0a$#s
'ebelum mendeinsikan predikat di section clauses% maka predikat tersebut
harus dideklarasikan terlebih dahulu di section predicates. Dalau tidak% Visual
Prolog tidak akan mengenal predikat $ang kita tuliskan tersebut. Detika
mendeklarasikan suatu predikat% kita memberitahu Visual Prolog domain dari
argumen $ang dimiliki predikat tersebut.
Visual Prolog mempun$ai perpustakaan predikat $ang kalau dipakai tidak
perlu dideklarasikan% karena sudah built#in. 7ntuk melihat predikat apa saja serta
manaatn$a $ang ada di perpustakaan Visual Prolog dapat melihat help dari
Visual Prolog ">#l/ , 1o$#$s#.
Deklarasi Predikat
Deklarasi predikat dimulai dengan nama predikat diikuti tanda kurung buka%
kemudian diikuti nol atau lebih argumen dari predikat "setiap argumen dipisah
dengan tanda koma# kemudian ditutup dengan tanda kurung tutup% sepertiB
Pre&i+at%ame(ti$e'argumen;, ti$e'argumen7,...,ti$e'argumen%)
dan tidak seperti section clauses% deklarasi predikati tidak perlu diakhiri tanda
titik.
+ama Predikat
-ama predikat harus dimulai dengan huru diikuti dengan serangkaian huru%
angka dan atau garis ba+ah "underscore#. *alaupun bisa dimulai huru besar%
namun sangat direkomendasikan untuk memakai huru kecil dia+al nama
predikat "beberapa &ersi Prolog $ang lain tidak memperbolehkan nama predikat
dia+ali huru besar#. Panjang nama predikat bisa sampai 2!3 karakter. Aontoh
penamaan predikat B
Na"a /r#*i'a$ =ag l#gal Na"a /r#*i'a$ =ag ill#gal
9akta NaktaO
pemainFpiano LpemainFpianoL
milikFumumFatauFpribadi milikFumum/pribadi
Pola.indakDriminal Pola(.indak(Driminal
pilihF1temFMenu pilih 1tem Menu
namaFpredikat namaPpredikatQ
rangkingF13Fbesar RrangkingF13Fbesar
&rgumen predikat
5rgumen predikat harus $ang sudah dikenal oleh domain Visual Prolog.
'uatu domain bisa merupakan domain standar atau bisa juga domain $ang sudah
dideklarasikan pada section *o"ais. Aontohn$a% jika dideklarasikan suatu
predikat $re&i(at'(u(s*mbol, integer) pada section /r#*i0a$#s seperti iniB
PRE!"A#ES
$re&i(at'(u(s*mbol, integer)
LABORATORIUM TERPADU +TIK UNMUL
10
Modul 3. Program Visual Prolog
maka tidak perlu lagi mendeklarasikan domain dari argumen pada section
*o"ais% karena s*mbol dan integer adalah standar domain. -amun jika ingin
mendeklarasikan $re&i(at'(u(nama, nomor) seperti iniB
PRE!"A#ES
$re&i(at'(u(nama, nomor)
maka dibutuhkan deklarasi dari domain nama dan nomor% seperti iniB
OEA!%S
nama 6 s*mbol
nomor 6 integer
PRE!"A#ES
$re&i(at'(u(nama, nomor)
S#0$io Do"ais
'ection domains mempun$ai 2 manaat utama% $aitu pertama% kita dapat
memberikan nama $ang berarti untuk domain% +alaupun secara internal domain
tersebut sama tipen$a dengan domain $ang telah adaK $ang kedua% kita dapat
mendeklarasi domain khusus $ang digunakan untuk mendeklarasikan struktur
data $ang tidak dideinisikan oleh standar domain. Dengan mendeklarasikan
domain juga dapat mencegah kesalahan logika pada program. AontohB
OEA!%S
nama, jen&er 6 s*mbol
umur 6 integer
PRE!"A#ES
orang(nama, jen&er, umur)
Deuntungan utama dari deklarasi di atas adalah Visual Prolog dapat mendeteksi
adan$a kesalahan% jika menuliskan aturan seperti iniB
jen&er'sama(1,2)/0
orang(1, SeF, '),
orang(SeF, 2, ').
*alaupun nama dan jen&er sama(sama dideinsikan sebagai s*mbol% namun
keduan$a tidak eki&alen. Visual Prolog akan mendeteksi kesalahan tersebut%
karena kita mencoba menukar keduan$a.
'tandar Domain Visual Prolog
Visual Prolog mempun$ai standar domain built#in. Dita dapat
menggunakan standar domain ketika mendeklarasikan tipe dari argumen suatu
predikat. 'tandar domain sudah dikenal Visual Prolog dan tidak perlu
dideinisikan lagi pada section *o"ais. .able 3.1. memperlihatkan &ariasi
standar domain bertipe integer "bilangan bulat#. .abel 3.2. memperlihatkan
standar domain lainn$a.
LABORATORIUM TERPADU +TIK UNMUL
1H
Modul 3. Program Visual Prolog
.able 3.1B 'tandar Domain 111nteger
Domain Description and implementation
sort A small, signe&, Guantit*.
All $lat>orms ;H bits,7s +om$ 87IHJ .. 87IHI
!sort A small, unsigne&, Guantit*.
All $lat>orms ;H bits K .. HLL8L
lon" A large signe& Guantit*
All $lat>orms 87 bits,7s +om$ 07;MIMJ8HMJ ..
7;MIMJ8HMI
!lon" A large, unsigne& Guantit*
All $lat>orms 87 bits K .. M7<M<HI7<L
inte"er A signe& Guantit*, )a:ing t)e natural siDe >or t)e
ma+)ineB$lat>orm ar+)ite+ture in Guestion.
;Hbit $lat>orms ;H bits,7s +om$ 087IHJ .. 87IHI
87bit $lat>orms 87 bits,7s +om$ 07;MIMJ8HMJ ..
7;MIMJ8HMI
!nsi"ned An unsigne& Guantit*, )a:ing t)e natural siDe >or t)e
ma+)ineB$lat>orm ar+)ite+ture in Guestion.
;Hbit $lat>orms ;H bits K .. HLL8L
87bit $lat>orms 87 bits K .. M7<M<HI7<L
#$te
All $lat>orms N J bits K .. 7LL
word
All $lat>orms ;H bits K .. HLL8L
dword
All $lat>orms 87 bits K .. M7<M<HI7<L
.able 3.2B 'tandar Domain22 Dasar
Do"ai D#s0ri/$io a* i"/l#"#$a$io
car A +)ara+ter, im$lemente& as an unsigne& b*te.
S*nta+ti+all*, it is written as a +)ara+ter
surroun&e& b* single Guotation mar(s/ OaO.
LABORATORIUM TERPADU +TIK UNMUL
12
Modul 3. Program Visual Prolog
Real A >loating0$oint number, im$lemente& as J b*tes in
a++or&an+e wit) !EEE +on:entions9 eGui:alent to "Os
do!#le. S*nta+ti+all*, a real is written wit) an
o$tional sign (P or 0) >ollowe& b* some &igits
DDDDDDD, t)en an o$tional &e+imal $oint (.) >ollowe&
b* more &igits DDDDDDD, an& an o$tional eF$onential
$art (e(P or 0))/
QPR0S Q.S Qe QPR0S S
EFam$les o> real numbers/
M7IKL <<<< JH.I7
<;;;.<7<M8IL7;e78J I<.J8eP7;
Tere I<.J8eP7; means I<.J8 F ;KU7;, just as in
ot)er languages.
#)e $ermitte& number range is ; ) ;K
08KI
to ;
) ;K
8KJ
(;e08KI to ;eP8KJ). Values >rom t)e
integral &omains are automati+all* +on:erte& to
real numbers w)en ne+essar*.
strin"
A seGun+e o> +)ara+ters, im$lemente& as a $ointer to a
Dero0terminate& b*te arra*, as in ". #wo >ormats are
$ermitte& >or strings/
;. a seGuen+e o> letters, numbers an& un&ers+ores,
$ro:i&e& t)e >irst +)ara+ter is lower0+ase9 or
7. a +)ara+ter seGuen+e surroun&e& b* a $air o>
&ouble Guotation mar(s.
EFam$les o> strings/
tele$)one'number -railwa* ti+(et- -ori& !n+-
Strings t)at *ou write in t)e $rogram +an be u$ to 7LL
+)ara+ters long. Strings t)at t)e EO,L ! s*stem rea&s
>rom a >ile or buil&s u$ internall* +an be u$ to HM4
+)ara+ters long on ;H0bit $lat>orms, an&
(t)eoreti+all*) u$ to MG long on 870bit $lat>orms.
s$m#ol
A seGuen+e o> +)ara+ters, im$lemente& as a $ointer to an
entr* in a )as)e& s*mbol0table, +ontaining strings. #)e
s*ntaF is t)e same as >or strings.
S#0$io Goal
'ecara esensial% section goal sama dengan body dari sebuah aturan "rule#%
$aitu sederetan sub(sub goal. Perbedaan antara section goal dengan suatu aturan
adalah setelah kata kunci goal tidak diikuti tanda B( dan Visual Prolog secara
otomatis mengeksekusi goal ketika program dijalankan.
:adi program Visual Prolog mempun$ai struktur dasar sebagai berikutB
OEA!%S
BC000000000000000000000000
LABORATORIUM TERPADU +TIK UNMUL
1,
Modul 3. Program Visual Prolog
&e(larasi &omain
00000000000000000000000000CB
PRE!"A#ES
BC000000000000000000000000
&e(larasi $re&i(at
00000000000000000000000000CB
"LA,SES
BC0000000000000000000000000000000
+lauses (>a(ta &an aturan)
000000000000000000000000000000000CB
GOAL
BC000000000000000000000000
subgoal';,
subgoal'7,
...,
subgoal'%.
00000000000000000000000000CB
%. S#0$io Progra" Lai=a.
5da beberapa section lainn$a $ang digunakan di Visual Prolog $aitu
section 4a0$s% section 0os$a$s% dan section glo)al. Dali ini akan dibahas secara
singkat ketiga section tersebut sebagai perkenalan. 'ection 4a0$s akan dibahas
lebih mendalam pada modul $ang lain.
S#0$io +a0$s
Program Visual Prolog merupakan suatu koleksi dari sekumpulan akta
dan aturan. Dadang ketika program sedang berjalan% kita ingin meng(update
"merubah% menambah% atau menghapus# beberapa akta dari program. Pada kasus
ini akta menjadi suatu database $ang dinamis atau database internal% dan akta
tersebut dapat berubah ketika program sedang berjalan. Visual Prolog
men$ediakan section khusus untuk mendeklarasikan akta di program $ang
menjadi bagian dari database dinamis% $aitu section 4a0$s.
Data kunci 4a0$s untuk memulai section 4a0$s. Visual Prolog
men$ediakan sejumlah predikat built#in $ang mempermudah penggunaan section
akta dinamis ini. Data kunci 4a0$s dapat digantikan dengan kata kunci *a$a)as#%
untuk maksud $ang sama.
S#0$io 1os$a$s
Donstanta simbolis dapat digunakan di program Visual Prolog. 7ntuk itu
sebelumn$a harus dideklarasikan terlebih dahulu. Deklarasi konstanta diakukan
pada section 0os$a$s% diikuti dengan deklarasi menggunakan sintakB
Qi&S 6 QEa+ro'&e>initionS
Qi&S adalah nama dari konstanta simbolis dan QEa+ro'&e>initionS adalah apa
$ang akan diisikan "assign# kedalam konstanta. 'etiap QEa+ro'&e>initionS
LABORATORIUM TERPADU +TIK UNMUL
23
Modul 3. Program Visual Prolog
diakhiri dengan baris baru. Dengan demikian han$a ada satu deklarasi konstanta
pada tiap barisn$a. AontohB
"O%S#A%#
nol 6 K
satu 6 ;
&ua 6 7
ratus 6 (;KC(;K0;)P;K)
$i 6 8.;7;L<7HL8
'istem tidak membedakan antara huru besar dan huru kecil pada
deklarasi suatu konstanta. Donsekuensin$a% ketika suatu pengenal konstanta
digunakan pada section 0laus#s pada program% huru pertama harus huru kecil
untuk mencegah kerancuan antara konstanta dan &ariabel. <erikut ini merupakan
contoh $ang &alidB
"O%S#A%#S
ua 6 7
GOAL
A6&ua, write(A).
Deklarasi section 0os$a$s bisa lebih dari satu kali dalam program%
namun deklarasi suatu konstanta harus dilakukan sebelum konstanta itu
digunakan pada section $ang lain. 'uatu konstanta han$a boleh dideklarasikan
satu kali% dan jika ada deklarasi lain untuk konstanta $ang sama maka akan terjadi
kesalahan.
S#0$io Glo)al
Visual Prolog memperbolehkan untuk mendeklarasikan beberapa domain%
predikat dan klausa menjadi global "daripada han$a lokal#. Aaran$a dengan
menset secara terpisah section glo)al *o"ais% glo)al /r#*i0a$#s% dan glo)al
4a0$s pada bagian paling atas dari program. Modul ini bukan tempatn$a untuk
membahas secara detail mengenai section glo)al.
%& 'ompiler Drecti(es
Visual Prolog mendukung compiler directi!es $ang dapat ditambahkan ke
badan program untuk memberitahukan ke komputer bagaimana secara spesiik
memperlakukan kode(kode +aktu di(compile* 7ntuk menset compiler directi!es
sebagian besar dilakukan melalui menu O/$ios , Pro�$ , 1o"/il#r O/$ios.
Modul ini tidak akan membahas secara detil mengenai compiler directi!es% namun
akan memperkenalkan salah satu diantaran$a $aitu include directi!e.
Dalau sudah terbiasa membuat program menggunakan Visual Prolog%
seringkali kita memakai suatu prosedur tertentu berulang kali% sehingga setiap kali
membuat program baru dan menggunakan prosedur tersebut% prosedur tersebut
harus diketikkan kembali. 7ntuk menghemat +aktu% maka dapat digunakan
include directi!e. Aontohn$aB
LABORATORIUM TERPADU +TIK UNMUL
21
Modul 3. Program Visual Prolog
<uatlah ile "misaln$a MJP>)A.P>)# $ang berisikan deklarasi predikat $ang
sering digunakan "menggunakan section *o"ais dan section /r$#*i0a$#s #
dan menuliskan prosedur $ang dideinisikan pada predikat di section 0laus#s.
<uat program baru dan tuliskan kodeB
in+lu&e m*$ro+.$ro
di tempat di mana biasa dituliskan section *o"ais? 4a0$s? /r#*i0a$#s?
0laus#s atau goal.
Detika program di(compile% Visual Prolog juga akan meng(compile isi dari ile
MJP>)A.P>).
.. Ari$as &a"a' (m!ltiple arit$)
5ritas "arity# suatu predikat adalah jumlah argumen $ang ada pada
predikat tersebut. Visual Prolog memperbolehkan kita mempun$ai 2 atau lebih
predikat dengan nama $ang sama namun dengan aritas $ang berbeda. 5ritas $ang
berbeda dari nama predikat $ang sama harus dikelompokkan bersama baik pada
section /r#*i0a$#s maupun pada section 0laus#s. Perbedaan aritas oleh Visual
Prolog akan diperlakukan secara berbeda pula. AontohB
OEA!%S
orang 6 s*mbol
PRE!"A#ES
a*a)(orang) = orang ini a&ala) seorang a*a)
a*a)(orang, orang) = orang ; a&ala) a*a) bagi *g (e07
"LA,SES
a*a)(Seseorang)/0
a*a)(Seseorang, ').
a*a)(erwin, &iena).
a*a)(erwin, lati>a)).
3. Si$a' A$ura (R!le S$nta))
Rule pada Prolog adalah ketika kebenaran sebuah akta tergantung pada
kesukesan "kebenaran# dari satu atau lebih akta $ang lain. 'eperti $ang telah
dijelaskan pada modul sebelumn$a aturan terdiri dari 2 bagian $aitu head dan
body. <erikut ini merupakan aturan generik penulisan sintak rule pada Visual
PrologB
TEA/0 QsubgoalS, QsubgoalS, ..., QsubgoalS.
<agian body dari rule terdiri dari satu atau lebih subgoal. 'etiap subgoal
dipisahkan oleh koma% menspesiikasikan konjungsi% dan subgoal terakhir diakhiri
dengan tanda titik.
7ntuk membuat suatu Rule dikatakan sukses "benar#% Prolog harus
memeriksa kebenaran dari setiap subgoal $ang ada pada aturan tersebut. :ika ada
subgoal $ang gagal "salah#% Prolog akan kembali ke atas dan mencari alternati
bagi subgoal $ang paling a+al% kemudian kembali memproses dengan nilai
LABORATORIUM TERPADU +TIK UNMUL
22
Modul 3. Program Visual Prolog
&ariabel $ang berbeda. 1ni dinamakan lacakbalik "backtracking#. Penjelasan $ang
lebih rinci mengenai lacakbalik akan diberikan pada modul $ang lain.
6. Ko!#rsi Ti/# O$o"a$is (A!tomatic T$pe 'on(ersions)
Detika Visual Prolog mencocokkan 2 &ariabel% keduan$a tidak selalu berasal dari
domain $ang sama. :uga kadang &ariabel diikat "bound# menjadi konstan dari
domain lain. Percampuran domain ini diperbolehkan karena Visual Prolog
melakukan kon&ersi tipe otomatis dengan s$arat kon&ersi bisa terjadi bilaB
5ntara s$rigs dan s=")ols.
5ntara semua domain i$#g#r dan juga r#al. Detika suatu karakter "07ar#
dikon&ersikan ke nilai numeris% angka nilai 5'A11 dari karakter tersebut $ang
digunakan.
1. PRAKTIK
1. <uka jendela baru dan ketik program berikutB
OEA!%S
(ali,jumla) 6 integer
PRE!"A#ES
tamba)(an(jumla),jumla),jumla))
(ali(an((ali,(ali,(ali)
"LA,SES
tamba)(an(1,2,Vumla))/0
Vumla)61P2.
(ali(an(1,2,4ali)/0
4ali61C2.
GOAL
tamba)(an(87,LM,Vumla)).
2. 7ji goal dan amati.
3. 6anti goal untuk mencari hasil perkalian 13 dengan 2!.
4. 7ji goal dan amati.
!. <uka jendela baru dan ketik program berikutB
OEA!%S
mere(,warna 6 s*mbol
usia 6 b*te
)arga, (ilometer 6 ulong
PRE!"A#ES
non&eterm mobil(mere(,(ilometer,usia,warna,)arga)
"LA,SES
mobil(atoD,;8KKKK,8,mera),;7KKKKKKK).
mobil((arimun,<KKKK,M,sil:er,;KKKKKKKK).
mobil(+eria,JKKK,;,)itam,ILKKKKKK).
GOAL
mobil((arimun, <KKKK,M, sil:er, ;KKKKKKKK).
LABORATORIUM TERPADU +TIK UNMUL
23
Modul 3. Program Visual Prolog
0. 7ji goal dan amati.
H. 6anti goal untuk mencari mobil dengan harga diba+ah 133 juta rupiah.
2. 7ji goal dan amati.
,. <uka jendela baru dan ketik program berikutB
PRE!"A#ES
non&eterm su(a(s*mbol,s*mbol)
"LA,SES
su(a(ase$,memba+a).
su(a(asari,+om$uters).
su(a(nunung,bulutang(is).
su(a(:i&a,bulutang(is).
su(a(astana,renang).
su(a(astana,memba+a).
GOAL
su(a(Orang, memba+a),
su(a(Orang, renang).
13. 7ji goal dan amati. 5pa arti goal tersebut dalam bahasa naturalG
11. 6anti goal untuk mencari ?siapakah orang $ang suka olahraga bulutangkisG@.
12. 7ji goal dan amati.
D. PERTAN8AAN9TUGAS
Bua$la7 /rogra" Visual Prolog *ari arasi )#ri'u$;
Pada suatu semester di 9.1D 7-M7L. 5da ! mahasis+a $ang mengambil mata
kuliah Decerdasan <uatan "1ran% Domeng% Dati% 9atima% dan Maspion#K ! mahasis+a
mengambil mata kuliah P<) ">ick$% Embang% 'almin% Vina% dan 'ondang# dan !
mahasis+a lagi mengambil mata kuliah 'istem )perasi "Pamuji% Luki% 'adek% Jusida
dan Eka#. 'etelah ujian selesai masing(masing mendapat nilai "sesuai urutan nama
dari pertama# B 5% D% A% <% A% E% 5% D% <% A% D% E% <% 5% dan 5. Mahasi+a $ang tidak
lulus adalah mahasis+a $ang nilain$a di ba+ah A "D dan E tidak lulus#.
Demudian buatlah goal untuk mencariB
a. -ama mahasis+a $ang mengikut mata kuliah Decerdasan <uatan.
b. -ama mahasi+a $ang tidak lulus.
c. -ama mahasis+a $ang lulus.
d. 'eluruh nama matakuliah $ang diajarkan.
e. 'eluruh nama mahasis+a $ang ada.
LABORATORIUM TERPADU +TIK UNMUL
24
Modul 4. 7niikasi dan Lacakbalik
MODUL .
UNI+IKASI DAN LA1AKBALIK
(UNI*I'ATION AND +A',TRA',ING)
A. TUJUAN
1. Mengerti apa $ang dimaksud uniikasi dan proses terjadin$a.
2. Mengerti cara kerja lacak balik dan prinsip(prinsipn$a.
3. Dapat mengendalikan proses lacak balik menggunakan predikat fail% cut ,-. dan
not*
B. DASAR TEORI
Ui4i'asi *a La0a')ali'
1. Ui4i'asi (Uni-ication)
Pada +aktu Visual Prolog mencoba untuk mencocokkan suatu panggilan
"dari sebuah subgoal# ke klausa "pada section 0laus#s#% maka proses tersebut
melibatkan suatu prosedur $ang dikenal dengan uniikasi "unification#% $ang mana
berusaha untuk mencocokkan antara struktur data $ang ada di panggilan "subgoal#
dengan klausa $ang diberikan. 7niikasi pada Prolog mengimplementasikan
beberapa prosedur $ang juga dilakukan oleh beberapa bahasa tradisional seperti
mele+atkan parameter% men$eleksi tipe data% membangun struktur% mengakses
struktur dan pemberian nilai "assignment#. Pada intin$a uniikasi adalah proses
untuk mencocokkan dua predikat dan memberikan nilai pada &ariabel $ang bebas
untuk membuat kedua predikat tersebut identik. Mekanisme ini diperlukan agar
Prolog dapat mengidentiikasi klausa(klausa mana $ang dipanggil dan mengikat
"bind# nilai klausa tersebut ke &ariabel.
7ntuk lebih jelasn$a diberikan contoh berikutB
BC "onto) ;
000000000000CB
OEA!%S
ju&ul,$engarang 6 s*mbol
)alaman 6 unsigne&
PRE!"A#ES
bu(u(ju&ul, )alaman)
non&eterm &itulis'ole)($engarang, ju&ul)
non&eterm bu(u'tebal(ju&ul)
"LA,SES
&itulis'ole)(em)a, -Ear(esot .ertutur-).
&itulis'ole)((a)lil, -Sang %abi-).
bu(u(-Sang %abi-, ;87).
bu(u(-Ear(esot .ertutur-, 8I<).
bu(u'tebal(Vu&ul)/0
&itulis'ole)(', Vu&ul),
LABORATORIUM TERPADU +TIK UNMUL
2!
Modul 4. 7niikasi dan Lacakbalik
bu(u(Vu&ul, #ebal),
#ebal S 8KK.
misal diberikan goal &itulis'ole)(1, 2). 7ntuk memenuhi goal tersebut
Visual Prolog harus menguji setiap klausa &itulis'ole) $ang ada di program
untuk mencari kecocokan. Dalam usaha untuk mencocokkan argumen 1 dan 2
dengan argumen $ang ditemukan pada masing(masing klausa &itulis'ole)%
Visual Prolog akan mencari dari $ang paling atas "top# hingga ke paling ba+ah
"bottom# dari program. :ika ditemukan klausa $ang cocok dengan goal% maka
akan mengikat nilai $ang ada pada klausa ke &ariabel bebas sehingga goal dan
klausa identik% dan goal bisa dikatakan bersatu "unify# dengan klausa. )perasi
pencocokan ini dinamakan uniikasi.
Mari kita lihat langkah satu persatu bagaimana Visual Prolog memenuhi
goal $ang diberikan.
1. Darena ; dan J &ariabel bebas dari goal dan &ariabel bebas dapat
diuniikasikan ke &ariabel manapun dari argumen "bahkan ke &ariabel bebas
$ang lain#% maka pemanggil "goal# dapat diuniikasikan dengan klausa
&itulis'ole) $ang pertama pada program% seperti berikutB
&itulis'ole)( 1 , 2 ).
R R
&itulis'ole)(em)a, -Ear(esot .ertutur-).
maka Visual Prolog akan membuat pencocokan% 1 diikat ke em)a dan 2 diikat
ke SMarkesot <ertuturS. Pada titik ini% Visual Prolog akan menampilkanB
16em)a, 26Ear(esot .ertutur
2. Darena Prolog akan mencari semua kemungkinan solusi% maka goal juga akan
diuniikasikan ke klausa &itulis'ole) $ang kedua pada program% $aitu
&itulis'ole)((a)lil, Sang %abi) dan Visual Prolog akan
menampilkanB
16(a)lil, 26Sang %abi
7 Solutions
7ntuk lebih dapat memahami uniikasi% diberikan goal $ang lebih
kompleks $aitu bu(u'tebal(1).% dan kita lihat langkahn$a satu persatuB
1. Pertama kali Visual Prolog akan mencari akta atau head dari rule $ang cocok
dengan goal% maka ditemukan bu(u'tebal(Vu&ul). Demudian mencari pada
klausa tersebut untuk menguniikasi argumenn$a. Darena 1 &ariabel bebas%
maka 1 dapat diuniikasikan ke &ariabel manapun. Vu&ul juga merupakan
&ariabel bebas dari head rule bu(u'tebal% maka terjadi uniikasi antara 1 dan
Vu&ul% sehingga 16Vu&ul.
2. 6oal $ang cocok dengan head dari rule dan uniikasi membuat Visual Prolog
melanjutkan pengujian pada bagian body dari rule. 7ntuk menguji body dari
rule% maka akan dipanggil subgoal $ang pertama dari body tersebut% $aitu
LABORATORIUM TERPADU +TIK UNMUL
20
Modul 4. 7niikasi dan Lacakbalik
&itulis'ole)(', Vu&ul). Perhatikan bah+a untuk mencari buku $ang tebal
kita tidak perlu mengetahui siapa pengarang buku tersebut. 7ntuk itu &ariable
anonim "?F@# muncul di posisi argumen $engarang. Prolog kemudian akan
mencari kecocokan dari subgoal ini mulai dari bagian atas program hingga ke
bagian ba+ah% maka pertama kali ditemukanB
&itulis'ole)( ' , Vu&ul ).
R R
&itulis'ole)(em)a, Ear(esot .ertutur).
'ehingga &ariabel Vu&ul akan diikat ke nilai ?Ear(esot .ertutur dan
subgoal berikutn$a akan dipanggil% $aitu bu(u(Vu&ul, #ebal).
3. Visual Prolog sekarang akan memulai pencarian untuk melakukan
pencocokan pemanggil bu(u. Darena Vu&ul telah diikat dengan nilai
Ear(esot bertutur% maka pemanggilan $ang sebenarn$a adalah
bu(u(Ear(esot .ertutur, #ebal). 'ekali lagi Visual Prolog akan
mencari dari atas sampai ke ba+ah dari program. Pada kesempatan pertama
akan melakukan pencocokan pada klausa bu(u(Sang %abi, ;87) dan
gagal.
4. Darena gagal% maka Visual Prolog akan mencoba ke klausa $ang kedua $aitu
bu(u(Ear(esot .ertutur, 8;K) dan karena nilai argumen ju&ul dari
klausa cocok dengan dengan subgoal $ang memanggil% kemudian Visual
Prolog akan mengikat &ariabel #ebal ke nilai 8;K. 'elanjutn$a Visual Prolog
akan memanggil subgoal berikutn$a.
!. 'ubgoal terakhir dari body rule bu(u'tebal% $aitu #ebal S 8KK. Visual
Prolog melakukan perbandingan apakah .ebal $ang telah diikat nilain$a ke
8;K lebi) besar nilain$a dari 8KK dan sukses "true#. Pada titik ini semua
subgoal $ang ada pada rule telah sukses "true# sehingga berarti pemanggilan
goal bu(u'tebal(1) juga sukses. Darena &ariabel 1 telah diuniikasi dengan
&ariabel Vu&ul% maka nilai $ang telah diikat ke &ariabel Vu&ul pada +aktu
pemanggilan rule juga akan diikat ke &ariabel 1. Vu&ul mempun$ai nilai
Ear(esot bertutur ketika rule sukses dijalankan% maka Visual Prolog
akan menampilkanB
16Ear(esot .ertutur
; Solution
5da beberapa hal penting dalam proses pencocokan atau uniikasi% $aituB
Pada +aktu Prolog berusaha untuk memenuhi sebuah goal% Prolog
memulain$a dari bagian paling atas "top# dari program dalam rangka mencari
pencocokan.
Detika sebuah panggilan baru terjadi% pencarian pencocokan juga dimulai dari
bagian paling atas dari program.
Detika sebuah panggilan mengalami pencocokan $ang sukses% pemanggil
kembali "is said to return#% dan giliran subgoal berikutn$a diuji.
LABORATORIUM TERPADU +TIK UNMUL
2H
Modul 4. 7niikasi dan Lacakbalik
Detika suatu &ariabel telah diikat "bound# pada sebuah klausa% cara(cara satu(
satun$a untuk membebaskan ikatan tersebut adalah melalui lacakbalik
"backtracking#.
%. La0a')ali' (+ac.trac.in")
Pada +aktu men$elesaikan masalah% seringkali% seseorang harus
menelusuri suatu jalur untuk mendapatkan konklusi $ang logis. :ika konklusi ini
tidak memberikan ja+aban $ang dicari% orang tersebut harus memilih jalur $ang
lain. Perhatikan permainan ma/e berikut. 7ntuk mencari jalan keluar dari ma/e%
seseorang harus selalu mencoba jalur sebelah kiri terlebih dahulu pada setiap
percabangan hingga menemukan jalan buntu. Detika menemukan jalan buntu
maka orang tersebut harus kembali ke percabangan terakhir "back#up# untuk
mencoba lagi "try again# ke jalur kanan dan jika menemukan percabangan lagi
maka tetap harus mencoba jalur kiri terlebih dahulu. :alur kanan han$a akan
sekali(sekali dipilih. Dengan begitu orang tersebut akan bisa keluar dari ma/e% dan
memenangkan permainan.
Metode balik(ke(atas(dan(coba(lagi "backing#up#and#trying#again# ini
pada Visual Prolog disebut lacakbalik "backtracking#. Visual Prolog
menggunakan metode ini untuk menemukan suatu solusi dari permasalahan $ang
diberikan.Visual Prolog dalam memulai mencari solusi suatu permasalahan "atau
goal# harus membuat keputusan di antara kemungkinan(kemungkinan $ang ada.
1a menandai di setiap percabangan "dikenal dengan titik lacak balik# dan memilih
subgoal pertama untuk telusuri. :ika subgoal tersebut gagal "eki&alen dengan
menemukan jalan buntu#% Visual Prolog akan lacakbalik ke titik lacakbalik "back#
tracking point# terakhir dan mencoba alternati subgoal $ang lain.
5gar jelasn$a diberikan contoh program berikutB
BC "onto) 7
000000000000CB
PRE!"A#ES
non&eterm jenis(s*mbol, s*mbol)
non&eterm a&ala)(s*mbol, s*mbol)
)i&u$(s*mbol, s*mbol)
LABORATORIUM TERPADU +TIK UNMUL
22
M5'7D
D
E
L
7
5
>
Modul 4. 7niikasi dan Lacakbalik
non&eterm &a$at'berenang(s*mbol)
"LA,SES
jenis(:ertebrata,)ewan).
jenis(i(an,)ewan).
a&ala)(Debra,:ertebrata).
a&ala)(lele,i(an).
a&ala)(tuna,i(an).
)i&u$(Debra,&i'&arat).
)i&u$((o&o(,&i'&arat).
)i&u$((o&o(,&i'air).
)i&u$(tuna,&i'air).
&a$at'berenang(2)/0
jenis(1,)ewan),
a&ala)(2,1),
)i&u$(2,&i'air).
GOAL
&a$at'berenang(A$a).
7ntuk mengetahui terjadin$a lacakbalik% akan diamati langkah demi
langkah bagaimana Visual Prolog mencari solusi dari goal $ang diberikan.
1. Visual Prolog memanggil $re&i(at &a$at'berenang dengan &ariabel bebas
A$a. 7ntuk mencoba menja+ab panggilan ini% Visual Prolog mencari di
program untuk pencocokan. Ditemukan kecocokan dengan klausa
&a$at'berenang% dan &ariabel A$a diuniikasikan dengan &ariabel 2.
2. Demudian% Visual Prolog berusaha untuk memenuhi bagian body dari rule*
7ntuk melakukann$a% Visual Prolog memanggil subgoal $ang pertama pada
body dari rule tersebut $aitu jenis(1, )ewan)% dan mencari pencocokan
untuk panggilan ini. Ditemukan pencocokan dengan akta pertama dari klausa
relasi jenis. Pada titik ini 1 diikat dengan nilai :ertebrata. Demudian
Visual Prolog menset titik lacakbalik pada akta jenis(:ertebrata,)ewan).
3. Dengan 1 diikat pada nilai :ertebrata% Visual Prolog membuat panggilan
untuk subgoal $ang kedua $aitu a&ala)(2, :ertebrata)% dan mencari
pencocokan. Dan menemukan dengan akta $ang pertama a&ala)(Debra,
:ertebrata). 2 diikat dengan nilai Debra dan Prolog menset titik lacakbalik
pada a&ala)(Debra, :ertebrata).
4. Demudian Prolog mencoba untuk memenuhi subgoal $ang terakhir $aitu%
)i&u$(Debra, &i'air). Darena tidak ditemukan akta tersebut maka
panggilan gagal dan Prolog memulai lacakbalik untuk menemukan solusi lain.
!. Detika Visual Prolog lacakbalik% proses kembali ke titik lacakbalik terakhir.
Pada kasus ini% titik lacakbalik terakhir berada pada subgoal $ang kedua dari
rule $aitu akta a&ala)(Debra, :ertebrata).
0. Detika Visual Prolog berada pada titik lacakbalik% ia akan membebaskan
&ariabel $ang diberi nilai pada titik lacakbalik tersebut dan berusaha mencari
ja+aban lain untuk panggilan tersebut dalam kasus ini a&ala)(2,
:ertebrata).
LABORATORIUM TERPADU +TIK UNMUL
2,
Modul 4. 7niikasi dan Lacakbalik
H. Visual Prolog melanjutkan pencarian ke ba+ah dari titik lacakbalik tersebut
untuk pencocokan klausa $ang lain. Darena tidak ada klausa $ang ditemukan%
maka terjadi lacak balik dan proses kembali ke titik lacakbalik terakhir $aitu
di jenis(:ertebrata, )ewan).
2. Visual Prolog membebaskan &ariabel dan mencoba untuk menemukan solusi
lain dari panggilan jenis(1, )ewan). Pencarian dimulai setelah titik
lacakbalik dan menemukan kecocokan dengan akta jenis di program pada
klausa jenis(i(an, )ewan). 1 kemudian diikat pada nilai i(an% dan titik
lacakbalik baru di set pada akta tersebut.
,. Demudian Visual Prolog bergerak ke subgoal berikutn$a pada rule. Darena ini
panggilan baru% maka pencarian dimulai dari bagian atas program dengan
panggilan a&ala)(2, i(an). Visual Prolog menemukan kecocokan dengan
panggilan ini. 2 diikat dengan nilai lele% dan sebuah titik lacakbalik baru
diset pada akta a&ala)(lele, i(an).
13. Darena 2 diikat dengan nilai lele% panggilan subgoal berikutn$a adalah
)i&u$(lele, &i'air). Darena panggilan baru% maka pencarian dimulai dari
bagian atas program. Prolog mencoba setiap akta namun gagal menemukan
kecocokan dan subgol din$atakan gagal.
11. Visual Prolog% kemudian kembali ke titik lacakbalik terakhir $aitu pada
a&ala)(lele, i(an). Variabel $ang diikat pada pencocokan ini kemudian
dibebaskan. <eranjak dari titik ini% Visual Prolog mencari solusi baru untuk
panggilan a&ala)(2, i(an).
12. Visual Prolog menemukan kecocokan dengan klausa a&ala) berikutn$a. 2
kemudian diikat dengan simbol tuna. Demudian Visual Prolog mencoba lagi
subgoal $ang terakhir dengan &ariabel 2 diikat pada nilai tuna. Panggilann$a
menjadi )i&u$(tuna, &i'air). Pencarian kembali dimulai dari bagian atas
program karena merupakan panggilan baru dan menemukan kecocokan
dengan akta $ang ada dan subgoal terakhir sukses "true#.
13. Pada titik ini% body dari rule &a$at'berenang dapat dipenuhi. Visual Prolog
mengembalikan nilai 2 pada pemanggil "goal# &a$at'berenang(A$a).
Darena A$a diikat nilain$a ke 2 dan 2 diikat nilain$a tuna% maka sekarang
A$a juga diikat nilain$a ke tuna pada goal tersebut. Visual Prolog kan
menampilkan ja+abanB
A$a6tuna
; Solution.
dan program berhenti dengan sukses.
7ntuk melihat lebih jelasn$a proses lacakbalik pada contoh di atas dapat
dilihat pada gambar berikutB
LABORATORIUM TERPADU +TIK UNMUL
33
Modul 4. 7niikasi dan Lacakbalik
<erikut ini beberapa prinsip dasar lacakbalik dari contoh di atasB
1. 'ubgoal harus dipenuhi/diuji dari urutan paling atas "top# sampai ke bagian
paling ba+ah "bottom#.
2. Dlausa predikat diuji dalam urutan menurut kemunculann$a di program $aitu
dari atas ke ba+ah.
3. Detika suatu subgoal cocok dengan bagian head dari rule% maka body dari
rule tersebut berikutn$a juga harus dipenuhi/diuji. <agian body dari rule
merupakan sekumpulan subgoal baru $ang kemudian juga harus
dipenuhi/diuji.
4. 'uatu goal dikatakan terpenuhi "true# ketika suatu akta $ang cocok
ditemukan untuk setiap titik ekstrim dari pohon goal tersebut.
'uatu panggilan $ang menghasilkan solusi jamak disebut non(
deterministik "kata kuncin$a o*#$#r"# sedangkan suatu panggilan $ang han$a
menghasilkan satu dan han$a satu solusi dinamakan deterministik.
LABORATORIUM TERPADU +TIK UNMUL
31
R,LE / &a$at'berenang(A$a)/0
jenis(1,)ewan),
a&ala)(A$a,1),
)i&u$(A$a,&i'air).
"ALL / jenis(1,)ewan)
"O"O4 / jenis(:ertebrata,)ewan)
"ALL / a&ala)(2,:ertebrata)
"O"O4 / jenis(Debra,:ertebrata)
C
C
"ALL / )i&u$(Debra,&i'air)
GAGAL / )i&u$(Debra,&i'air)
REO / a&ala)(2,:ertebrata)
GAGAL / a&ala)(2,:ertebrata)
REO / jenis(1,)ewan)
"O"O4 / jenis(i(an,)ewan)
"ALL / a&ala)(2,i(an)
"O"O4 / jenis(lele,i(an)
"ALL / )i&u$(lele,&i'air)
GAGAL / )i&u$(lele,&i'air)
C
REO / a&ala)(2,i(an)
"O"O4 / jenis(tuna,i(an)
"ALL / )i&u$(tuna,&i'air)
"O"O4 / )i&u$(tuna,&i'air)
Variabel A$a
&iuni>i(asi(an
(e :ariabel 2
1 &ii(at (e
:ertebrata
2 &ii(at (e
Debra
#i&a(
+o+o(
#i&a( a&a
*g +o+o( lagi ut(
$anggilan ini
1 &ii(at (e
i(an
2 &ii(at (e
lele
#i&a(
"o+o(
2 &ii(at (e
tuna
Variabel A$a
&ii(at (e tuna
Modul 4. 7niikasi dan Lacakbalik
(. P#g#*alia /ros#s la0a')ali'
Mekanisme lacak balik dapat menghasilkan pencarian $ang tidak perlu%
akibatn$a program menjadi tidak eisien. Misaln$a adan$a beberapa ja+aban
$ang muncul ketika kita han$a membutuhkan solusi tunggal dari masalah $ang
diberikan. Pada kasus lain% suatu kebutuhan untuk memaksa Visual Prolog untuk
melanjutkan mencari ja+aban tambahan +alaupun goal tersebut sudah terpenuhi.
7ntuk kasus(kasus tersebut% kita harus mengontrol proses lacakbalik.
Visual Prolog men$ediakan 2 alat $ang memperbolehkan kita untuk
mengendalikan mekanisme lacak balik $aitu predikat -ail $ang digunakan untuk
memaksa lacakbalik dan predikat c!t "ditandai dengan @# $ang digunakan untuk
mencegah lacakbalik.
Pr#*i'a$ -ail
Visual Prolog akan memulai lacakbalik jika ada panggilan $ang gagal.
Pada situasi tertentu% ada kebutuhan untuk memaksa lacakbalik dalam rangka
mencari alternati solusi. Visual Prolog men$ediakan predikat khusus -ail untuk
memaksa kegagalan sehingga memicu terjadin$a lacakbalik. Eek dari -ail sama
dengan eek memberikan perbandingan 768 atau subgoal $ang tidak mungkin
"impossible# lainn$a. Aontoh berikut ini mengilustrasikan penggunaan predikat
tersebut.
BC "onto) 8
000000000000CB
OEA!%S
nama 6 s*mbol
PRE!"A#ES
non&eterm a*a)(nama, nama)
setia$'orang
"LA,SES
a*a)(sunarto,+i+i).
a*a)(an&i,u&in).
a*a)(rolan&,*ansen).
setia$'orang/0
a*a)(1,2),
write(1,- a&ala) a*a) -,2,-Wn-),
>ail.
setia$'orang.
GOAL
setia$'orang.
Detika goal internal sudah sukses% tidak ada $ang memberitahu Visual
Prolog untuk melakukan lacakbalik. 5kibatn$a% pemanggilan internal a$a han$a
akan menghasilkan solusi tunggal. 'ehingga digunakan -ail pada predikat
setiap/oran" seperti pada contoh program di atas untuk memaksa lacakbalik dan
dengan demikian menemukan semua ja+aban $ang mungkin.
LABORATORIUM TERPADU +TIK UNMUL
32
Modul 4. 7niikasi dan Lacakbalik
Pr#*i'a$ '!t (@)
Visual Prolog memiliki cut $ang digunakan untuk mencegah lacakbalik%
ditulis berupa sebuah tanda seru "T#. Eek dari cut adalah sederhana% $aitu tidak
akan memungkinkan terjadin$a lacakbalik mele+ati sebuah cut.
Dita menempatkan cut dalam program sama persis seperti menempatkan
sebuah subgoal pada body dari suatu rule. Detika proses mele+ati cut% pemanggil
ke cut din$atakan sukses dan subgoal berikutn$a "jika ada# dipanggil. 'ekali
sebuah cut dile+ati% adalah menjadi tidak mungkin untuk melakukan lacakbalik
pada subgoal $ang berada pada sebelum cut pada klausa $ang sedang diproses
dan adalah menjadi tidak mungkin untuk melakukan lacakbalik ke predikat lain
$ang mendeinisikan predikat $ang sekarang diproses "predikat $ang mengandung
cut#. <erikut ini contoh penggunaan cut.
BC "onto) M
000000000000CB
PRE!"A#ES
beli'mobil(s*mbol,s*mbol)
non&eterm mobil(s*mbol,s*mbol,integer)
warna(s*mbol,s*mbol)
"LA,SES
beli'mobil(Eo&el,3arna)/0
mobil(Eo&el,3arna,Targa),
warna(3arna,se(si),X,
Targa Q 7LKKK.
mobil(>errari,)ijau,7LKKK).
mobil(jaguar,)itam,7MKKK).
mobil(jaguar,mera),7HKKK).
mobil($ors+)e,mera),7MKKK).
warna(mera),se(si).
warna()itam,wibawa).
warna()ijau,seju().
GOAL
beli'mobil(jaguar, 2).
Pada contoh di atas goaln$a adalah mencari mobil :aguar $ang
mempun$ai +arna seksi dengan harga $ang tidak terlalu mahal. (ut $ang ada
pada rule beli'mobil mempun$ai asumsi bah+a han$a satu :aguar $ang
mempun$ai +arna seksi $ang ada di database dan jika hargan$a terlalu tinggi
maka tidak perlu mencari mobil $ang lain. 7ntuk melihat bagaimana cut
mempengaruhi proses% kita program di atas langkah demi langkah.
1. Visual Prolog memanggil mobil% subgoal pertama dari predikat beli'mobil.
2. .es pada mobil pertama% >errari menghasilkan gagal.
3. Demudian tes klausa mobil selanjutn$a menemui kecocokan dan mengikat
&ariabel 3arna ke nilai )itam.
LABORATORIUM TERPADU +TIK UNMUL
33
Modul 4. 7niikasi dan Lacakbalik
4. Darena berhasil% maka akan memanggil subgoal berikutn$a apakah +arna
mobil $ang dipilih adalah +arna seksi. Citam bukan +arna seksi pada
program sehingga tes gagal.
!. Visual Prolog lacakbalik ke pemanggil mobil dan sekali lagi mencari sebuah
Vaguar $ang memenuhi kriteria.
0. Demudian ditemukan dan sekali lagi menguji +arna mobil tersebut. Dali ini
+arnan$a adalah seksi dan Prolog melanjutkan ke subgoal berikutn$a pada
rule $aitu cut. (ut kemudian sukses dan secara eekti ?membekukan@
&ariabel $ang diikat pada klausa sebelumn$a.
H. Visual Prolog sekarang melanjutkan ke subgoal selanjutn$a "terakhir# pada
rule $aitu perbandinganB
Targa Q 7LKKK.
7ji ini gagal dan Visual Prolog akan melakukan lacakbalik dalam rangka
untuk mencari mobil $ang lain untuk diuji. -amun karena adan$a cut $ang
mencegah terjadin$a lacakbalik% maka tidak ada jalan lain lagi untuk subgoal
$ang terakhir dan goal berhenti pada kondisi gagal "failure#.
.. Pr#*i'a$ Not
Program berikut memperlihatkan bagaimana penggunaan predikat not
untuk mengidentiikasikan seorang mahasis+a teladan $aitu mahasis+a $ang
mempun$ai 1ndeks Prestasi Dumulati "1PD# minimal 3%! dan tidak sedang dalam
masa percobaan "sedang menjalani masa hukuman karena melakukan tindak
kejahatan#.
BC "onto) L
000000000000CB
OEA!%S
nama 6 s*mbol
i$( 6 real
PRE!"A#ES
non&eterm ma)asiswa'tela&an(nama)
non&eterm ma)asiswa(nama, i$()
masa'$er+obaan(nama)
"LA,SES
ma)asiswa'tela&an(%ama)/0
ma)asiswa(%ama, !P4),
!P4S68.L,
not(masa'$er+obaan(%ama)).
ma)asiswa(-Vina Pan&uwinata-, 8.L).
ma)asiswa(-Telmi 2a)*a-, 7.K).
ma)asiswa(-S*a)rul Gunawan-, 8.I).
masa'$er+obaan(-Vina Pan&uwinata-).
masa'$er+obaan(-Telmi 2a)*a-).
GOAL
LABORATORIUM TERPADU +TIK UNMUL
34
Modul 4. 7niikasi dan Lacakbalik
ma)asiswa'tela&an(1).
5da satu catatan ketika menggunakan not $aitu predikat not akan sukses
ketika subgoal tidak bisa dibuktikan kebenarann$a. Cal ini untuk mencegah suatu
situasi &ariabel $ang belum diikat akan diikat menggunakan not. :ika subgoal
dengan &ariabel bebas dipanggil melalui not% maka Visual Prolog akan
mengeluarakan pesan kesalahan Yree :ariables not allowe& in @notA or
@retra+tallA.
1. PRAKTIK
1. Detik program pada dasar teori "Aontoh 1 s.d. Aontoh !#
2. 7ji masing(masing goal tersebut dan lihat hasiln$a.
D. PERTAN8AAN9TUGAS
Diberikan program sebagai berikutB
OEA!%S
nama,jen&er,$e(erjaan,ben&a,alasan,Dat 6 s*mbol
umur6integer
PRE!"A#ES
non&eterm orang(nama, umur, jen&er, $e(erjaan)
non&eterm seling(u)(nama, nama)
terbunu)'&engan(nama, ben&a)
terbunu)(nama)
non&eterm $embunu)(nama)
moti>(alasan)
terno&ai(nama, Dat)
mili((nama, ben&a)
non&eterm +ara'(erja'miri$(ben&a, ben&a)
non&eterm (emung(inan'mili((nama, ben&a)
non&eterm &i+urigai(nama)
BC C C Ya(ta0>a(ta tentang $embunu)an C C CB
"LA,SES
orang(bu&i,LL,m,tu(ang'(a*u).
orang(al&i,7L,m,$emain'se$a('bola).
orang(al&i,7L,m,tu(ang'jagal).
orang(joni,7L,m,$en+o$et).
seling(u)(ina,joni).
seling(u)(ina,bu&i).
seling(u)(siti,joni).
terbunu)'&engan(siti,$entungan).
terbunu)(siti).
moti>(uang).
moti>(+emburu).
moti>(&en&am).
terno&ai(bu&i, &ara)).
LABORATORIUM TERPADU +TIK UNMUL
3!
Modul 4. 7niikasi dan Lacakbalik
terno&ai(siti, &ara)).
terno&ai(al&i, lum$ur).
terno&ai(joni, +o(lat).
terno&ai(ina, +o(lat).
mili((bu&i,(a(i'$alsu).
mili((joni,$istol).
BC C C .asis Pengeta)uan C C CB
+ara'(erja'miri$((a(i'$alsu, $entungan).
+ara'(erja'miri$(balo(, $entungan).
+ara'(erja'miri$(gunting, $isau).
+ara'(erja'miri$(se$atu'bola, $entungan).
(emung(inan'mili((1,se$atu'bola)/0
orang(1,',',$emain'se$a('bola).
(emung(inan'mili((1,gunting)/0
orang(1,',',$e(erja'salon).
(emung(inan'mili((1,.en&a)/0
mili((1,.en&a).
BC C C C C C C C C C C C C C C C C C C C C C C C C C C C C
C &i+urigai semua orang *ang memili(i senjata *ang C
C (erjan*a miri$ &engan senjata $en*ebab siti terbunu). C
C C C C C C C C C C C C C C C C C C C C C C C C C C C C CB
&i+urigai(1)/0
terbunu)'&engan(siti,Senjata) ,
+ara'(erja'miri$(.en&a,Senjata) ,
(emung(inan'mili((1,.en&a).
BC C C C C C C C C C C C C C C C C C C C C C C C C C
C &i+urigai la(i0la(i *ang seling(u) &engan siti. C
C C C C C C C C C C C C C C C C C C C C C C C C C CB
&i+urigai(1)/0
moti>(+emburu),
orang(1,',m,'),
seling(u)(siti,1).
BC C C C C C C C C C C C C C C C C C C C C C C
C &i+urigai $erem$uan *ang seling(u) &engan C
C la(i0la(i *ang juga seling(u) &engan siti C
C C C C C C C C C C C C C C C C C C C C C C CB
&i+urigai(1)/0
moti>(+emburu),
orang(1,',>,'),
seling(u)(1,La(ila(i),
seling(u)(siti,La(ila(i).
BC C C C C C C C C C C C C C C C C C C C C C C C C C C
C &i+urigai $en+o$et *ang mem$un*ai moti> uang. C
C C C C C C C C C C C C C C C C C C C C C C C C C C CB
&i+urigai(1)/0
LABORATORIUM TERPADU +TIK UNMUL
30
Modul 4. 7niikasi dan Lacakbalik
moti>(uang),
orang(1,',',$en+o$et).
$embunu)(Pembunu))/0
orang(Pembunu),',','),
terbunu)(#erbunu)),
#erbunu) QS Pembunu), BC .u(an bunu) &iri CB
&i+urigai(Pembunu)),
terno&ai(Pembunu),Zat),
terno&ai(#erbunu),Zat).
GOAL
$embunu)(1).
.erangkan langkah demi langkah bagaimana Visual Prolog memberikan ja+aban
terhadap goal tersebut "melalui proses uniikasi dan lacak balik#.
LABORATORIUM TERPADU +TIK UNMUL
3H
Modul !. Data Ob"ect 'ederhana dan :amak
MODUL 3
DATA O+0E'T SEDER>ANA DAN JAMAK
(SIMPLE DAN 'OMPOUND DATA O+0E'T)
A. TUJUAN
1. Mengerti dan dapat mengimplementasikan data ob"ect sederhana dan jamak.
2. Mengerti apa $ang dimaksud dengan functor pada data ob"ect jamak.
3. Mengerti proses uniikasi pada data ob"ect jamak.
B. DASAR TEORI
Da$a O#1ect S#*#r7aa *a Ja"a'
1. Da$a O#1ect s#*#r7aa
Data ob"ect sederhana terdiri dari 2 $aitu &ariabel atau konstanta.
Donstanta $ang dimaksud tidak sama dengan konstanta simbolis $ang ditulis di
section 0os$a$s pada bagian program. Jang dimaksud dengan konstanta di sini
adalah apapun $ang diidentiikasikan sebagai sebuah ob"ect bukan sub"ect $ang
nilain$a bisa ber&ariasi% seperti sebuah karakter "07ar#% angka "integer atau real#
atau sebuah a$o" "s$mbol atau string#.
Varia)#l
Variable harus dimulai dengan sebuah huru kapital "5 ..U# atau sebuah
underscore " F #. 'ebuah underscore tunggal merepresentasikan sebuah &ariable
anonim. Variabel dalam prolog bersiat lokal bukan global% oleh karena itu jika
ada dua klausa $ang mengandung sebuah &ariabel ; maka ; pada kedua klausa
tersebut adalah &ariabel $ang berbeda.
Kos$a$a
Donstanta meliputi karakter% angka% dan atom. 'uatu nilai konstanta juga
merupakan nama dari konstanta tersebut. Donstanta 2 merepresentasikan angka 2
dan konstanta )alo merepresentasikan simbol halo.
Kara'$#r
Darakter bertipe 07ar% $aitu karakter(karakter $ang bisa tercetak "5'A11 32 V
12H#% karakter angka "3 V ,#% huru kecil "a V 8#% huru kapital "5 V U# dan
tanda baca. Donstanta karakter ditulis dengan diapit oleh tanda petik tunggal
"W#. Aontoh B @aA, @CA, @[@, @3A.
:ika kita menginginkan sebuah backslash atau petik tunggal menjadi karakter
menuliskann$a harus didahului dengan sebuah tanda backslash. Aontoh B @WWA
(ba+(slas)), @WAA (tan&a $eti( tunggal). <eberapa karakter
mempun$ai ungsi khusus ketika didahului oleh karakter escape " = #. Aontoh B
@WnA (ganti baris), @WtA (tabulasi).
Donstanta karakter dapat juga ditulis berdasarkan kode 5'A11(n$a% dengan
didahului backslash. Aontoh B @WHMA (\), @W<KA (Z)
Ag'a
LABORATORIUM TERPADU +TIK UNMUL
32
Modul !. Data Ob"ect 'ederhana dan :amak
5ngka merupakan salah satu dari integer atau real.
A$o"
'ebuah atom terdiri dari sebuah simbol atau sebuah string. Perbedaan antara
simbol dan string berkaitan dengan representasi dan implementasi mesin.
Visual Prolog melakukan kon&ersi tipe otomatis diantara domain string dan
domain simbol. :adi simbol dapat digunakan untuk domain string dan string
dapat digunakan untuk domain simbol. -amun string din$atakan sebagai
sesuatu $ang berada diantara tanda petik ganda sedang simbol tidak
membutuhkan tanda petik ganda.
'imbol dimulai dengan sebuah huru kecil dan han$a boleh berisikan huru%
angka% dan underscore* 'tring adalah sesuatu $ang diapit tanda petik ganda
dan berisikan kombinasi dari karakter% kecuali 5'A11 -7LL "3#% $ang dipakai
untuk menandai akhir dari string.
%. Da$a o)�$ &a"a'
Data object jamak memperlakukan beberapa inormasi sebagai sebuah item
tunggal. Aontohn$a B tanggal 1 desember 1,,,. .anggal tersebut terdiri dari 3
jenis inormasi $aitu hari% bulan dan tahun. Deklarasi suatu domain $ang
mengandung data object jamak tanggal B
OEA!%S
tanggal'jama( 6 tanggal(unsigne&, string, unsigne&)
dan kemudian pada section AL57'E' dapat dituliskan B
# 6 tanggal(;,&esember,;<<<).
Penulisan ini mirip dengan penulisan suatu akta tetapi ini bukan akta. 1ni adalah
sebuah data object. Data object dimulai dengan sebuah nama $ang biasa disebut
unctor "dalam contoh adalah tanggal# $ang diikuti oleh 3 argumen. 'ebuah
unctor dalam Visual Prolog tidak seperti sebuah ungsi pada bahasa
pemrograman lain. 9unctor tidak melakukan apa(apa% han$a sebuah nama $ang
mengidentiikasi sebuah jenis data object jamak $ang didalamn$a terdapat
argumen. 5rgumen dari sebuah data object jamak bisa dalam bentuk data object
jamak pula. AontohB
tanggal 6 tanggal(unsigne&, string, unsigne&)
orang 6 orang(nama$ertama, nama(e&ua)
ulangta)un 6 ulangta)un(orang,tanggal)
Aontoh Program $ang menggunakan data object jamak adalahB
OEA!%S
orang 6 orang(nama,alamat)
nama 6 nama($ertama,(e&ua)
alamat 6 alamat(jalan,(ota'(ab,$ro$insi)
jalan 6 jalan(nama'jalan,nomor)
(ota'(ab,$ro$insi,nama'jalan 6 string
$ertama,(e&ua 6 s*mbol
LABORATORIUM TERPADU +TIK UNMUL
3,
Modul !. Data Ob"ect 'ederhana dan :amak
nomor 6 integer
GOAL
P; 6 orang(nama(&iena,>ati)a)),alamat(jalan(-3ija*a 4usuma-,
;7), -Samarin&a-, -4AL#!E-)),
P; 6 orang(nama(',>ati)a)),Alamat),
P7 6 orang(nama(nur,>ati)a)),Alamat),
write(-P;6-,P;),nl,
write(-P76-,P7),nl.
(. D#'larasi Do"ai:1a"/ura Ja"a' ('ompo!nd Mi)2Domain)
Deklarasi domain(campuran jamak bermaksudB
memiliki sebuah argumen dengan kemungkinan lebih dari satu tipe argumenK
memiliki beberapa macam argumen% masing(masing dengan tipe $ang
berbedaK
memiliki beberapa macam argumen% beberapa diantaran$a dengan
kemungkinan lebih dari satu tipe argumen.
5gar suatu predikat Visual Prolog dapat menerima suatu argumen $ang
memberikan inormasi dengan tipe $ang berbeda maka unctor tersebut harus
dideklarasikan. Aontoh berikut memperlihatkan klausa umur $ang dapat
menerima suatu argumen usia dengan tipe $ang berbeda $aitu s$rig% r#al atau
i$#g#r.
OEA!%S
usia 6 i(integer)9 r(real)9 s(string)
PRE!"A#ES
umur(usia)
"LA,SES
umur(i(,S!A))/0 write(,S!A).
umur(r(,S!A))/0 write(,S!A).
umur(s(,S!A))/0 write(,S!A).
Visual Prolog tidak memperbolehkan deklarasi domain sebagai berikutB
OEA!%S
usia 6 integer9 real9 string
<erikut ini merupakan contoh program $ang memperlihatkan deklarasi domain(
campuran jamak.
OEA!%S
ben&a 6 bu(u(ju&ul, $engarang) 9
(u&a(nama) 9 (a$al 9
bu(uban((sal&o)
ju&ul, $engarang, nama 6 s*mbol
sal&o 6 real
PRE!"A#ES
non&eterm mili((nama,ben&a)
LABORATORIUM TERPADU +TIK UNMUL
43
Modul !. Data Ob"ect 'ederhana dan :amak
"LA,SES
mili((erwin, bu(u(-Ear(esot .ertutur-, -Em)a Ainun %ajib-)).
mili((erwin, (u&a(buraG)).
mili((erwin, (a$al).
mili((erwin, bu(uban((;KKK)).
GOAL
mili((erwin, .en&a).
1. PRAKTIK
1. Detik program berikutB
OEA!%S
nama 6 orang(s*mbol,s*mbol) BC (Pertama , 4e&ua) CB
)ari'la)ir 6 tanggal'la)ir(integer,s*mbol,integer) BC (Tari, .ulan, #a)un) CB
tele$on 6 s*mbol BC %omor tele$on CB
PRE!"A#ES
non&eterm &a>tar'tele$on(nama,s*mbol,)ari'la)ir)
*ang'ulang'ta)un'bulan'ini
(on:ersi'bulan(s*mbol,integer)
+e('bulan'ulang'ta)un(integer,)ari'la)ir)
+eta('orang(nama)
"LA,SES
*ang'ulang'ta)un'bulan'ini/0
write(-CCCC a>tar Orang 2ang ,lang #a)un .ulan !ni CCCC-),nl,
write(- %ama PertamaWtWt %ama 4e&uaWn-),
write(-CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC-),nl,
&ate(', .ulan'ini, '), BC Ambil bulan $a&a sistem (om$uter CB
&a>tar'tele$on(Orang, ', #anggal),
+e('bulan'ulang'ta)un(.ulan'ini, #anggal),
+eta('orang(Orang),
>ail.
*ang'ulangta)un'bulan'ini/0
write(-WnWn #e(an sembarang tombol...-),nl,
rea&+)ar(').
+eta('orang(orang(Pertama,4e&ua))/0
write(- -,Pertama,-WtWtWt -,4e&ua),nl.
+e('bulan'ulang'ta)un(.ul,tanggal'la)ir(',.ulan,'))/0
(on:ersi'bulan(.ulan,.ulan;),
.ul 6 .ulan;.
&a>tar'tele$on(orang(erwin,e>>en&*),-IHI0JMH8-,tanggal'la)ir(8,jan,;<LL)).
&a>tar'tele$on(orang($ramu&*a,(urniawan),-M8J0JMKK-,tanggal'la)ir(L,>eb,;<JL)).
&a>tar'tele$on(orang((us&iar,$ri)atin),-LLL0LHL8-,tanggal'la)ir(8,mar, ;<8L)).
&a>tar'tele$on(orang(ui,*ansen),-IHI07778-,tanggal'la)ir(7<,a$r,;<L;)).
&a>tar'tele$on(orang(rolan&,)utagalung),-LLL0;7;7-,tanggal'la)ir(;7,ma*,;<H7)).
&a>tar'tele$on(orang(an&i,nuru&&in),-M8J0JMKK-,tanggal'la)ir(;I,jun,;<JK)).
&a>tar'tele$on(orang(s*ari>,musa&e(),-IHI0JMH8-,tanggal'la)ir(7K,jun,;<JH)).
&a>tar'tele$on(orang(li&*a,wi&*awati),-LLL0LHL8-,tanggal'la)ir(;H,jul,;<J;)).
&a>tar'tele$on(orang(*usi&a,an&riani),-IHI07778-,tanggal'la)ir(;K,aug,;<J;)).
&a>tar'tele$on(orang(slamet,ri*a&i),-M8J0JMKK-,tanggal'la)ir(7L,se$,;<J;)).
&a>tar'tele$on(orang(nur,)arjanto),-M8J0JMKK-,tanggal'la)ir(7K,o+t,;<L7)).
&a>tar'tele$on(orang(&ian,marlini),-LLL0;7;7-,tanggal'la)ir(<,no:,;<JM)).
&a>tar'tele$on(orang(tegu),)eni),-IHI07778-,tanggal'la)ir(;L,no:,;<JI)).
&a>tar'tele$on(orang(e(a,ar&i*anti),-M8J0JMKK-,tanggal'la)ir(8;,&e+,;<J;)).
(on:ersi'bulan(jan, ;).
(on:ersi'bulan(>eb, 7).
(on:ersi'bulan(mar, 8).
(on:ersi'bulan(a$r, M).
(on:ersi'bulan(ma*, L).
LABORATORIUM TERPADU +TIK UNMUL
41
Modul !. Data Ob"ect 'ederhana dan :amak
(on:ersi'bulan(jun, H).
(on:ersi'bulan(jul, I).
(on:ersi'bulan(aug, J).
(on:ersi'bulan(se$, <).
(on:ersi'bulan(o+t, ;K).
(on:ersi'bulan(no:, ;;).
(on:ersi'bulan(&e+, ;7).
GOAL
*ang'ulang'ta)un'bulan'ini.
2. 7ji goal tersebut dan perhatikan hasiln$a
3. .ambahkan beberapa klausa &a>tar'tele$on untuk orang $ang bernama ?sri
sugiarti@% ?aldi bad+in@% ?gigi gilang@ dan ?titi coklat@. <erikan nilai untuk bulan
pada predikat tanggal'la)ir sesuai dengan bulan sekarang "pada +aktu
praktikum ini dilakukan# dan nilai $ang lainn$a terserah "temasuk nomor
telepon#.
4. Demudian uji kembali goal tersebut dan perhatikan hasiln$a.
D. PERTAN8AAN9TUGAS
1. 5pa perbedaan data ob"ect sederhana dan jamakG
2. <uatlah program dengan narasi berikut ini "gunakan data ob"ect jamak#B
'uatu semester di 9.1D)M. 5da 3 mata kuliah $ang diajarkan B
a. -ama Mata Duliah B Decerdasan <uatan
DosenB 5bdul Dadir
Program 'tudi B 'istem 1normasi
>uang B 1
b. -ama Mata Duliah B Pemrograman -on Prosedural
DosenB 1ndra Jatini
Program 'tudi B .eknik 1normatika
>uang B 2
c. -ama Mata Duliah B Pemrograman <erbasis )bjek
Dosen B 'igit 5nggoro
Program 'tudi B .eknik Domputer
>uang B 3
Masing(masing matakuliah diikuti 3 orang mahasis+a% $aitu untuk mata kuliah
?Decerdasan <uatan@ diikuti olehB
( -ama B 'ugeng >i$adi
:enis DelaminB Laki(Laki
-1MB2332331
5lamat asalB :l. 'udirman -o. 2% 'amarinda% Dalimantan .imur
( -ama B Julia 'ugondo
:enis DelaminB Perempuan
-1MB2332332
5lamat asalB :l. 5. Jani -o. 13% Makassar% 'ula+esi 'elatan
( -ama B <udiman 'ejati
:enis DelaminB Laki(Laki
-1MB2332333
LABORATORIUM TERPADU +TIK UNMUL
42
Modul !. Data Ob"ect 'ederhana dan :amak
5lamat asalB :l. 'lamet >i$adi -o. 4!% .arakan% Dalimantan 7tarah
7ntuk mata kuliah ?Pemrograman -on Prosedural@ diikuti olehB
( -ama B Laksamana 'ukardi
:enis DelaminB Laki(Laki
-1MB2332334
5lamat asalB :l. M. Car$ono -o. 13% Palembang% 'umatera 'elatan
( -ama B >ini 'u+andi
:enis DelaminB Perempuan
-1MB233233!
5lamat asalB :l. Letjen 'uprapto -o. 12% 'uraba$a% :a+a .imur
( -ama B D+ik Dian 6ie
:enis DelaminB Laki(Laki
-1MB2332330
5lamat asalB :l. *> 'upratman -o. 133% Makasar% 'ula+esi 'elatan
7ntuk mata kuliah ?Pemrograman <erbasis )bjek@ diikuti olehB
( -ama B >iri >e8a
:enis DelaminB Laki(Laki
-1MB233233H
5lamat asalB :l. >* Monginsidi -o. 33% Pur+okerto% :a+a .engah
( -ama B >achel Mar$am
:enis DelaminB Perempuan
-1MB2332332
5lamat asalB :l. )tista -o. 112% <andung% :a+a <arat
( -ama B 6arin -ugroho
:enis DelaminB Laki(Laki
-1MB233233,
5lamat asalB :l. .anjung Pura -o. 131% :a$a Pura% Papua
Dari akta(akta di atas berikan pertan$aan berikutB
1. Aari Mahasis+a $ang mengikuti mata kuliah ?Decerdasan <uatan@ dan
tampilkan dengan men$ertakan nama dosen% ruang kuliah% alamat asal
mahasis+a.
2. Aari mata kuliah apa saja $ang diajarkan pada semester tersebut dan
tampilkan dengan men$ertakan nama mahasis+a $ang mengambil mata
kuliah tersebut% ruang dan nama dosen $ang mengajar.
LABORATORIUM TERPADU +TIK UNMUL
43
Modul 0. Perulangan dan >ekursi
MODUL 6
PERULANGAN DAN REKURSI
(REPETITION AND RE'URSION)
A. TUJUAN
1. Mengerti dan dapat membuat proses perulangan pada Visual Prolog.
2. Mengerti dan dapat membuat proses rekursi.
3. Mengerti apa $ang dimaksud dengan rekursi ekor dan bagaimana
mengimplentasikann$a.
4. Mengetahui dan dapat membuat struktur data rekursi seperti tipe data pohon
"tree#.
B. DASAR TEORI
P#rulaga *a R#'ursi
Domputer memiliki bermacam kemampuan $ang berguna salah satun$a
adalah kemampuan melakukan sesuatu berulang(ulang. Prolog dapat melakukan
perulangan dalam dua hal $aitu berupa prosedur dan struktur data. 1de dari struktur
data repetiti "rekursi# adalah bagaimana menciptakan struktur data $ang ukuran
"si/e# akhirn$a belum diketahui ketika struktur tersebut pertama kali dibuat "create#.
1. Pros#s P#rulaga
Prolog men$ediakan dua jenis perulangan $aitu lacakbalik "mencari
ja+aban jamak dari satu pertan$aan# dan rekursi "prosedur pemanggilan dirin$a
sendiri#.
La0a')ali'
Detika suatu prosedur melakukan lacakbalik% prosedur akan mencari
alternati ja+aban dari sebuah goal $ang sudah terpenuhi. Lacakbalik merupakan
salah satu cara untuk melakukan proses perulangan. <erikut contoh programn$aB
BC "onto) ;
000000000000CB
PRE!"A#ES
non&eterm negara(s*mbol)
+eta('negara
"LA,SES
negara(-!nggris-).
negara(-Peran+is-).
negara(-Verman-).
negara(-enmar(-).
+eta('negara/0
negara(1),
write(1), BC tulis nilai 1 CB
nl, BC ganti baris baru CB
>ail.
+eta('negara.
LABORATORIUM TERPADU +TIK UNMUL
44
Modul 0. Perulangan dan >ekursi
GOAL
+eta('negara.
I"/l#"#$asi La0a')ali' *#ga Loo/
Lacakbalik merupakan cara $ang baik untuk mencari alternati ja+aban
dari sebuah goal. -amun jika suatu goal tidak memiliki alternati ja+aban%
lacakbalik masih dapat digunakan untuk melakukan perualangan. <erikut ini
dideiniskan predikat dua(klausa.
ulang.
ulang/0ulang.
1ni untuk mengakali struktur kendali Prolog agar berpikir bah+a terdapat
sejumlah ja+aban berbeda $ang tak terbatas "cara kerjan$a akan dibahas pada
bagian mengenai rekursi ekor / tail recursion#. Degunaan ulang adalah agar
lacakbalik terjadin$a tak terhingga#. <erikut ini diberikan contoh
implementasin$a.
BC "onto) 7
000000000000CB
PRE!"A#ES
non&eterm ulang
non&eterm mesin(eti(
"LA,SES
ulang.
ulang/0ulang.
mesin(eti(/0
ulang,
rea&+)ar("), BC ba+a sebua) (ara(ter, i(at (e :ariabel " CB
write("),
" 6 OWrO. BC A$a(a) &ite(an Enter5 Gagal ji(a ti&a( CB
GOAL
mesin(eti(,nl.
R#'ursi
Aara lain untuk melakukan perulangan adalah melalui rekursi. Prosedur
rekursi adalah prosedur $ang di dalamn$a ada pemanggilan terhadap dirin$a
sendiri. Prosedur rekursi dapat merekam perkembangann$a karena ia mele+atkan
"passing# pencacah% total% dan hasil sementara sebagai argumen dari satu iterasi ke
iterasi berikutn$a. <erikut ini merupakan contoh program untuk mencari aktorial
dari suatu angka.
BC "onto) 8
000000000000CB
PRE!"A#ES
>a(torial(unsigne&,real)
LABORATORIUM TERPADU +TIK UNMUL
4!
Modul 0. Perulangan dan >ekursi
"LA,SES
>a(torial(;,;)/0X.
>a(torial(1,Ya(to1)/0
2610;,
>a(torial(2,Ya(to2),
Ya(to1 6 1CYa(to2.
GOAL
168,
>a(torial(1,2).
<eberapa keunggulan dari rekursi adalahB
( Dapat mengekspresikan suatu algoritma $ang secara kon&ensional tidak bisa
dilakukan.
( 'ecara logika lebih sederhana dari perulangan lain.
( Digunakan terutama dalam memproses struktur data list.
R#'ursi E'or (Tail Rec!rsion)
>ekursi mempun$ai kelemahan $aitu memakan memori. Detika suatu
prosedur memanggil dirin$a% keadaan pemanggil prosedur dari eksekusi harus
disimpan sehingga prosedur pemanggil dapat meresume keadaan tersebut setelah
prosedur pemanggil selesai. 1ni berarti jika ada suatu prosedur memanggil dirin$a
133 kali% maka ada 133 keadaan dari eksekusi $ang harus disimpan. Deadaan
"state# $ang disimpan tersebut dikenal dengan nama stack frame. 7kuran stack
maksimum pada platorm 10 bit% seperti 1<M(PA dengan sistem operasi D)'%
adalah 04D<$te $ang bisa mengandung sekitar 3333 atau 4333 stack frame. Pada
paltorm 32 bit% secara teoritis bisa sampai ukuran 6iga <$te.
7ntuk mengatasi kelemahan tersebut% maka digunakan optimasi rekursi
ekor "tail recursion optimi/ation#. Diumpamakan% selain memanggil prosedur A%
prosedur < memanggil dirin$a sendiri pada langkah terakhir. Detika prosedur <
memanggil <% stack frame dari pemanggilan < akan ditimpa nilain$a oleh sebuah
stack frame dari pemanggil <% jadi tidak menambah stack frame baru. Can$a
argumen $ang perlu di(update nilain$a dan kemudian proses akan melompat ke
a+al prosedur. Dalam perspekti prosedural adalah sama seperti memperbaharui
&ariabel pengendali perulangan.
'$arat dari rekursi ekor adalahB
( Pemanggil merupakan subgoal terakhir dari klausa tersebut.
( .idak ada titik lacak balik sebelumn$a pada klausa.
<erikut ini merupakan perbaikan dari program mencari aktorial suatu
nilai dengan menggunakan rekursi ekor.
BC "onto) M
000000000000CB
PRE!"A#ES
>a(torial(unsigne&,real)
>a(torial(unsigne&,real,unsigne&,real)
"LA,SES
>a(torial(%,Ya(to%)/0
LABORATORIUM TERPADU +TIK UNMUL
40
Modul 0. Perulangan dan >ekursi
>a(torial(%,Ya(to%,;,;).
>a(torial(%,Ya(to%,%,Ya(to%)/0X.
>a(torial(%,Ya(to%,!,P)/0
!.aru 6 !P;,
P.aru 6 PC!.aru,
>a(torial(%, Ya(to%, !.aru, P.aru).
GOAL
>a(torial(8,1).
%. S$ru'$ur Da$a R#'ursi4
.idak han$a rule $ang bisa rekursi tapi juga struktur data. Prolog
merupakan satu(satun$a bahasa pemrograman $ang digunakan secara luas $ang
memperbolehkan mendeinisikan tipe struktur data rekursi. 'alah satu tipe
struktu data rekursi $aitu struktur data pohon "tree#. Pohon dalam Prolog dapat
dideinsikan sebagai berikutB
OEA!%S
ti$e$o)on 6 $o)on(string, ti$e$o)on, ti$e$o)on)
Deklarasi tersebut men$atakan bah+a sebuah pohon ditulis sebagai sebuah
unctor $o)on $ang argumenn$a adalah sebuah string dan dua tambahan pohon
lainn$a. <erikut ini merupakan contoh program untuk membuat struktur data
pohon.
OEA!%S
ti$e$o)on 6 $o)on(string,ti$e$o)on,ti$e$o)on) 9 em$t*()
BC "onto) L
000000000000CB
PRE!"A#ES
buat'$o)on(string,ti$e$o)on)
sisi$'(iri(ti$e$o)on,ti$e$o)on,ti$e$o)on)
sisi$'(anan(ti$e$o)on, ti$e$o)on, ti$e$o)on)
bentu('$o)on(ti$e$o)on)
"LA,SES
buat'$o)on(A,$o)on(A,em$t*,em$t*)).
sisi$'(iri(1,$o)on(A,',.),$o)on(A,1,.)).
sisi$'(anan(1,$o)on(A,.,'),$o)on(A,.,1)).
bentu('$o)on("a8)/0
buat'$o)on(-")arles-,")),
buat'$o)on(-TaDel-,T),
buat'$o)on(-Ei+)ael-,Ei),
buat'$o)on(-Vim-,V),
buat'$o)on(-Eleanor-,E),
buat'$o)on(-Eelo&*-,Ee),
buat'$o)on(-"at)*-,"a),
sisi$'(iri("), Ei, Ei7),
sisi$'(anan(T, Ei7, Ei8),
sisi$'(iri(V, Ee, Ee7),
LABORATORIUM TERPADU +TIK UNMUL
4H
Modul 0. Perulangan dan >ekursi
sisi$'(anan(E, Ee7, Ee8),
sisi$'(iri(Ei8, "a, "a7),
sisi$'(anan(Ee8, "a7, "a8).
GOAL
bentu('$o)on(Po)on).
Pohon $ang terbentuk dapat digambarkan sebagai berikutB
7ntuk menjelajahi sebuah pohon% algoritma $ang sering digunakan adalahB
( :ika pohon tersebut empty maka tidak melakukan apa(apa.
( :ika tidak% lakukan proses pada titik tersebut% kemudian jelajahi subpohon
sebelah kiri% kemudian jelajahi subpohon sebelah kanan.
Dalam Prolog algoritma tersebut dapat ditulis denganB
jelaja)i(em$t*).
jelaja)i($o)on(1,2,Z)/0
la(u(an sesuatu ter)a&a$ 1,
jelaja)i(2),
jelaja)i(Z).
5lgoritma penjelajahan pohon di atas dikenal dengan depth#first search
"pencarian sampai ke tingkat $ang paling dalam terlebih dahulu# karena akan
bergerak ke ba+ah sejauh mungkin pada tiap percabangan $ang ada kemudian
baru kembali ke atas "backing#up# dan mencoba ke cabang $ang lain "trying
another#.
7ntuk mencoba algoritma tersebut tambahkan predikat
jelaja)(ti$e$o)on) di bagian section P>ED1A5.E' pada program
sebelumn$a dan juga tambahkan klausa berikut pada section AL57'E'B
jelaja)i(em$t*).
jelaja)i($o)on(%ama,4iri,4anan))/0
write(%ama),nl,
jelaja)i(4iri),
jelaja)i(4anan).
Demudian goaln$a diganti menjadiB
GOAL
bentu('$o)on(Po)on),
jelaja)i(Po)on).
LABORATORIUM TERPADU +TIK UNMUL
42
Aath$
Michael Melod$
Aharles Ca8el :im Eleanor
Modul 0. Perulangan dan >ekursi
Penjelajahan pohon tersebut dapat digambarkan sebagai berikut.
1. PRAKTIK
1. Detik program pada Aontoh 1 s.d. Aontoh ! di atas.
2. 7ji masing(masing goal tersebut dan perhatikan hasiln$a.
D. PERTAN8AAN9TUGAS
K#$i' /rogra" *i )a-a7 ii;
OEA!%S
$o)on+)ar 6 $o)on(+)ar, $o)on+)ar, $o)on+)ar)9 a()ir
PRE!"A#ES
non&eterm la(u(an($o)on+)ar)
(erja(an(+)ar, $o)on+)ar, $o)on+)ar)
buat'$o)on($o)on+)ar, $o)on+)ar)
sisi$(+)ar, $o)on+)ar, $o)on+)ar)
+eta('$o)on($o)on+)ar)
non&eterm ulang
"LA,SES
la(u(an(Po)on)/0
ulang,nl,
write(-CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC-),nl,
write(-4eti( ; meng0u$&ate $o)onWn-),
write(-4eti( 7 men+eta( $o)onWn-),
write(-4eti( I (eluarWn-),
write(-CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC-),nl,
write(-Easu((an ang(a 0 -),
rea&+)ar(1),nl,
(erja(an(1, Po)on, Po)on.aru),
la(u(an(Po)on.aru).
(erja(an(O;O,Po)on,Po)on.aru)/0
write(-4eti( (ara(ter ] untu( menga()iri/ -),
LABORATORIUM TERPADU +TIK UNMUL
4,
Aath$
Michael Melod$
Aharles Ca8el :im
Eleanor
1
2
3
4
!
0
H
Modul 0. Perulangan dan >ekursi
buat'$o)on(Po)on, Po)on.aru).
(erja(an(O7O,Po)on,Po)on)/0
+eta('$o)on(Po)on),
write(-Wn#e(an sembarang tombol-),
rea&+)ar('),nl.
(erja(an(OIO, ', a()ir)/0
eFit.
buat'$o)on(Po)on, Po)on.aru)/0
rea&+)ar("),
"QSO]O,X,
write(", - -),
sisi$(", Po)on, Po)on#em$),
buat'$o)on(Po)on#em$, Po)on.aru).
buat'$o)on(Po)on, Po)on).
sisi$(.aru,a()ir,$o)on(.aru,a()ir,a()ir))/0X.
sisi$(.aru,$o)on(Elemen,4iri,4anan),$o)on(Elemen,4iri.aru,4anan))/0
.aruQElemen,X,
sisi$(.aru,4iri,4iri.aru).
sisi$(.aru,$o)on(Elemen,4iri,4anan),$o)on(Elemen,4iri,4anan.aru))/0
sisi$(.aru,4anan,4anan.aru).
+eta('$o)on(a()ir).
+eta('$o)on($o)on(!tem,4iri,4anan))/0
+eta('$o)on(4iri),
write(!tem, - -),
+eta('$o)on(4anan).
ulang.
ulang/0ulang.
GOAL
write(-CCCCCCCCCC Sortir Po)on 4ara(ter CCCCCCCCCCCC-),nl,
la(u(an(a()ir).
7ji program tersebut dan pilihlah angka 1% kemudian ketikkan nama lengkapmu
masing(masing "tanpa spasi# dan diakhiri tanda R. Demudian pilih angka 2 untuk
melihat hasiln$a. AontohB
CCCCCCCCCCCCCCC Sortir Po)on 4ara(ter CCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
4eti( ; meng0u$&ate $o)on
4eti( 7 men+eta( $o)on
4eti( I (eluar
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
Easu((an ang(a ^
Detikkan angka 1 dan munculB
4eti( (ara(ter ] untu( menga()iri/
Detik namamu misaln$a er+in eend$ dan diakhiri tanda pagar
LABORATORIUM TERPADU +TIK UNMUL
!3
Modul 0. Perulangan dan >ekursi
4eti( (ara(ter ] untu( menga()iri/ e r w i n e > > e n & *
Lalu muncul menu kembaliB
CCCCCCCCCCCCCCC Sortir Po)on 4ara(ter CCCCCCCCCCCCCCCCCCC
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
4eti( ; meng0u$&ate $o)on
4eti( 7 men+eta( $o)on
4eti( I (eluar
CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
Easu((an ang(a ^
Detikkan angka 2 maka akan munculB
& e e e > > i n n r w *
#e(an sembarang tombol
Pertan$aann$a adalahB
1. 6ambarkan struktur pohon $ang terbuat dari serangkaian karakter dari namamuT
2. 5pa $ang dimaksud dengan struktur data rekursi.
3. Mengapa rekursi ekor "tail recursion# lebih baik dari rekursi biasaG
LABORATORIUM TERPADU +TIK UNMUL
!1
Modul H. ist
MODUL A
LIST
A. TUJUAN
1. Mengerti apa $ang dimaksud dengan list dan dapat mengimplementasikann$a
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 $ang lain.
B. DASAR TEORI
Pada Prolog% $ang dimaksud dengan list adalah sebuah ob"ect $ang didalamn$a
mengandung sejumlah ob"ect $ang lain "jumlahn$a dapat berubah(ubah#. ist dalam
bahasa pemrograman lain bisa disamakan dengan tipe data pointer "A dan Pascal#.
<erikut ini cara penulisan list pada Prolog.
_ ;, 7, 8 ` BC list *ang mengan&ung integer ;, 7 &an 8 CB
_ (u+ing, anjing, ti(us ` BC list *ang ter&iri &ari 8 bua) s*mbol CB
_ S*ari> Eusa&e(, 2usi&a An&riani, iana Putri `
BC list *ang ter&iri &ari 8 bua) string CB
7ntuk mendeklarasikan list $ang elemenn$a bertipe integer dapat dilakukan seperti
berikut ini.
OEA!%S
integerlist 6 integerC
.anda asterik "L# berarti domain tersebut merupakan sebuah list. .anda asterik juga
dipakai di bahasa A untuk pendeklarasian tipe data pointer. Pada Pascal
pendeklarasian pointer menggunakan tanda X. Elemen list bisa berupa apapun%
termasuk suatu list $ang lain% namun semua elemen dari suatu list harus berasal dari
domain $ang sama. AontohB
OEA!%S
elementlist 6 elementC
element 6 i(integer)9 r(real)9 s(string)
Aontoh di atas bermaksud untuk mendeklarasikan suatu list $ang elemenn$a bisa
mempun$ai 3 tipe $ang berbeda $aitu integer% real atau string.
3ead *a Tail (K#/ala *a E'or)
ist adalah suatu data ob"ect jamak rekursi "recursi!e compound ob"ect#. ist terdiri
dari 2 bagian $aitu head% $ang merupakan elemen pertama dari list dan tail% elemen
sisan$a. 0ail dari list adalah juga merupakan sebuah list% sedangkan head dari list
merupakan sebuah elemen. AontohB
)ea& &ari list _a, b, +` a&ala) a
LABORATORIUM TERPADU +TIK UNMUL
!2
Modul H. ist
tail &ari list _a, b, +` a&ala) _b, +`
<agaimana jika suatu list han$a mempun$ai satu elemenG
)ea& &ari _+` a&ala) +
tail &ari _+` a&ala) _`
:ika kita selalu mengambil elemen pertama dari suatu list maka pada akhirn$a kita
akan mendapat sebuah list kosonng "empty list# $ang dtulis dengan tanda N O "kurung
siku buka dan kurung siku tutup#. ist kosong tidak bisa dipecah lagi menjadi head
dan tail*
Prolog juga men$ediakan cara untuk secara eksplisit memisahkan antara bagian head
dan tail dari suatu list. Pemisah tersebut menggunakan tanda !ertical bar " Y #.
AontohB
_a, b, +` e(i:alen &engan _aR_b, +``
e(i:alen juga &engan _aR_bR_+```
&an e(i:alen juga &engan _aR_bR_+R_````
Pemisah tersebut bisa terletak pada bagian list manapun sepertiB
_a, b, +, &` e(i:alen &enga _a, bR_+, &``
M#0#$a' #l#"# list
<erikut ini merupakan program untuk mencetak ke la$ar setiap elemen dari suatu list.
BC "onto) ;
000000000000CB
OEA!%S
list 6 integerC
PRE!"A#ES
+eta('list(list)
"LA,SES
+eta('list(_`).
+eta('list(_TR#`)/0
write(T),nl,
+eta('list(#).
GOAL
+eta('list(_;,7,8`).
M#g7i$ug #l#"# list
<erikut merupakan program untuk menghitung jumlah elemen dari suatu list.
BC "onto) 7
000000000000CB
OEA!%S
list 6 integerC
LABORATORIUM TERPADU +TIK UNMUL
!3
Modul H. ist
PRE!"A#ES
jumla)'elemen(list,integer,integer)
"LA,SES
jumla)'elemen(_`, Tasil, Tasil).
jumla)'elemen(_'R#`,Tasil,Pen+a+a))/0
Pen+a+a).aru 6 Pen+a+a) P ;,
jumla)'elemen(#, Tasil, Pen+a+a).aru).
GOAL
jumla)'elemen(_;,7,8`,L,K).
K#aggo$aa list
7ntuk mengetahui apakah suatu ob"ect merupakan anggota dari suatu list dapat
digunakan program berikut.
BC "onto) 8
000000000000CB
OEA!%S
listnama 6 namaC
nama 6 s*mbol
PRE!"A#ES
non&eterm anggota(nama, listnama)
"LA,SES
anggota(%ama, _%amaR'`).
anggota(%ama, _'RE(or`)/0
anggota(%ama,E(or).
GOAL
anggota(susan,_ian,susan,jo)n`).
M#a")a7'a sua$u list '# list =ag lai
<erikut ini merupakan program untuk menambahkan suatu list ke list $ang lain.
BC "onto) M
000000000000CB
OEA!%S
integerlist 6 integerC
PRE!"A#ES
tamba)(integerlist,integerlist,integerlist)
"LA,SES
tamba)(_`,List,List).
tamba)(_TRL;`,List7,_TRL8`)/0
tamba)(L;,List7,L8).
GOAL
tamba)(_;,7,8`,_L,H`,L).
1. PRAKTIK
1. Detik program pada Aontoh 1 s.d. Aontoh 4 di atas.
LABORATORIUM TERPADU +TIK UNMUL
!4
Modul H. ist
2. 7ji goal tersebut dan perhatikan hasiln$a.
3. 7ntuk program contoh 4% coba ganti goaln$a denganB
GOAL
tamba)(_;, 7`, _8`, L), tamba)(L, L, LL).
4. 7ji goal tersebut dan perhatikan hasiln$a.
D. PERTAN8AAN9TUGAS
Bua$ /rogra" *ari arasi )#ri'u$ *#ga "#ggua'a list&
Pada suatu semester di 9.1D 7-M7L. 5da 3 mata kuliah $ang diajarkan $aitu
?Decerdasan <uatan@% ?PDE@ dan ?'istem )perasi@. Jang mengikuti matakuliah
?Decerdasan <uatan@ adalah 'upardi% 'uradi% 'u$atmi% 'uparni dan 'ujiman. Jang
mengikuti mata kuliah ?P<)@ B 'uharto% 'udirman% 'upardi% 'u$atmi% 'utini. Jang
mengambil mata kuliah ?'istem )perasi@ B 'uharto% 'utini% 'upardi% 'uparni%
'uripah. .idak ada mahasis+a $ang mempun$ai nama $ang sama. :ika ada nama
$ang sama mengikuti lebih dari 1 mata kuliah berarti mahasis+a tersebut memang
mengikuti lebih dari 1 mata kuliah. 5dapun nilai akhir dari mata kuliah tersebut
"sesuai dengan urutan nama mahasis+a# adalah 5% <% A% D% A% <% A% A% <% D% <% 5% 5%
<% dan A.
<uat goal untuk menampilkanB
1. -ilai(nilai $ang dimiliki oleh 'upardi beserta mata kuliahn$a.
2. 7ntuk mengecek apakah 'uripah mengikuti perkuliahan pada semester tersebut.
3. Mahasis+a $ang tidak lulus "nilai P A# pada semester tersebut beserta mata
kuliahn$a.
LABORATORIUM TERPADU +TIK UNMUL
!!
Modul 2. 1ection 2acts
MODUL 5
SE'TION *A'TS
A. TUJUAN
1. Memahami apa kegunaan section facts pada Visual Prolog.
2. Dapat men$usun akta(akta pada section facts.
3. Dapat mengimplementasikan program $ang menggunakan section facts.
B. DASAR TEORI
1ection facts terdiri dari akta(akta $ang mana akta(akta tersebut dapat
ditambah dan dihapus secara langsung dari sebuah program pada saat program sedang
berjalan "at run time#. Dita dapat mendeklarasikan sebuah predikat pada section facts
dan predikat tersebut dapat digunakan sama haln$a seperti kalau dideklarasikan pada
section predicates.
Visual Prolog men$ediakan beberapa predikat built#in untuk menangani hal $ang
berkaitan dengan penggunaan section facts% antara lainB
assert, asserta dan assertD untuk menambah akta baru pada section facts.
retra+t dan retra+tall untuk menghapus akta $ang ada.
+onsult untuk membaca akta dari sebuah ile dan men$ertakan akta tersebut ke
dalam akta internal.
sa:e men$impan isi akta internal ke dalam sebuah ile.
D#'larasi Section *acts
Data kunci >a+ts atau bisa juga &atabase menandai permulaan sederetan deklarasi
dari predikat $ang ada pada section facts. Dita dapat menambahkan akta(akta
"bukan rule# pada suatu section facts dari ke$board pada saat run time dengan
menggunakan asserta dan assertD atau memanggil predikat +onsult untuk
mengambil akta tambahan dari sebuah ile. Aontoh deklarasin$a seperti berikut ini.
OEA!%S
nama, alamat 6 string
umur 6 inteteger
jen&er 6 la(ila(i9 $erem$uan
YA"#S
orang(nama, alamat, umur, jen&er)
PRE!"A#ES
la(ila(i(nama, alamat, umur)
$erem$uan(nama, alamat, umur)
ana((nama, alamat, umur)
"LA,SES
la(ila(i(%ama, Alamat, ,mur)/0
orang(%ama, Alamat, ,mur, la(ila(i).
5da 2 s$arat dalam menggunakan predikat $ang dideklarasikan pada section
factsB
LABORATORIUM TERPADU +TIK UNMUL
!0
Modul 2. 1ection 2acts
1. Penambahan predikat pada section facts han$a berlaku sebagai akta saja% tidak
bisa sebagai rule.
2. 9akta(akta $ang ada di section facts tidak boleh mempun$ai &ariabel bebas.
Visual Prolog memungkinkan suatu program untuk memiliki lebih dari satu
section facts% tapi untuk membedakann$a harus secara eksplisit diberi nama untuk
setiap section facts. AontohB
YA"#S ^ &b'orang
orang(nama, alamat,umur, jen&er)
la(ila(i(nama, alamat, umur)
$erem$uan(nama, alamat, umur)
ana((nama, alamat, umur)
-ama section facts di atas adalah *)Borag. :ika tidak ada maka Visual Prolog
akan memberi nama standar "default# *)as#*o".
M#a")a7 4a'$a /a*a saa$ r!n time
Pada saat run time% akta(akta dapat ditambah ke section facts dengan
menggunakan predikat assert, asserta dan assertD atau me(load sebuah ile
$ang berisikan akta menggunakan predikat +onsult. Aara penulisann$a adalah
sebagai berikutB
asserta(Q>a(taS_, nama'se+tion'>a+ts`)
assertD(Q>a(taS_, nama'se+tion'>a+ts`)
assert(Q>a(taS_, nama'se+tion'>a+ts`)
+onsult(nama>ile_, nama'se+tion'>a+ts`)
Perbedaan assert, asserta dan assertD adalah asserta men$ertakan sebuah
akta baru pada section facts sebelum akta(akta $ang telah ada untuk predikat
tersebut% sedangkan assertD men$ertakan sebuah akta baru setelahn$a% sedangkan
assert berungsi sama seperti assertD. 'edangkan +onsult membaca dari sebuah
ile dan men$ertakan akta(akta $ang ada di ile tersebut sesudah akta(akta $ang
telah ada.
.idak seperti assertD% jika +onsult dipanggil han$a dengan satu argumen "tidak
ada nama section facts# maka han$a akan men$ertakan akta(akta $ang predikatn$a
telah dideklarasikan di section facts default $aitu *)as#*o". :ika memanggil
+onsult dengan dua argumen "nama ile dan nama section facts# maka han$a akan
men$ertakan akta(akta $ang predikatn$a dideklarasikan pada section facts dengan
nama $ang sesuai. :ika ile tersebut mengandung akta(akta $ang bukan milik dari
section facts tersebut% maka akan terjadi error pada saat membaca bagian tersebut.
Perlu diperhatikan bah+a +onsult membaca akta satu demi satu% jika pada ile ada
13 akta dan pada akta ke(H terjadi error% maka +onsult akan men$ertakan 0 akta
pertama pada section facts kemudian menampilkan pesan kesalahan.
LABORATORIUM TERPADU +TIK UNMUL
!H
Modul 2. 1ection 2acts
'ebagai catatan% +onsult han$a bisa membaca sebuah ile dengan s$arat ormat
ile tersebut sama persis dengan ormat ile $ang disimpan menggunakan predikat
sa:e% $aituB
( tidak ada karakter kapital kecuali dalam tanda petik dua "penulisan string#.
( tidak spasi kecuali dalam tanda petik dua.
( tidak ada komentar.
( tidak ada baris kosong.
( tidak ada s$mbol tanpa di dalam tanda petik dua.
M#g7a/us 4a'$a /a*a saa$ r!n time
Predikat retra+t menguniikasi suatu akta dan menghapus akta tersebut dari
sectio facts. Aara penulisann$a adalah sebagai berikutB
retra+t(Q>a(taS_, nama'se+tion'>a+ts`)
retra+t akan menghapus akta pertama $ang cocok dengan argumen Q>a(taS $ang
diberikan. Darena retra+t merupakan predikat nondeterministik maka selama
lacakbalik% retra+t akan menghapus akta(akta $ang cocok dengan argumen
Q>a(taS% kecuali jika akta $ang akan dihapus% predikatn$a dideklarasikan
deterministik. Detika semua akta $ang cocok sudah terhapus% pemangilan retra+t
berikutn$a akan gagal.
Predikat retra+tall akan menghapus semua akta $ang cocok dengan argumen
Q>a(taS dan penulisann$a sebagai berikutB
retra+tall(Q>a(taS_, nama'se+tion'>a+ts`)
retra+tall berperilaku sama seperti kalau dideinsiskan sebagai berikutB
retra+tall(1)/0 retra+t(1), >ail. =>ail untu( mema(sa la+a( bali(
retra+tall(').
M#=i"/a *a$a)as# 4a'$a:4a'$a /a*a saa$ r!n time
Predikat sa:e berungsi untuk men$impan akta(akta $ang ada pada section facts ke
dalam sebuah ile. Aara penulisann$a sebagai berikutB
sa:e(nama'>ile_, nama'se+tion'>a+ts`)
:ika memanggil sa:e han$a dengan satu argumen "tidak ada nama section facts#%
maka akan men$impan akta(akta dari section facts default *)as#*o" ke ile dengan
nama $ang sesuai dengan argumen. :ika memanggil sa:e dengan dua argumen "nama
ile dan nama section facts#% maka akan men$impan semua akta $ang ada pada
section facts $ang sesuai ke dalam ile dengan nama $ang sesuai pula.
Ka$a 'u0i /a*a section -acts
9akta(akta pada section facts dapat dideklarasikan dengan beberapa kata kunci
opsional berikutB
LABORATORIUM TERPADU +TIK UNMUL
!2
Modul 2. 1ection 2acts
non&eterm menentukan bah+a kemungkinan ada sejumlah akta dari suatu
predikat sepanjang program berjalan "deault#
&eterm menentukan bah+a han$a boleh ada satu akta dari suatu predikat
sepanjang program berjalan.
global menentukan bah+a setion facts adalah global dalam program.
single menentukan han$a satu akta dari predikat $ang akan selalu ada.
no+o$* normaln$a pemanggilan akta akan mengikat &ariabel ke sebuah
string atau ke sebuah ob"ect jamak. 'tring atau ob"ect jamak
tersebut akan disalin ke tumpukan dari Visual Prolog 6lobal 'tack
"6'tack#. Dengan kata kunci ini maka tidak ada proses pen$alinan
terserbut.
1. PRAKTIK
1. Detik program berikut ini.
OEA!%S
nama 6 s*mbol
umur 6 integer
jen&er 6 la(ila(i9 $erem$uan
YA"#S
orang(nama, umur, jen&er)
PRE!"A#ES
non&eterm +eta(
"LA,SES
orang(*ulianto, 8;, la(ila(i).
orang(*uliani, 8;, $erem$uan).
+eta(/0
orang(%ama, ,mur, Ven&er),
write(-%ama / - ,%ama),nl,
write(-,mur / - ,,mur),nl,
write(-Ven&er / - ,Ven&er),nl,nl,
>ail.
+eta(.
GOAL
sa:e(-&ata'org.tFt-),
+eta(.
2. 7ji goal tersebut dan perhatikan hasiln$a.
3. 'etelah goal tersebut diuji% maka akan terbentuk ile ?dataForg.t4t@. Aari ile
tersebut dan buka dengan program te4t editor seperti -).EP5D.
4. .ambahkan data berikutB
LABORATORIUM TERPADU +TIK UNMUL
!,
Modul 2. 1ection 2acts
orang(gilang, 7K, la(ila(i)
orang(ranti, ;<, $erem$uan)
orang(ba*u, ;K, la(ila(i)
orang(wening, <, $erem$uan)
!. Demudian ganti goaln$a menjadiB
GOAL
+onsult(-&ata'org.tFt-),
+eta(.
0. 7ji goal tersebut dan perhatikan hasiln$a.
D. PERTAN8AAN9TUGAS
<uat program seperti pada bagian pertan$aan/tugas pada modul V11% namun semua
akta "$ang ada pada section clauses# tidak berada pada badan program namun berada
pada ile ?akakom.t4t@. Dan uji goal(goal seperti $ang juga diperintahkan pada modul
V11.
LABORATORIUM TERPADU +TIK UNMUL
03