SlideShare a Scribd company logo
1 of 60
Programming logic dikenal sebagai
bahasa deskriptif (descriptive language),
yang berarti dengan diberikan
serangkaian fakta-fakta dan aturan-
aturan, dengan menggunakan cara
berpikir deduktif (deductive reasoning),
akan dapat menyelesaikan permasalahan
suatu program.
Perbedaan pemrograman
logik dengan procedural
Dalam bahasa prosedural, programmer harus
memberikan instruksi tahap demi tahap agar komputer
dapat dengan pasti bagaimana menyelesaikan
permasalahan yang diberikan. Dengan kata lain,
programmer harus tahu lebih dahulu bagaimana cara
menyelesaikan permasalahan sebelum diinstuksikan ke
komputer. Lain jika dibandingkan dengan programmer
Prolog. Programmer Prolog hanya membutuhkan
deskripsi / gambaran permasalahan, lalu
menerjemahkannya ke bahasa Prolog. Selanjutnya
tinggal sistem Prolog yang menentukan bagaimana
mencari solusinya.
Ciri pemrograman logik
0 Tidak berfikir dalam urut-urutan operasi komputer seperti
pada pemrograman prosedural, tapi menyatakan program
dalam bentuk “deklarasi”
0 Knowladge dan asumsi sudah cukup untuk menyelesaikan
persoalan jika dinyatakan secara eksplisit sebagai aksioma
logik
0 Program logik dieksekusi dengan memberikan padanya
sebuah problem yang dinyatakan dalam pernyataan logik
yang di sebut goal statement
0 Eksekusi program adalah usaha untuk membuktikan goal
benar, dengan asumsi (berupa fakta, aturan) yang ada pada
program
Awal Pemrograman Logik
0 Kowalski dan Colmerauer mencanangkan interpretasi
prosedural dari Klausa Horn:
Aksioma: A if B1 and B2 and … and Bn
Dapat ditulis sebagai prosedur:
o A adalah prosedure head
o Bi adalah Body
o A benar, jika B benar
Klausa Horn
Konstruksi program logik
0 Fakta
0 Rules (aturan)
0 Query
Aturan, fakta dan query adalah Klausa Horn
Fakta
0 Adalah kalimat sederhana untuk menyatakan relasi antar
objek
0 Fakta dalam pemrograman logik dituliskan sebagai predikat
0 Hanya fakta yang benar yang dimasukan ke dalam basis
data dalam suatu program deklaratif
0 Fakta yang benar tersebut dienumerasi satu per satu dan
harus sesuai dengan dunia nyata yang diprogram
Fakta : Apa yang diketahui
Dalam Prolog, relasi antara object-object dinamakan
predikat. Dalam bahasa natural relasi disimbolisasikan oleh
suatu kalimat. Dalam logika predikat yang Prolog gunakan,
suatu relasi adalah kesimpulan dalam suatu frase sederhana.
Suatu fakta memiliki nama relasi diikuti object atau object-
object di dalam tanda kurung. Sebagaimana kalimat, fakta
tersebut diakhiri dengan tanda titik (.).
0 Berikut ini beberapa fakta yang mengekspresikan relasi suka
dalam bahasa natural:
Toni suka Ina.
Ina suka Toni.
Toni suka kucing.
Dan dalam sintak Prolog, fakta di atas ditulis:
suka(toni,ina).
suka(ina,toni).
suka(toni,kucing).
Fakta juga bisa mengekspresikan sifat (property) dari suatu object
sebagaimana suatu relasi
Dalam bahasa natural kalimat “Kodok berwarna hijau” dan
“Andi adalah laki-laki” diubah ke dalam sintak Prolog menjadi:
hijau(kodok).
lakilaki(Andi).
0Rules (Aturan)
Aturan: Apa yang dapat disimpulkan dari fakta
yang ada
Aturan membuat kita dapat mengambil suatu
fakta dari fakta yang lain. Dengan bahasa lain,
aturan adalah suatu konklusi diketahui benar
jika satu atau lebih konklusi atau fakta lain
ditemukan benar
Berikut ini beberapa aturan yang berhubungan dengan relasi suka:
Ina suka apapun yang Toni suka.
Komeng suka apapun yang berwarna hijau.
Dengan aturan di atas, dapat disimpulkan dari beberapa fakta sebelumnya
mengenai sesuatu yang Ina dan Komeng suka:
Ina suka Toni
Komeng suka Kodok.
Untuk menuliskan aturan tersebut dalam sintak Prolog hanya dibutuhkan
sedikit perubahan seperti ini:
suka(ina, Sesuatu):- suka(toni, Sesuatu).
suka(komeng, Sesuatu):- hijau(Sesuatu).
Simbol :- diucapkan dengan “jika” dan memisahkan dua bagian dari aturan
yaitu head dan body. Aturan di atas dalam makna prosedur, bisa berarti
“untuk membuktikan Inung suka sesuatu, buktikanlah bahwa Toni suka
hal yang sama” dan “untuk membuktikan Komeng suka sesuatu,
buktikanlah bahwa sesuatu itu berwarna hijau”.
QUERY
Kalau kita sudah memberikan Prolog sekumpulan fakta,
selanjutkan dapat diajukan pertanyaan sehubungan dengan fakta-
fakta. Ini dikenal dengan nama memberikan query ke sistem Prolog
(querying the Prolog system). Pertanyaan yang diajukan ke Prolog
sama tipenya seperti dalam bahasa natural. Berdasarkan pada fakta
dan aturan yang diberikan sebelumnya, kita dapat menjawab
pertanyaan tentang relasi-relasi ini sebagaimana Prolog juga bisa:
Apakah Toni menyukai Ina?
dalam sintak Prolog:
suka(toni, ina)
dengan memberikan query ini, Prolog akan menjawab:
Yes
STRUKTUR
PROGRAM PROLOG
DOMAINS
Domains berisi deklarasi (pernyataan) tentang jenis data yang
digunakan dalam fakta dan aturan. Mirip dengan bahasa Pascal
atau C.
Ada lima domain baku di dalam Prolog, yaitu:
1. char, karakter tunggal yang diapit oleh tanda kutip tunggal: ‘a’,
‘b’, ‘13’.
2. integer, bilangan bulat antara –32768 hingga 32767. Notasi $
digunakan untuk menunjukkan bilangan heksa.
3. real, bilangan nyata
4. string, deretan karakter yang diapit oleh tanda kutip dobel,
misalnya “ipb”.
5. symbol, rangkaian karakter yang diawali dengan huruf kecil
dan tanpa tanda apa pun.
0 CLAUSES
Sekumpulan klausa dari predikat yang sama harus
dikelompokkan dalam bagian ini. Dalam melakukan
pemanggilan klausa, Prolog melacaknya berurutan dari
atas ke bawah.Bagian ini merupakan inti dari program
Prolog, dimana semua fakta dan aturan
diimplementasikan di sini.
predicates
grandfather(symbol,symbol)
father(symbol,symbol)
mother(symbol,symbol)
Fakta :
father(john,bill).
father(bill,mary).
father(bill,tom).
father(tom,chris).
father(tom,bob).
mother(mary,june).
mother(mary,katie).
rules
grandfather(X,Z):-father(X,Y),father(Y,Z).
grandfather(X,Z):-father(X,Y),motehr(Y,Z).
Contoh 1. Program untuk menyatakan hubungan kakek, ayah, dan ibu.
predicates
grandfather(symbol,symbol)
father(symbol,symbol)
mother(symbol,symbol)
clauses
grandfather(X,Z):-father(X,Y),father(Y,Z).
grandfather(X,Z):-father(X,Y),mother(Y,Z).
father(john,bill).
father(bill,mary).
father(bill,tom).
father(tom,chris).
father(tom,bob).
mother(mary,june).
mother(mary,katie).
goal
clearwindow, father(Bapak,chris), write(Bapak),nl,
grandfather(Kakek,chris), write(Kakek).
Contoh 2.
predicates
ukuran(symbol, symbol)
warna(symbol,symbol)
gelap(symbol)
clauses
ukuran(beruang, besar).
ukuran(kelinci, kecil).
ukuran(kucing, kecil).
warna(beruang, coklat).
warna(kucing, hitam).
warna(kelinci, putih).
gelap(Z):-warna(Z, hitam).
gelap(Z):-warna(Z,coklat).
goal
clearwindow,
gelap(Z), ukuran(Z,besar), write(Z).
DOMAINS
nama=symbol
PREDICATES
ayah(nama,nama)
kakek(nama,nama)
CLAUSES
/* Fakta */
ayah(hendra,pranoto).
ayah(hendra,kristianto).
ayah(pranoto,bardan).
ayah(pranoto,deni).
ayah(kristianto,harahap).
ayah(kristianto,sutarno).
/* Aturan */
kakek(Kakek,Cucu) :-ayah(Ayah,Cucu),ayah(Kakek,Ayah).
Goal: ayah(hendra,pranoto) <enter>
Goal: ayah(pranoto,deni) <enter>
Goal: ayah(hendra,deni) <enter>
Goal: ayah(Ayah,X) <enter>
Goal: kakek(Kakek,X) <enter>
Goal: kakek(Z,sutarno) <enter>
Goal: ayah(hendra,X) <enter>
VARIABLE.
Besaran yang nilainya dapat berubah-ubah disebut variabel.
Misalnya : Siapakah ayah Deni?. Karena ayah Deni belum
diketahui, maka dituliskan dalam suatu variabel, misalnya X
dan dituliskan sebagai :
GOAL: ayah(X,deni)<enter>
X=pranoto
CARA PENULISAN VARIABEL.
0 Nama variabel harus diawali dengan huruf besar atau garis
bawah (_).
0 Nama variabel dapat terdiri dari huruf, bilangan atau
simbol dan merupakan satu kesatuan dengan panjang
maksimum 250 karakter.
0 Nama variabel hendaknya mengandung makna yang
berkaitan dengan data yang dinyatakannya. Contoh :
Tanggal_lahir
Nama_ayah
MACAM VARIABEL
0 Variabel bebas (Free variable) : variabel yang belum
mempunyai nilai tertentu pada suatu saat.
0 Variabel terikat (Bound variable) : variabel yang
sudah mempunyai nilai tertentu pada suatu saat.
Contoh : GOAL: ayah(Ayah,deni), ayah(Ayah,bardan).
Yang berarti siapa ayah deni dan juga ayah bardan?
0 Variabel tak bernama (Anonymous variable) : Bila
anda ingin mendapatkan informasi tertentu, anda
dapat menggunakan variabel tak bernama untuk
mengabaikan nilai yang tak dikehendaki. Dalam
Prolog variabel tak bernama dituliskan dengan garis
bawah (‘_’). Variabel tak bernama tak pernah terikat
pada suatu nilai tertentu sehingga selalu sepadan
dengan nilai apapun.
0 Misal pada contoh program di atas anda ingin mengetahui
nama-nama orang yang mempunyai anak (menjadi orang
tua) tetapi anda tidak ingin mengetahui anak-anaknya,
anda dapat menanyakan : Goal: ayah(Ayah,_) dan Prolog
akan menjawab :
Ayah=hendra
Ayah=hendra
Ayah=pranoto
Ayah=pranoto
Ayah=kristanto
Ayah=kristanto
0 Variabel tak bernama dapat juga untuk menyatakan fakta
“setiap/semua”
Contoh :
Setiap mahasiswa mempunyai komputer
Prolog : mempunyai(_,komputer)
ARITHMETIC EXPRESSIONS
Z is X
Expression X is evaluated and the result is
unified with Z.
X + Y Addition
X - Y Subtraction
X * Y Multiplication
X / Y Floating-point division
X // Y Integer division
X mod Y X modulo Y
X ** Y exponentiation (Y > 0).
X ^ Y exponentiation (Y > 0). [Not ISO Standard]
X < Y The value of X is less than the value of Y.
X > Y
The value of X is greater than the value of
Y.
X =< Y
The value of X is less than or equal to the
value of Y.
X <= Y
The value of X is less than or equal to the
value of Y. [Not ISO Standard]
X >= Y
The value of X is greater than or equal to
the value of Y.
GOAL MAJEMUK.
Dimaksudkan adalah goal yang terdiri lebih dari satu
pertanyaan. Bagian dari goal disebut sub goal .
DOMAINS
merk,warna=symbol
tahun,harga=integer
PREDICATES
mobil(merk,warna,tahun,harga)
CLAUSES
/* Fakta */
mobil(mercedez,biru,1975,20).
mobil(mercedez,coklat,1986,50).
mobil(kijang,merah,1990,65).
mobil(baleno,hijau,1997,85).
mobil(bmw,putih,1997,100).
mobil(peugeot,metalic,1999,95).
mobil(kijang,hijau,1987,55).
mobil(honda,hitam,1999,98).
mobil(mazda,hijau,1986,35).
mobil(corolla,merah,2000,97).
mobil(corona,biru,1986,45).
0 Misal anda ingin mendapatkan informasi tentang mobil
yang harganya diatas 85, Turbo Prolog akan mencari
padanan sub goal
mobil(Merk,Warna,Tahun,Harga)
dengan fakta yang ada dimulai dari fakta pertama, kemudian
dilanjutkan ke sub goal berikutnya yaitu apakah harganya
>85, jika benar maka turbo prolog akan memunculkan solusi
dan diteruskan ke fakta yang lain, jika tidak benar maka
Turbo Prolog akan mencari kemungkinan yang lain, dst.
Sehingga diperoleh informasi diinginkan yang merupakan
solusi sbb :
Goal: mobil(Merk,Warna,Tahun,Harga),Harga>85
Merk=bmw, Warna=putih, Tahun=1997, Harga=100
Merk=peugeot, Warna=metalic, Tahun=1999, Harga=95
Merk=honda, Warna=hitam, Tahun=1999, Harga=98
Merk=corolla, Warna=merah, Tahun=2000, Harga=97
4 Solutions
misalnya mobil yang tahunnya > 1997 dan warnanya
merah.
Goal: mobil(Merk,Warna,Tahun,Harga),
Warna=merah, Tahun>1997
UNIFIKASI
UNIFIKASI
Proses yang dilakukan oleh Turbo Prolog untuk mencari
padanan antara pernyataan yang terdapat pada aturan
dengan fakta atau kepala aturan yang lain.
Syarat terjadinya unifikasi antara 2 (dua) pernyataan :
0 Mempunyai relasi yang sama.
0 Mempunyai jumlah dan posisi argumen yang sama.
0 Argumen yang berpadanan harus dari jenis data yang
sama.
0 Semua pasangan argumen (pada data majemuk) harus juga
berpadanan.
Contoh terjadi unifikasi :
0 ayah(Ayah, pranoto) dengan ayah(hendra,pranoto)
0 lahir(Tanggal,Bulan,Tahun) dengan
lahir(12,”Agustus”,1964)
Contoh tidak akan terjadi unifikasi :
0 ayah(hendra) dengan ayah(hendra,pranoto)
Karena mempunyai jumlah argumen yang tidak sama,
meskipun mempunyai nama relasi yang sama.
PROSES PENCARIAN JAWABAN.
0 Proses pencarian jawaban dalam Turbo Prolog 2.0
dilakukan dengan cara pemadanan (padanan).
0 Untuk lebih jelasnya, misal pada contoh program di
atas (silsilah keluarga) dilakukan penambahan
beberapa fakta dan aturan sbb:
/* Contoh program silsilah keluarga */
DOMAINS
nama = symbol
PREDICATES
ayah(nama,nama)
kakek(nama,nama)
ibu(nama,nama)
nenek(nama,nama)
saudara_kandung(nama,nama)
saudara_sepupu(nama,nama)
CLAUSES
/* Fakta */
/* Orang tua */
ayah(hendra,pranoto).
ayah(hendra,kristianto).
ayah(pranoto,bardan).
ayah(pranoto,deni).
ayah(kristianto,harahap).
ayah(kristianto,sutarno).
ayah(prabowo,bu_pranoto).
ayah(sasongko,bu_kristanto).
ibu(bu_hendra,pranoto).
ibu(bu_hendra,kristanto).
ibu(bu_pranoto,bardan).
ibu(bu_pranoto,deni).
ibu(bu_kristanto,harahap).
ibu(bu_kristanto,sutarno).
ibu(bu_prabowo,bu_pranoto).
ibu(bu_sasongko,bu_kristanto).
/* Aturan */
/* Kakek adalah kakek Cucu */
kakek(Kakek,Cucu) :-
ayah(Ayah,Cucu),
ayah(Kakek,Ayah).
kakek(Kakek,Cucu) :-
ibu(Ibu,Cucu),
ayah(Kakek,Ibu).
/* Nenek adalah nenek Cucu */
nenek(Nenek,Cucu):-
ayah(Ayah,Cucu),
ibu(Nenek,Ayah).
nenek(Nenek,Cucu):-
ibu(Ibu,Cucu),
ibu(Nenek,Ibu).
/* Nama1 saudara kandung Nama2 */
saudara_kandung(Nama1,Nama2):-
ayah(Ayah,Nama1),
ayah(Ayah,Nama2),
ibu(Ibu,Nama1),
ibu(Ibu,Nama2),
Nama1 <> Nama2.
/* Sdr1 saudara sepupu Sdr2 */
saudara_sepupu(Sdr1,Sdr2):-
ayah(Ayah1,Sdr1),
ayah(Ayah2,Sdr2),
saudara_kandung(Ayah1,Ayah2).
saudara_sepupu(Sdr1,Sdr2):-
ayah(Ayah1,Sdr1),
ibu(Ibu,Sdr2),
saudara_kandung(Ayah,Ibu).
saudara_sepupu(Sdr1,Sdr2):-
ibu(Ibu,Sdr1),
ayah(Ayah,Sdr2),
saudara_kandung(Ibu,Ayah).
saudara_sepupu(Sdr1,Sdr2):-
ibu(Ibu1,Sdr1),
ibu(Ibu2,Sdr2),
saudara_kandung(Ibu1,Ibu2).
GOAL: kakek(Kakek,bardan)
0 Turbo Prolog 2.0 akan mencari padanan goal di atas
dengan fakta/ aturan, mulai dari yang teratas sampai
ditemukan fakta/aturan yang sepadan, yaitu :
kakek(Kakek,bardan) – kakek(Kakek,Cucu)
0 Variabel Cucu terikat menjadi bardan dan Turbo
Prolog 2.0 akan mencari nilai variabel Kakek dengan
membuktikan apakah semua pernyataan (subgoal) di
dalam aturan tersebut benar. Pernyataan yang
pertama :
ayah(Ayah,Cucu) – ayah(Ayah,bardan)
0 Untuk membuktikan pernyataan di atas benar, Turbo
Prolog 2.0 mencari padanan dengan fakta yang ada
mulai dari yang teratas hingga ditemukan :
ayah(Ayah,bardan) – ayah(pranoto,bardan)
0 Ini berarti variabel Ayah terikat menjadi pranoto.
Karena subgoal yang pertama benar, maka Turbo
Prolog 2.0 melanjutkan ke subgoal berikutnya dengan
membawa serta semua variabel yang telah terikat
pada subgoal sebelumnya :
Ditemukan padanan :
ayah(Kakek,pranoto) – ayah(hendra,pranoto)
Sehingga variabel Kakek terikat menjadi hendra.
0 Setelah semua subgoal dieksekusi dan semua variabel
menjadi variabel terikat, Turbo Prolog 2.0 akan
kembali ke bagian kepala aturan tersebut dengan
membawa semua variabel terikat, sedangkan nilai
variabel yang diteruskan oleh aturan kakek
tergantung pada variabel yang terdapat pada bagian
kepala. Pada aturan kakek, hanya nilai variabel Kakek
yang diteruskan sedangkan nilai variabel Ayah tidak
diperlukan.
kakek(Kakek,bardan) – kakek(hendra,bardan)
0 Salah satu jawaban akhir adalah : Kakek = hendra.
1. Siapakah kakek Bardan ?
2. Siapakah Cucu hendra?
3. Siapakah saudara kandung pranoto?
4. Siapakah keponakan kristanto?
5. Siapa saja yang mempunyai hubungan saudara
kandung?
6. Siapa saja yang mempunyai hubungan saudara
sepupu?
7. Siapakah nenek dari harahap?
8. Siapakah saudara_kandung Bardan?
BACKTRACKING
Visual Prolog menggunakan metode ini untuk
menemukan suatu solusi dari permasalahan yang
diberikan.Visual Prolog dalam memulai mencari solusi
suatu permasalahan (atau goal) harus membuat
keputusan di antara kemungkinan-kemungkinan yang
ada. Ia menandai di setiap percabangan (dikenal
dengan titik lacak balik) dan memilih subgoal pertama
untuk telusuri. Jika subgoal tersebut gagal (ekivalen
dengan menemukan jalan buntu), Visual Prolog akan
lacakbalik ke titik lacakbalik (back-tracking point)
terakhir dan mencoba alternatif subgoal yang lain.
/* Contoh */
PREDICATES
jenis(symbol, symbol)
adalah(symbol, symbol)
hidup(symbol, symbol)
dapat_berenang(symbol)
CLAUSES
jenis(vertebrata,hewan).
jenis(ikan,hewan).
adalah(zebra,vertebrata).
adalah(lele,ikan).
adalah(tuna,ikan).
hidup(zebra,di_darat).
hidup(kodok,di_darat).
hidup(kodok,di_air).
hidup(tuna,di_air).
dapat_berenang(Y):-
jenis(X,hewan),
adalah(Y,X),
hidup(Y,di_air).
GOAL
dapat_berenang(Apa).
Untuk mengetahui terjadinya lacakbalik, akan diamati
langkah demi langkah bagaimana Visual Prolog mencari
solusi dari goal yang diberikan.
1. Visual Prolog memanggil predikat dapat_berenang
dengan variabel bebas Apa. Untuk mencoba menjawab
panggilan ini, Visual Prolog mencari di program untuk
pencocokan. Ditemukan kecocokan dengan klausa
dapat_berenang, dan variabel Apa diunifikasikan dengan
variabel Y.
2. Kemudian, Visual Prolog berusaha untuk memenuhi
bagian body dari rule.Untuk melakukannya, Visual Prolog
memanggil subgoal yang pertama pada body dari rule
tersebut yaitu jenis(X, hewan), dan mencari pencocokan
untuk panggilan ini. Ditemukan pencocokan dengan fakta
pertama dari klausa relasi jenis. Pada titik ini X diikat
dengan nilai vertebrata. Kemudian Visual Prolog menset
titik lacakbalik pada fakta jenis(vertebrata,hewan).
3. Dengan X diikat pada nilai vertebrata, Visual Prolog
membuat panggilan untuk subgoal yang kedua yaitu
adalah(Y, vertebrata), dan mencari pencocokan. Dan
menemukan dengan fakta yang pertama adalah(zebra,
vertebrata). Y diikat dengan nilai zebra dan Prolog
menset titik lacakbalik pada adalah(zebra, vertebrata).
4. Kemudian Prolog mencoba untuk memenuhi subgoal
yang terakhir yaitu, hidup(zebra, di_air). Karena tidak
ditemukan fakta tersebut maka panggilan gagal dan
Prolog memulai lacakbalik untuk menemukan solusi lain.
5. Ketika Visual Prolog lacakbalik, proses kembali ke titik
lacakbalik terakhir. Pada kasus ini, titik lacakbalik
terakhir berada pada subgoal yang kedua dari rule yaitu
fakta adalah(zebra, vertebrata).
6. Ketika Visual Prolog berada pada titik lacakbalik, ia akan
membebaskan variabel yang diberi nilai pada titik lacakbalik
tersebut dan berusaha mencari jawaban lain untuk
panggilan tersebut dalam kasus ini adalah(Y, vertebrata).
7. Visual Prolog melanjutkan pencarian ke bawah dari titik
lacakbalik tersebut untuk pencocokan klausa yang lain.
Karena tidak ada klausa yang ditemukan, maka terjadi lacak
balik dan proses kembali ke titik lacakbalik terakhir yaitu di
jenis(vertebrata, hewan).
8. Visual Prolog membebaskan variabel dan mencoba untuk
menemukan solusi lain dari panggilan jenis(X, hewan).
Pencarian dimulai setelah titik lacakbalik dan menemukan
kecocokan dengan fakta jenis di program pada klausa
jenis(ikan, hewan). X kemudian diikat pada nilai ikan, dan
titik lacakbalik baru di set pada fakta tersebut.
9. Kemudian Visual Prolog bergerak ke subgoal berikutnya
pada rule. Karena ini panggilan baru, maka pencarian
dimulai dari bagian atas program dengan panggilan
adalah(Y, ikan). Visual Prolog menemukan kecocokan dengan
panggilan ini. Y diikat dengan nilai lele, dan sebuah titik
lacakbalik baru diset pada fakta adalah(lele, ikan).
10. Karena Y diikat dengan nilai lele, panggilan subgoal
berikutnya adalah hidup(lele, di_air). Karena panggilan baru,
maka pencarian dimulai dari bagian atas program. Prolog
mencoba setiap fakta namun gagal menemukan kecocokan
dan subgol dinyatakan gagal.
11. Visual Prolog, kemudian kembali ke titik lacakbalik
terakhir yaitu pada adalah(lele, ikan). Variabel yang diikat
pada pencocokan ini kemudian dibebaskan. Beranjak dari
titik ini, Visual Prolog mencari solusi baru untuk panggilan
adalah(Y, ikan).
12. Visual Prolog menemukan kecocokan dengan klausa
adalah berikutnya. Y kemudian diikat dengan simbol tuna.
Kemudian Visual Prolog mencoba lagi subgoal yang terakhir
dengan variabel Y diikat pada nilai tuna. Panggilannya
menjadi hidup(tuna, di_air). Pencarian kembali dimulai dari
bagian atas program karena merupakan panggilan baru dan
menemukan kecocokan dengan fakta yang ada dan subgoal
terakhir sukses (true).
13. Pada titik ini, body dari rule dapat_berenang dapat
dipenuhi. Visual Prolog mengembalikan nilai Y pada
pemanggil (goal) dapat_berenang(Apa). Karena Apa diikat
nilainya ke Y dan Y diikat nilainya tuna, maka sekarangApa
juga diikat nilainya ke tuna pada goal tersebut. Visual Prolog
kan menampilkan jawaban:
Apa=tuna
1 Solution.
Pengendalian Lacak Balik
Predikat Cut (!)
Visual Prolog memiliki cut yang digunakan untuk mencegah
lacakbalik, ditulis berupa sebuah tanda seru (!). Efek dari cut
adalah sederhana, yaitu tidak akan memungkinkan terjadinya
lacakbalik melewati sebuah cut. Kita menempatkan cut dalam
program sama persis seperti menempatkan sebuah subgoal pada
body dari suatu rule. Ketika proses melewati cut, pemanggil ke cut
dinyatakan sukses dan subgoal berikutnya (jika ada) dipanggil.
Sekali sebuah cut dilewati, adalah menjadi tidak mungkin untuk
melakukan lacakbalik pada subgoal yang berada pada sebelum cut
pada klausa yang sedang diproses dan adalah menjadi tidak
mungkin untuk melakukan lacakbalik ke predikat lain yang
mendefinisikan predikat yang sekarang diproses (predikat yang
mengandung cut). Berikut ini contoh penggunaan cut.
PREDICATES
beli_mobil(symbol,symbol)
mobil(symbol,symbol,integer)
warna(symbol,symbol)
CLAUSES
beli_mobil(Model,Warna):-
mobil(Model,Warna,Harga),
warna(Warna,seksi),!,
Harga < 25000.
mobil(ferrari,hijau,25000).
mobil(jaguar,hitam,24000).
mobil(jaguar,merah,26000).
mobil(porsche,merah,24000).
warna(merah,seksi).
warna(hitam,wibawa).
warna(hijau,sejuk).
GOAL
beli_mobil(jaguar, Y).
Pada contoh di atas goalnya adalah mencari mobil
Jaguar yangmempunyai warna seksi dengan harga yang
tidak terlalu mahal. Cut yang ada pada rule beli_mobil
mempunyai asumsi bahwa hanya satu Jaguar yang
mempunyai warna seksi yang ada di database dan jika
harganya terlalu tinggimaka tidak perlu mencari mobil
yang lain. Untuk melihat bagaimana cut mempengaruhi
proses, kita program di atas langkah demi langkah.
1. Visual Prolog memanggil mobil, subgoal pertama dari
predikat beli_mobil.
2. Tes pada mobil pertama, ferrari menghasilkan gagal.
3. Kemudian tes klausa mobil selanjutnya menemui
kecocokan dan mengikat variabel Warna ke nilai hitam.
4. Karena berhasil, maka akan memanggil subgoal
berikutnya apakah warna mobil yang dipilih adalah
warna seksi. Hitam bukan warna seksi pada program
sehingga tes gagal.
5. Visual Prolog lacakbalik ke pemanggil mobil dan
sekali lagi mencari sebuah Jaguar yang memenuhi
kriteria.
6. Kemudian ditemukan dan sekali lagi menguji warna
mobil tersebut. Kali ini warnanya adalah seksi dan
Prolog melanjutkan ke subgoal berikutnya pada rule
yaitu cut. Cut kemudian sukses dan secara efektif
“membekukan” variabel yang diikat pada klausa
sebelumnya.
7. Visual Prolog sekarang melanjutkan ke subgoal
selanjutnya (terakhir) pada rule yaitu perbandingan:
Harga < 25000.
Uji ini gagal dan Visual Prolog akan melakukan
lacakbalik dalam rangka untuk mencari mobil yang lain
untuk diuji. Namun karena adanya cut yangmencegah
terjadinya lacakbalik, maka tidak ada jalan lain lagi
untuk subgoal yang terakhir dan goal berhenti pada
kondisi gagal (failure).

