Anda di halaman 1dari 60

Modul 1.

Lingkungan Visual Prolog


MODUL I
LINGKUNGAN VISUAL PROLOG
(VISUAL PROLOG ENVIRONMENT, VPE)
A. TUJUAN
1. Mengetahui cara memulai program VPE.
2. Dapat membuat program menggunakan jendela editor VPE.
3. Dapat menjalankan dan menguji program pada VPE.
4. Dapat membuka ile dari disk.
!. Mengetahui "jika# adan$a kesalahan dan di baris mana pada program kesalahan
itu terjadi.
B. DASAR TEORI
1. Visual Prolog E!iro"#$ (VPE)
VPE didesain agar seorang programmer dapat dengan mudah% n$aman dan
cepat dalam membangun% menguji dan memodiikasi suatu aplikasi atau program
$ang ditulis dalam Visual Prolog. VPE memiliki beberapa &arian sehingga
mendukung untuk digunakan di beberapa platorm sistem operasi seperti M'(
D)'% M' *indo+s 3.1% M' *indo+s ,!% M' *indo+s -.% *in()'/2% atau
)'/2 PM% $ang digunakan pada platorm prosesor 10 bit ataupun prosesor 32 bit
dari keluarga prosesor 1ntel

23420 ataupun kompatibeln$a seperti prosesor


5MD

.
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&#0$ , 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&#0$ , 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)&#0$ &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

Anda mungkin juga menyukai