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
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.
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.
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).
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.
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).