More Related Content

What's hot

Matematika Diskrit - 10 pohon - 04
Matematika Diskrit - 10 pohon - 04Matematika Diskrit - 10 pohon - 04
Matematika Diskrit - 10 pohon - 04KuliahKita
 
Matematika Diskrit - 11 kompleksitas algoritma - 03
Matematika Diskrit - 11 kompleksitas algoritma - 03Matematika Diskrit - 11 kompleksitas algoritma - 03
Matematika Diskrit - 11 kompleksitas algoritma - 03KuliahKita
 
Laporan praktikum 1 pemrograman mobile
Laporan praktikum 1 pemrograman mobileLaporan praktikum 1 pemrograman mobile
Laporan praktikum 1 pemrograman mobileAli Ikhsan
 
OPERASI INPUT OUTPUT di Linux
OPERASI INPUT OUTPUT di LinuxOPERASI INPUT OUTPUT di Linux
OPERASI INPUT OUTPUT di LinuxIbrahim Naki
 
Algoritma Greedy (contoh soal)
Algoritma Greedy (contoh soal)Algoritma Greedy (contoh soal)
Algoritma Greedy (contoh soal)Ajeng Savitri
 
Laporan Praktikum Basis Data Modul I-Membangun Database SQL Pada MYSQL
Laporan Praktikum Basis Data Modul I-Membangun Database SQL Pada MYSQLLaporan Praktikum Basis Data Modul I-Membangun Database SQL Pada MYSQL
Laporan Praktikum Basis Data Modul I-Membangun Database SQL Pada MYSQLShofura Kamal
 
BAB 2 : KALIMAT BERKUANTOR
BAB 2 : KALIMAT BERKUANTORBAB 2 : KALIMAT BERKUANTOR
BAB 2 : KALIMAT BERKUANTORMustahal SSi
 
Matematika Diskrit - 07 teori bilangan - 01
Matematika Diskrit - 07 teori bilangan - 01Matematika Diskrit - 07 teori bilangan - 01
Matematika Diskrit - 07 teori bilangan - 01KuliahKita
 
Algoritma pemrograman 2 - Contoh program"Struct Data Karyawan"
Algoritma pemrograman 2 - Contoh program"Struct Data Karyawan"Algoritma pemrograman 2 - Contoh program"Struct Data Karyawan"
Algoritma pemrograman 2 - Contoh program"Struct Data Karyawan"Derina Ellya R
 
Graf ( Matematika Diskrit)
Graf ( Matematika Diskrit)Graf ( Matematika Diskrit)
Graf ( Matematika Diskrit)zachrison htg
 
Basis Data : Pemodelan Erd
Basis Data : Pemodelan ErdBasis Data : Pemodelan Erd
Basis Data : Pemodelan Erdamalianuryamin
 
Metode pencarian heuristik
Metode pencarian heuristikMetode pencarian heuristik
Metode pencarian heuristikBaguss Chandrass
 
Laporan hasil praktikum modul i pengenalan pascal
Laporan hasil praktikum modul i pengenalan pascalLaporan hasil praktikum modul i pengenalan pascal
Laporan hasil praktikum modul i pengenalan pascalMeycelino A. T
 
Modul Pratikum Algoritma dan Pemrograman dalam Bahasa Visual C++ 2010
Modul Pratikum Algoritma dan Pemrograman dalam Bahasa Visual C++ 2010Modul Pratikum Algoritma dan Pemrograman dalam Bahasa Visual C++ 2010
Modul Pratikum Algoritma dan Pemrograman dalam Bahasa Visual C++ 2010eddie Ismantoe
 
Software Requirement Specification SRS
Software Requirement Specification SRSSoftware Requirement Specification SRS
Software Requirement Specification SRSSeptian Rico Hernawan
 
Laporan Praktikum Basis Data Modul IV-Membuat Database Pada PHPMYADMIN
Laporan Praktikum Basis Data Modul IV-Membuat Database Pada PHPMYADMINLaporan Praktikum Basis Data Modul IV-Membuat Database Pada PHPMYADMIN
Laporan Praktikum Basis Data Modul IV-Membuat Database Pada PHPMYADMINShofura Kamal
 

What's hot (20)

Matematika Diskrit - 10 pohon - 04
Matematika Diskrit - 10 pohon - 04Matematika Diskrit - 10 pohon - 04
Matematika Diskrit - 10 pohon - 04
 
Matematika Diskrit - 11 kompleksitas algoritma - 03
Matematika Diskrit - 11 kompleksitas algoritma - 03Matematika Diskrit - 11 kompleksitas algoritma - 03
Matematika Diskrit - 11 kompleksitas algoritma - 03
 
Kisi kisi sbp
Kisi kisi sbpKisi kisi sbp
Kisi kisi sbp
 
Bab 5 komputer sederhana sap-1
Bab 5   komputer sederhana sap-1Bab 5   komputer sederhana sap-1
Bab 5 komputer sederhana sap-1
 
Laporan praktikum 1 pemrograman mobile
Laporan praktikum 1 pemrograman mobileLaporan praktikum 1 pemrograman mobile
Laporan praktikum 1 pemrograman mobile
 
OPERASI INPUT OUTPUT di Linux
OPERASI INPUT OUTPUT di LinuxOPERASI INPUT OUTPUT di Linux
OPERASI INPUT OUTPUT di Linux
 
Penjelasan Program
Penjelasan ProgramPenjelasan Program
Penjelasan Program
 
Algoritma Greedy (contoh soal)
Algoritma Greedy (contoh soal)Algoritma Greedy (contoh soal)
Algoritma Greedy (contoh soal)
 
Laporan Praktikum Basis Data Modul I-Membangun Database SQL Pada MYSQL
Laporan Praktikum Basis Data Modul I-Membangun Database SQL Pada MYSQLLaporan Praktikum Basis Data Modul I-Membangun Database SQL Pada MYSQL
Laporan Praktikum Basis Data Modul I-Membangun Database SQL Pada MYSQL
 
BAB 2 : KALIMAT BERKUANTOR
BAB 2 : KALIMAT BERKUANTORBAB 2 : KALIMAT BERKUANTOR
BAB 2 : KALIMAT BERKUANTOR
 
Matematika Diskrit - 07 teori bilangan - 01
Matematika Diskrit - 07 teori bilangan - 01Matematika Diskrit - 07 teori bilangan - 01
Matematika Diskrit - 07 teori bilangan - 01
 
Algoritma pemrograman 2 - Contoh program"Struct Data Karyawan"
Algoritma pemrograman 2 - Contoh program"Struct Data Karyawan"Algoritma pemrograman 2 - Contoh program"Struct Data Karyawan"
Algoritma pemrograman 2 - Contoh program"Struct Data Karyawan"
 
Graf ( Matematika Diskrit)
Graf ( Matematika Diskrit)Graf ( Matematika Diskrit)
Graf ( Matematika Diskrit)
 
Basis Data : Pemodelan Erd
Basis Data : Pemodelan ErdBasis Data : Pemodelan Erd
Basis Data : Pemodelan Erd
 
Jawaban Struktur data soal-latihan
Jawaban Struktur data soal-latihanJawaban Struktur data soal-latihan
Jawaban Struktur data soal-latihan
 
Metode pencarian heuristik
Metode pencarian heuristikMetode pencarian heuristik
Metode pencarian heuristik
 
Laporan hasil praktikum modul i pengenalan pascal
Laporan hasil praktikum modul i pengenalan pascalLaporan hasil praktikum modul i pengenalan pascal
Laporan hasil praktikum modul i pengenalan pascal
 
Modul Pratikum Algoritma dan Pemrograman dalam Bahasa Visual C++ 2010
Modul Pratikum Algoritma dan Pemrograman dalam Bahasa Visual C++ 2010Modul Pratikum Algoritma dan Pemrograman dalam Bahasa Visual C++ 2010
Modul Pratikum Algoritma dan Pemrograman dalam Bahasa Visual C++ 2010
 
Software Requirement Specification SRS
Software Requirement Specification SRSSoftware Requirement Specification SRS
Software Requirement Specification SRS
 
Laporan Praktikum Basis Data Modul IV-Membuat Database Pada PHPMYADMIN
Laporan Praktikum Basis Data Modul IV-Membuat Database Pada PHPMYADMINLaporan Praktikum Basis Data Modul IV-Membuat Database Pada PHPMYADMIN
Laporan Praktikum Basis Data Modul IV-Membuat Database Pada PHPMYADMIN
 

Similar to Konsep dasar logic programming

Logika predikat. logika predikat disebut juga kalkulus predikat (predicate ca...
Logika predikat. logika predikat disebut juga kalkulus predikat (predicate ca...Logika predikat. logika predikat disebut juga kalkulus predikat (predicate ca...
Logika predikat. logika predikat disebut juga kalkulus predikat (predicate ca...MuhammadFajarB1
 
Kecerdasan Buatan
Kecerdasan BuatanKecerdasan Buatan
Kecerdasan Buatananis_mh
 
Intelegensi Buatan - Representasi Pengetahuan
Intelegensi Buatan - Representasi PengetahuanIntelegensi Buatan - Representasi Pengetahuan
Intelegensi Buatan - Representasi PengetahuanIlyas Ilyas Mo
 
Konsep Oop
Konsep OopKonsep Oop
Konsep Oopformatik
 
Bab VI - Analisis Data.pptx
Bab VI  - Analisis Data.pptxBab VI  - Analisis Data.pptx
Bab VI - Analisis Data.pptxIwanSaputra57
 
Representasi Pengetahuan
Representasi PengetahuanRepresentasi Pengetahuan
Representasi PengetahuanLangit Papageno
 
Kelas dan objek
Kelas  dan objekKelas  dan objek
Kelas dan objekroy naldo
 
3122500055_Fadhilah Margi Pertiwi_1 D3 IT B_Laporan Praktikum WPW 1.pdf
3122500055_Fadhilah Margi Pertiwi_1 D3 IT B_Laporan Praktikum WPW 1.pdf3122500055_Fadhilah Margi Pertiwi_1 D3 IT B_Laporan Praktikum WPW 1.pdf
3122500055_Fadhilah Margi Pertiwi_1 D3 IT B_Laporan Praktikum WPW 1.pdfFadhilahMargiPertiwi
 
Pertemuan 1 - Algoritma - Tri Lux
Pertemuan 1 - Algoritma - Tri LuxPertemuan 1 - Algoritma - Tri Lux
Pertemuan 1 - Algoritma - Tri Luxtri lux
 
Backend Dan Python Dasar.pptx
Backend Dan Python Dasar.pptxBackend Dan Python Dasar.pptx
Backend Dan Python Dasar.pptxstrongpapazola1
 
Makalah logika matematika
Makalah logika matematikaMakalah logika matematika
Makalah logika matematikaNasifah LasMana
 
Makalah logika matematika
Makalah logika matematikaMakalah logika matematika
Makalah logika matematikaNasifah LasMana
 
Aljabar sma 1
Aljabar sma 1Aljabar sma 1
Aljabar sma 1Rusmianty
 

Similar to Konsep dasar logic programming (20)

Ai 4
Ai 4Ai 4
Ai 4
 
Ai 4
Ai 4Ai 4
Ai 4
 
Logika predikat. logika predikat disebut juga kalkulus predikat (predicate ca...
Logika predikat. logika predikat disebut juga kalkulus predikat (predicate ca...Logika predikat. logika predikat disebut juga kalkulus predikat (predicate ca...
Logika predikat. logika predikat disebut juga kalkulus predikat (predicate ca...
 
Belajar Python.docx
Belajar Python.docxBelajar Python.docx
Belajar Python.docx
 
Kecerdasan Buatan
Kecerdasan BuatanKecerdasan Buatan
Kecerdasan Buatan
 
Python Dasar.pptx
Python Dasar.pptxPython Dasar.pptx
Python Dasar.pptx
 
Intelegensi Buatan - Representasi Pengetahuan
Intelegensi Buatan - Representasi PengetahuanIntelegensi Buatan - Representasi Pengetahuan
Intelegensi Buatan - Representasi Pengetahuan
 
Konsep Oop
Konsep OopKonsep Oop
Konsep Oop
 
bab3_alpro1.pptx
bab3_alpro1.pptxbab3_alpro1.pptx
bab3_alpro1.pptx
 
Bab VI - Analisis Data.pptx
Bab VI  - Analisis Data.pptxBab VI  - Analisis Data.pptx
Bab VI - Analisis Data.pptx
 
Representasi Pengetahuan
Representasi PengetahuanRepresentasi Pengetahuan
Representasi Pengetahuan
 
Kelas dan objek
Kelas  dan objekKelas  dan objek
Kelas dan objek
 
Modul pbo
Modul pboModul pbo
Modul pbo
 
3122500055_Fadhilah Margi Pertiwi_1 D3 IT B_Laporan Praktikum WPW 1.pdf
3122500055_Fadhilah Margi Pertiwi_1 D3 IT B_Laporan Praktikum WPW 1.pdf3122500055_Fadhilah Margi Pertiwi_1 D3 IT B_Laporan Praktikum WPW 1.pdf
3122500055_Fadhilah Margi Pertiwi_1 D3 IT B_Laporan Praktikum WPW 1.pdf
 
Pertemuan 1 - Algoritma - Tri Lux
Pertemuan 1 - Algoritma - Tri LuxPertemuan 1 - Algoritma - Tri Lux
Pertemuan 1 - Algoritma - Tri Lux
 
12561989.ppt
12561989.ppt12561989.ppt
12561989.ppt
 
Backend Dan Python Dasar.pptx
Backend Dan Python Dasar.pptxBackend Dan Python Dasar.pptx
Backend Dan Python Dasar.pptx
 
Makalah logika matematika
Makalah logika matematikaMakalah logika matematika
Makalah logika matematika
 
Makalah logika matematika
Makalah logika matematikaMakalah logika matematika
Makalah logika matematika
 
Aljabar sma 1
Aljabar sma 1Aljabar sma 1
Aljabar sma 1
 

Konsep dasar logic programming

  • 1.
  • 2. Programming logic dikenal sebagai bahasa deskriptif (descriptive language), yang berarti dengan diberikan serangkaian fakta-fakta dan aturan- aturan, dengan menggunakan cara berpikir deduktif (deductive reasoning), akan dapat menyelesaikan permasalahan suatu program.
  • 3. Perbedaan pemrograman logik dengan procedural Dalam bahasa prosedural, programmer harus memberikan instruksi tahap demi tahap agar komputer dapat dengan pasti bagaimana menyelesaikan permasalahan yang diberikan. Dengan kata lain, programmer harus tahu lebih dahulu bagaimana cara menyelesaikan permasalahan sebelum diinstuksikan ke komputer. Lain jika dibandingkan dengan programmer Prolog. Programmer Prolog hanya membutuhkan deskripsi / gambaran permasalahan, lalu menerjemahkannya ke bahasa Prolog. Selanjutnya tinggal sistem Prolog yang menentukan bagaimana mencari solusinya.
  • 4. Ciri pemrograman logik 0 Tidak berfikir dalam urut-urutan operasi komputer seperti pada pemrograman prosedural, tapi menyatakan program dalam bentuk “deklarasi” 0 Knowladge dan asumsi sudah cukup untuk menyelesaikan persoalan jika dinyatakan secara eksplisit sebagai aksioma logik 0 Program logik dieksekusi dengan memberikan padanya sebuah problem yang dinyatakan dalam pernyataan logik yang di sebut goal statement 0 Eksekusi program adalah usaha untuk membuktikan goal benar, dengan asumsi (berupa fakta, aturan) yang ada pada program
  • 5. Awal Pemrograman Logik 0 Kowalski dan Colmerauer mencanangkan interpretasi prosedural dari Klausa Horn: Aksioma: A if B1 and B2 and … and Bn Dapat ditulis sebagai prosedur: o A adalah prosedure head o Bi adalah Body o A benar, jika B benar
  • 6. Klausa Horn Konstruksi program logik 0 Fakta 0 Rules (aturan) 0 Query Aturan, fakta dan query adalah Klausa Horn
  • 7. Fakta 0 Adalah kalimat sederhana untuk menyatakan relasi antar objek 0 Fakta dalam pemrograman logik dituliskan sebagai predikat 0 Hanya fakta yang benar yang dimasukan ke dalam basis data dalam suatu program deklaratif 0 Fakta yang benar tersebut dienumerasi satu per satu dan harus sesuai dengan dunia nyata yang diprogram Fakta : Apa yang diketahui Dalam Prolog, relasi antara object-object dinamakan predikat. Dalam bahasa natural relasi disimbolisasikan oleh suatu kalimat. Dalam logika predikat yang Prolog gunakan, suatu relasi adalah kesimpulan dalam suatu frase sederhana. Suatu fakta memiliki nama relasi diikuti object atau object- object di dalam tanda kurung. Sebagaimana kalimat, fakta tersebut diakhiri dengan tanda titik (.).
  • 8. 0 Berikut ini beberapa fakta yang mengekspresikan relasi suka dalam bahasa natural: Toni suka Ina. Ina suka Toni. Toni suka kucing. Dan dalam sintak Prolog, fakta di atas ditulis: suka(toni,ina). suka(ina,toni). suka(toni,kucing). Fakta juga bisa mengekspresikan sifat (property) dari suatu object sebagaimana suatu relasi Dalam bahasa natural kalimat “Kodok berwarna hijau” dan “Andi adalah laki-laki” diubah ke dalam sintak Prolog menjadi: hijau(kodok). lakilaki(Andi).
  • 9. 0Rules (Aturan) Aturan: Apa yang dapat disimpulkan dari fakta yang ada Aturan membuat kita dapat mengambil suatu fakta dari fakta yang lain. Dengan bahasa lain, aturan adalah suatu konklusi diketahui benar jika satu atau lebih konklusi atau fakta lain ditemukan benar
  • 10. Berikut ini beberapa aturan yang berhubungan dengan relasi suka: Ina suka apapun yang Toni suka. Komeng suka apapun yang berwarna hijau. Dengan aturan di atas, dapat disimpulkan dari beberapa fakta sebelumnya mengenai sesuatu yang Ina dan Komeng suka: Ina suka Toni Komeng suka Kodok. Untuk menuliskan aturan tersebut dalam sintak Prolog hanya dibutuhkan sedikit perubahan seperti ini: suka(ina, Sesuatu):- suka(toni, Sesuatu). suka(komeng, Sesuatu):- hijau(Sesuatu). Simbol :- diucapkan dengan “jika” dan memisahkan dua bagian dari aturan yaitu head dan body. Aturan di atas dalam makna prosedur, bisa berarti “untuk membuktikan Inung suka sesuatu, buktikanlah bahwa Toni suka hal yang sama” dan “untuk membuktikan Komeng suka sesuatu, buktikanlah bahwa sesuatu itu berwarna hijau”.
  • 11. QUERY Kalau kita sudah memberikan Prolog sekumpulan fakta, selanjutkan dapat diajukan pertanyaan sehubungan dengan fakta- fakta. Ini dikenal dengan nama memberikan query ke sistem Prolog (querying the Prolog system). Pertanyaan yang diajukan ke Prolog sama tipenya seperti dalam bahasa natural. Berdasarkan pada fakta dan aturan yang diberikan sebelumnya, kita dapat menjawab pertanyaan tentang relasi-relasi ini sebagaimana Prolog juga bisa: Apakah Toni menyukai Ina? dalam sintak Prolog: suka(toni, ina) dengan memberikan query ini, Prolog akan menjawab: Yes
  • 13. DOMAINS Domains berisi deklarasi (pernyataan) tentang jenis data yang digunakan dalam fakta dan aturan. Mirip dengan bahasa Pascal atau C. Ada lima domain baku di dalam Prolog, yaitu: 1. char, karakter tunggal yang diapit oleh tanda kutip tunggal: ‘a’, ‘b’, ‘13’. 2. integer, bilangan bulat antara –32768 hingga 32767. Notasi $ digunakan untuk menunjukkan bilangan heksa. 3. real, bilangan nyata 4. string, deretan karakter yang diapit oleh tanda kutip dobel, misalnya “ipb”. 5. symbol, rangkaian karakter yang diawali dengan huruf kecil dan tanpa tanda apa pun.
  • 14. 0 CLAUSES Sekumpulan klausa dari predikat yang sama harus dikelompokkan dalam bagian ini. Dalam melakukan pemanggilan klausa, Prolog melacaknya berurutan dari atas ke bawah.Bagian ini merupakan inti dari program Prolog, dimana semua fakta dan aturan diimplementasikan di sini.
  • 18. Contoh 1. Program untuk menyatakan hubungan kakek, ayah, dan ibu. predicates grandfather(symbol,symbol) father(symbol,symbol) mother(symbol,symbol) clauses grandfather(X,Z):-father(X,Y),father(Y,Z). grandfather(X,Z):-father(X,Y),mother(Y,Z). father(john,bill). father(bill,mary). father(bill,tom). father(tom,chris). father(tom,bob). mother(mary,june). mother(mary,katie). goal clearwindow, father(Bapak,chris), write(Bapak),nl, grandfather(Kakek,chris), write(Kakek).
  • 19. Contoh 2. predicates ukuran(symbol, symbol) warna(symbol,symbol) gelap(symbol) clauses ukuran(beruang, besar). ukuran(kelinci, kecil). ukuran(kucing, kecil). warna(beruang, coklat). warna(kucing, hitam). warna(kelinci, putih). gelap(Z):-warna(Z, hitam). gelap(Z):-warna(Z,coklat).
  • 21.
  • 23. Goal: ayah(hendra,pranoto) <enter> Goal: ayah(pranoto,deni) <enter> Goal: ayah(hendra,deni) <enter> Goal: ayah(Ayah,X) <enter> Goal: kakek(Kakek,X) <enter> Goal: kakek(Z,sutarno) <enter> Goal: ayah(hendra,X) <enter>
  • 24. VARIABLE. Besaran yang nilainya dapat berubah-ubah disebut variabel. Misalnya : Siapakah ayah Deni?. Karena ayah Deni belum diketahui, maka dituliskan dalam suatu variabel, misalnya X dan dituliskan sebagai : GOAL: ayah(X,deni)<enter> X=pranoto CARA PENULISAN VARIABEL. 0 Nama variabel harus diawali dengan huruf besar atau garis bawah (_). 0 Nama variabel dapat terdiri dari huruf, bilangan atau simbol dan merupakan satu kesatuan dengan panjang maksimum 250 karakter. 0 Nama variabel hendaknya mengandung makna yang berkaitan dengan data yang dinyatakannya. Contoh : Tanggal_lahir Nama_ayah
  • 25. MACAM VARIABEL 0 Variabel bebas (Free variable) : variabel yang belum mempunyai nilai tertentu pada suatu saat. 0 Variabel terikat (Bound variable) : variabel yang sudah mempunyai nilai tertentu pada suatu saat. Contoh : GOAL: ayah(Ayah,deni), ayah(Ayah,bardan). Yang berarti siapa ayah deni dan juga ayah bardan? 0 Variabel tak bernama (Anonymous variable) : Bila anda ingin mendapatkan informasi tertentu, anda dapat menggunakan variabel tak bernama untuk mengabaikan nilai yang tak dikehendaki. Dalam Prolog variabel tak bernama dituliskan dengan garis bawah (‘_’). Variabel tak bernama tak pernah terikat pada suatu nilai tertentu sehingga selalu sepadan dengan nilai apapun.
  • 26. 0 Misal pada contoh program di atas anda ingin mengetahui nama-nama orang yang mempunyai anak (menjadi orang tua) tetapi anda tidak ingin mengetahui anak-anaknya, anda dapat menanyakan : Goal: ayah(Ayah,_) dan Prolog akan menjawab : Ayah=hendra Ayah=hendra Ayah=pranoto Ayah=pranoto Ayah=kristanto Ayah=kristanto 0 Variabel tak bernama dapat juga untuk menyatakan fakta “setiap/semua” Contoh : Setiap mahasiswa mempunyai komputer Prolog : mempunyai(_,komputer)
  • 27. ARITHMETIC EXPRESSIONS Z is X Expression X is evaluated and the result is unified with Z. X + Y Addition X - Y Subtraction X * Y Multiplication X / Y Floating-point division X // Y Integer division X mod Y X modulo Y X ** Y exponentiation (Y > 0). X ^ Y exponentiation (Y > 0). [Not ISO Standard]
  • 28. X < Y The value of X is less than the value of Y. X > Y The value of X is greater than the value of Y. X =< Y The value of X is less than or equal to the value of Y. X <= Y The value of X is less than or equal to the value of Y. [Not ISO Standard] X >= Y The value of X is greater than or equal to the value of Y.
  • 29. GOAL MAJEMUK. Dimaksudkan adalah goal yang terdiri lebih dari satu pertanyaan. Bagian dari goal disebut sub goal .
  • 32. 0 Misal anda ingin mendapatkan informasi tentang mobil yang harganya diatas 85, Turbo Prolog akan mencari padanan sub goal mobil(Merk,Warna,Tahun,Harga) dengan fakta yang ada dimulai dari fakta pertama, kemudian dilanjutkan ke sub goal berikutnya yaitu apakah harganya >85, jika benar maka turbo prolog akan memunculkan solusi dan diteruskan ke fakta yang lain, jika tidak benar maka Turbo Prolog akan mencari kemungkinan yang lain, dst. Sehingga diperoleh informasi diinginkan yang merupakan solusi sbb : Goal: mobil(Merk,Warna,Tahun,Harga),Harga>85 Merk=bmw, Warna=putih, Tahun=1997, Harga=100 Merk=peugeot, Warna=metalic, Tahun=1999, Harga=95 Merk=honda, Warna=hitam, Tahun=1999, Harga=98 Merk=corolla, Warna=merah, Tahun=2000, Harga=97 4 Solutions
  • 33. misalnya mobil yang tahunnya > 1997 dan warnanya merah. Goal: mobil(Merk,Warna,Tahun,Harga), Warna=merah, Tahun>1997
  • 34. UNIFIKASI UNIFIKASI Proses yang dilakukan oleh Turbo Prolog untuk mencari padanan antara pernyataan yang terdapat pada aturan dengan fakta atau kepala aturan yang lain. Syarat terjadinya unifikasi antara 2 (dua) pernyataan : 0 Mempunyai relasi yang sama. 0 Mempunyai jumlah dan posisi argumen yang sama. 0 Argumen yang berpadanan harus dari jenis data yang sama. 0 Semua pasangan argumen (pada data majemuk) harus juga berpadanan.
  • 35. Contoh terjadi unifikasi : 0 ayah(Ayah, pranoto) dengan ayah(hendra,pranoto) 0 lahir(Tanggal,Bulan,Tahun) dengan lahir(12,”Agustus”,1964) Contoh tidak akan terjadi unifikasi : 0 ayah(hendra) dengan ayah(hendra,pranoto) Karena mempunyai jumlah argumen yang tidak sama, meskipun mempunyai nama relasi yang sama.
  • 36. PROSES PENCARIAN JAWABAN. 0 Proses pencarian jawaban dalam Turbo Prolog 2.0 dilakukan dengan cara pemadanan (padanan). 0 Untuk lebih jelasnya, misal pada contoh program di atas (silsilah keluarga) dilakukan penambahan beberapa fakta dan aturan sbb:
  • 37. /* Contoh program silsilah keluarga */ DOMAINS nama = symbol PREDICATES ayah(nama,nama) kakek(nama,nama) ibu(nama,nama) nenek(nama,nama) saudara_kandung(nama,nama) saudara_sepupu(nama,nama)
  • 38. CLAUSES /* Fakta */ /* Orang tua */ ayah(hendra,pranoto). ayah(hendra,kristianto). ayah(pranoto,bardan). ayah(pranoto,deni). ayah(kristianto,harahap). ayah(kristianto,sutarno).
  • 40. /* Aturan */ /* Kakek adalah kakek Cucu */ kakek(Kakek,Cucu) :- ayah(Ayah,Cucu), ayah(Kakek,Ayah). kakek(Kakek,Cucu) :- ibu(Ibu,Cucu), ayah(Kakek,Ibu). /* Nenek adalah nenek Cucu */ nenek(Nenek,Cucu):- ayah(Ayah,Cucu), ibu(Nenek,Ayah). nenek(Nenek,Cucu):- ibu(Ibu,Cucu), ibu(Nenek,Ibu).
  • 41. /* Nama1 saudara kandung Nama2 */ saudara_kandung(Nama1,Nama2):- ayah(Ayah,Nama1), ayah(Ayah,Nama2), ibu(Ibu,Nama1), ibu(Ibu,Nama2), Nama1 <> Nama2. /* Sdr1 saudara sepupu Sdr2 */ saudara_sepupu(Sdr1,Sdr2):- ayah(Ayah1,Sdr1), ayah(Ayah2,Sdr2), saudara_kandung(Ayah1,Ayah2).
  • 43. GOAL: kakek(Kakek,bardan) 0 Turbo Prolog 2.0 akan mencari padanan goal di atas dengan fakta/ aturan, mulai dari yang teratas sampai ditemukan fakta/aturan yang sepadan, yaitu : kakek(Kakek,bardan) – kakek(Kakek,Cucu) 0 Variabel Cucu terikat menjadi bardan dan Turbo Prolog 2.0 akan mencari nilai variabel Kakek dengan membuktikan apakah semua pernyataan (subgoal) di dalam aturan tersebut benar. Pernyataan yang pertama : ayah(Ayah,Cucu) – ayah(Ayah,bardan)
  • 44. 0 Untuk membuktikan pernyataan di atas benar, Turbo Prolog 2.0 mencari padanan dengan fakta yang ada mulai dari yang teratas hingga ditemukan : ayah(Ayah,bardan) – ayah(pranoto,bardan) 0 Ini berarti variabel Ayah terikat menjadi pranoto. Karena subgoal yang pertama benar, maka Turbo Prolog 2.0 melanjutkan ke subgoal berikutnya dengan membawa serta semua variabel yang telah terikat pada subgoal sebelumnya : Ditemukan padanan : ayah(Kakek,pranoto) – ayah(hendra,pranoto) Sehingga variabel Kakek terikat menjadi hendra.
  • 45. 0 Setelah semua subgoal dieksekusi dan semua variabel menjadi variabel terikat, Turbo Prolog 2.0 akan kembali ke bagian kepala aturan tersebut dengan membawa semua variabel terikat, sedangkan nilai variabel yang diteruskan oleh aturan kakek tergantung pada variabel yang terdapat pada bagian kepala. Pada aturan kakek, hanya nilai variabel Kakek yang diteruskan sedangkan nilai variabel Ayah tidak diperlukan. kakek(Kakek,bardan) – kakek(hendra,bardan) 0 Salah satu jawaban akhir adalah : Kakek = hendra.
  • 46. 1. Siapakah kakek Bardan ? 2. Siapakah Cucu hendra? 3. Siapakah saudara kandung pranoto? 4. Siapakah keponakan kristanto? 5. Siapa saja yang mempunyai hubungan saudara kandung? 6. Siapa saja yang mempunyai hubungan saudara sepupu? 7. Siapakah nenek dari harahap? 8. Siapakah saudara_kandung Bardan?
  • 47. BACKTRACKING Visual Prolog menggunakan metode ini untuk menemukan suatu solusi dari permasalahan yang diberikan.Visual Prolog dalam memulai mencari solusi suatu permasalahan (atau goal) harus membuat keputusan di antara kemungkinan-kemungkinan yang ada. Ia menandai di setiap percabangan (dikenal dengan titik lacak balik) dan memilih subgoal pertama untuk telusuri. Jika subgoal tersebut gagal (ekivalen dengan menemukan jalan buntu), Visual Prolog akan lacakbalik ke titik lacakbalik (back-tracking point) terakhir dan mencoba alternatif subgoal yang lain.
  • 48. /* Contoh */ PREDICATES jenis(symbol, symbol) adalah(symbol, symbol) hidup(symbol, symbol) dapat_berenang(symbol)
  • 51. Untuk mengetahui terjadinya lacakbalik, akan diamati langkah demi langkah bagaimana Visual Prolog mencari solusi dari goal yang diberikan. 1. Visual Prolog memanggil predikat dapat_berenang dengan variabel bebas Apa. Untuk mencoba menjawab panggilan ini, Visual Prolog mencari di program untuk pencocokan. Ditemukan kecocokan dengan klausa dapat_berenang, dan variabel Apa diunifikasikan dengan variabel Y. 2. Kemudian, Visual Prolog berusaha untuk memenuhi bagian body dari rule.Untuk melakukannya, Visual Prolog memanggil subgoal yang pertama pada body dari rule tersebut yaitu jenis(X, hewan), dan mencari pencocokan untuk panggilan ini. Ditemukan pencocokan dengan fakta pertama dari klausa relasi jenis. Pada titik ini X diikat dengan nilai vertebrata. Kemudian Visual Prolog menset titik lacakbalik pada fakta jenis(vertebrata,hewan).
  • 52. 3. Dengan X diikat pada nilai vertebrata, Visual Prolog membuat panggilan untuk subgoal yang kedua yaitu adalah(Y, vertebrata), dan mencari pencocokan. Dan menemukan dengan fakta yang pertama adalah(zebra, vertebrata). Y diikat dengan nilai zebra dan Prolog menset titik lacakbalik pada adalah(zebra, vertebrata). 4. Kemudian Prolog mencoba untuk memenuhi subgoal yang terakhir yaitu, hidup(zebra, di_air). Karena tidak ditemukan fakta tersebut maka panggilan gagal dan Prolog memulai lacakbalik untuk menemukan solusi lain. 5. Ketika Visual Prolog lacakbalik, proses kembali ke titik lacakbalik terakhir. Pada kasus ini, titik lacakbalik terakhir berada pada subgoal yang kedua dari rule yaitu fakta adalah(zebra, vertebrata).
  • 53. 6. Ketika Visual Prolog berada pada titik lacakbalik, ia akan membebaskan variabel yang diberi nilai pada titik lacakbalik tersebut dan berusaha mencari jawaban lain untuk panggilan tersebut dalam kasus ini adalah(Y, vertebrata). 7. Visual Prolog melanjutkan pencarian ke bawah dari titik lacakbalik tersebut untuk pencocokan klausa yang lain. Karena tidak ada klausa yang ditemukan, maka terjadi lacak balik dan proses kembali ke titik lacakbalik terakhir yaitu di jenis(vertebrata, hewan). 8. Visual Prolog membebaskan variabel dan mencoba untuk menemukan solusi lain dari panggilan jenis(X, hewan). Pencarian dimulai setelah titik lacakbalik dan menemukan kecocokan dengan fakta jenis di program pada klausa jenis(ikan, hewan). X kemudian diikat pada nilai ikan, dan titik lacakbalik baru di set pada fakta tersebut.
  • 54. 9. Kemudian Visual Prolog bergerak ke subgoal berikutnya pada rule. Karena ini panggilan baru, maka pencarian dimulai dari bagian atas program dengan panggilan adalah(Y, ikan). Visual Prolog menemukan kecocokan dengan panggilan ini. Y diikat dengan nilai lele, dan sebuah titik lacakbalik baru diset pada fakta adalah(lele, ikan). 10. Karena Y diikat dengan nilai lele, panggilan subgoal berikutnya adalah hidup(lele, di_air). Karena panggilan baru, maka pencarian dimulai dari bagian atas program. Prolog mencoba setiap fakta namun gagal menemukan kecocokan dan subgol dinyatakan gagal. 11. Visual Prolog, kemudian kembali ke titik lacakbalik terakhir yaitu pada adalah(lele, ikan). Variabel yang diikat pada pencocokan ini kemudian dibebaskan. Beranjak dari titik ini, Visual Prolog mencari solusi baru untuk panggilan adalah(Y, ikan).
  • 55. 12. Visual Prolog menemukan kecocokan dengan klausa adalah berikutnya. Y kemudian diikat dengan simbol tuna. Kemudian Visual Prolog mencoba lagi subgoal yang terakhir dengan variabel Y diikat pada nilai tuna. Panggilannya menjadi hidup(tuna, di_air). Pencarian kembali dimulai dari bagian atas program karena merupakan panggilan baru dan menemukan kecocokan dengan fakta yang ada dan subgoal terakhir sukses (true). 13. Pada titik ini, body dari rule dapat_berenang dapat dipenuhi. Visual Prolog mengembalikan nilai Y pada pemanggil (goal) dapat_berenang(Apa). Karena Apa diikat nilainya ke Y dan Y diikat nilainya tuna, maka sekarangApa juga diikat nilainya ke tuna pada goal tersebut. Visual Prolog kan menampilkan jawaban: Apa=tuna 1 Solution.
  • 56. Pengendalian Lacak Balik Predikat Cut (!) Visual Prolog memiliki cut yang digunakan untuk mencegah lacakbalik, ditulis berupa sebuah tanda seru (!). Efek dari cut adalah sederhana, yaitu tidak akan memungkinkan terjadinya lacakbalik melewati sebuah cut. Kita menempatkan cut dalam program sama persis seperti menempatkan sebuah subgoal pada body dari suatu rule. Ketika proses melewati cut, pemanggil ke cut dinyatakan sukses dan subgoal berikutnya (jika ada) dipanggil. Sekali sebuah cut dilewati, adalah menjadi tidak mungkin untuk melakukan lacakbalik pada subgoal yang berada pada sebelum cut pada klausa yang sedang diproses dan adalah menjadi tidak mungkin untuk melakukan lacakbalik ke predikat lain yang mendefinisikan predikat yang sekarang diproses (predikat yang mengandung cut). Berikut ini contoh penggunaan cut.
  • 58. Pada contoh di atas goalnya adalah mencari mobil Jaguar yangmempunyai warna seksi dengan harga yang tidak terlalu mahal. Cut yang ada pada rule beli_mobil mempunyai asumsi bahwa hanya satu Jaguar yang mempunyai warna seksi yang ada di database dan jika harganya terlalu tinggimaka tidak perlu mencari mobil yang lain. Untuk melihat bagaimana cut mempengaruhi proses, kita program di atas langkah demi langkah. 1. Visual Prolog memanggil mobil, subgoal pertama dari predikat beli_mobil. 2. Tes pada mobil pertama, ferrari menghasilkan gagal. 3. Kemudian tes klausa mobil selanjutnya menemui kecocokan dan mengikat variabel Warna ke nilai hitam.
  • 59. 4. Karena berhasil, maka akan memanggil subgoal berikutnya apakah warna mobil yang dipilih adalah warna seksi. Hitam bukan warna seksi pada program sehingga tes gagal. 5. Visual Prolog lacakbalik ke pemanggil mobil dan sekali lagi mencari sebuah Jaguar yang memenuhi kriteria. 6. Kemudian ditemukan dan sekali lagi menguji warna mobil tersebut. Kali ini warnanya adalah seksi dan Prolog melanjutkan ke subgoal berikutnya pada rule yaitu cut. Cut kemudian sukses dan secara efektif “membekukan” variabel yang diikat pada klausa sebelumnya. 7. Visual Prolog sekarang melanjutkan ke subgoal selanjutnya (terakhir) pada rule yaitu perbandingan: Harga < 25000.
  • 60. Uji ini gagal dan Visual Prolog akan melakukan lacakbalik dalam rangka untuk mencari mobil yang lain untuk diuji. Namun karena adanya cut yangmencegah terjadinya lacakbalik, maka tidak ada jalan lain lagi untuk subgoal yang terakhir dan goal berhenti pada kondisi gagal (failure).