Dokumen tersebut memberikan penjelasan tentang bahasa pemrograman Prolog, meliputi pengertian interpreter, contoh interpreter Prolog, tipe data dan operator yang digunakan, aturan sintaks Prolog, dan pengenalan studi kasus dalam Prolog.
1. User Guide PROgramming LOGic
Ir. S N M P Simamora, M.T.
Communication Systems Division, Pangalengge Educations
Pengantar Interpreter
Prolog adalah salah satu contoh Interpreter, meskipun ada juga dalam bentuk compiler. Yang
dimaksud dengan interpreter sebuah perangkat lunak, apabila memiliki ciri khas sebagai berikut:
Menerjemahkan line-code baris per baris; sehingga langsung dikerjakan. Untuk itu source
program tidak dituntut untuk ditulis secara lengkap dulu.
Jika saat dijalankan (generate) ditemukan bugs, maka dapat langsung dicari kesalahannya
dan diperbaiki. Hal ini memudahkan dilakukan secara interaktif.
Pada saat proses penerjemahan tidak pernah menghasilkan object program (object code).
Karena alasan inilah mengapa executable program juga tidak pernah ada dalam kamus
interpreter.
Proses penerjemahan dirasa lebih cepat dikarenakan baris per baris dari line-code langsung
dijalankan, sehingga hasilnya dapat dilihat.
Dalam membangun aplikasi pemrograman dirasa lebih lambat dikarenakan tidak dihasilkan
executable program, sehingga proses interpretasi dilakukan berulang kali sampai kepada
hasil yang diinginkan. Disamping itu juga source program masih tetap selalu digunakan jika
ingin menjalankan aplikasi program.
Karena alasan source program selalu digunakan menyebabkan keamanan atasnya sangat
rentan untuk diedit oleh pihak lain.
Bahasa Prolog pertama kali dibuat pada tahun 1970 oleh Alain Cormerauer dan Phillippe
Roussel di Marseilles University, Prancis. Pengembangan lebih lanjut adalah di komputer mikro
sehingga disebut Microprolog.
Hal-hal yang cocok untuk diimplementasikannya Prolog Language seperti:
Pemecahan masalah
Robotika dan Sistem Pakar
Pemakaian pangkalan data yang dinamik dan berhubungan
Pemakaian bahasa sehari-hari dalam mengkomunikasikan kepada aplikasi
Mendiagnosa sebuah problema kompleks
Bahasa Prolog dikenal lebih efisien dari bahasa pemrograman tingkat tinggi lain, sekalipun untuk
Bahasa Basic. Sebagai perbandingan untuk satu aplikasi pemrograman, Bahasa Prolog
membutuhkan line-code 10x lebih pendek dibandingkan dengan Bahasa Pascal.
Disamping itu juga Bahasa Prolog termasuk bahasa deklaratif, yakni terlebih dahulu menyajikan
fakta-fakta dan aturan-aturan yang diperlukan dalam menuju sebuah pemecahan masalah. Ini
berarti memungkinkan setiap penggunaan yang bekerja dengan informasi dan relasi-relasinya,
dan sebagai hasilnya didapatkan konklusi yang lebih pasti.
Bahasa Prolog selalu berpedoman kepada hubungan di antara kata-kata, anak kalimat, frasa dan
kontekstual. Untuk itu selalu dinamis dalam pemanfaatan natural language, sehingga seolah-olah
kita dapat mengkomunikasikan sesuatu dengan bahasa sehari-hari.
Bahasa Prolog bekerja secara efektif dengan fakta-fakta dan hubungannya sehingga lebih
memungkinkan dalam desain perangkat dari hubungan basis data, karena selalu menggali
terlebih dahulu dari dasar pengetahuan. Hal ini sangat mendekati dengan proses kerja dari basis
data yang menekankan kepada keterhubungan antara konsep-konsep yang dijabarkan dalam
sekumpulan data dan tingkatannya.
Lebih jauh dimungkinkan pengembangan Bahasa Prolog untuk bidang energi relativitas dan
nuklir yang menuntut solusi optimal pada masalah yang kompleks dan pelik.
1
2. Dalam pembahasan kali ini digunakan interpreter Turbo Prolog v2.0 dari Borland Corp. pada
platform sistem operasi Windows’98 SE.
Seiring dengan perkembangan sistem operasi berbasis 32 bit (Graphical User Interface),
interpreter yang bisa menerjemahkan Bahasa Prolog contohnya seperti berikut ini: (berjalan pada
platform Windows ‘98)
2
3. Beberapa Tipe Data dan Operator
Tipe Domains Penjelasan
Char Data numerik, huruf tunggal, atau simbol-simbol yang diapit oleh
tanda peti (‘ … ’)
String Semua kombinasi dari angka, huruf, dan simbol-simbol lain yang
diapit tanda petik ganda (“ … ”)
File File yang tersimpan di dalam disk (external memory maupun
archival memory)
Integer Semua bilangan bulat kecuali floating-point
Real Semua bilangan bulat termasuk floating-point
Symbol Sama seperti pada tipe domains string, akan tetapi tanpa tanda
petik.
Operand-1 Operator Operand-2 Hasil
Integer +,−,∗ Integer Integer
Real +,−,∗ Integer Real
Integer +,−,∗ Real Real
Real +,−,∗ Real Real
Integer / Real / Real Real
Integer Integer Integer
div
Integer Integer Integer
mod
Fungsi Penjelasan
abs(X) Mencari harga absolut dari X
cos(X) Fungsi trigonometri untuk mencari nilai cosine sudut X
sin(X) Fungsi trigonometri untuk mencari nilai sine sudut X
tan(X) Fungsi trigonometri untuk mencari nilai tangent sudut X
arctan(X) Fungsi trigonometri untuk mencari nilai anti-tangent sudut X
exp(X) Mencari nilai eksponensial dari X
ln(X) Mencari nilai logaritma natural dari X
log(X) Mencari nilai logaritma dari X
sqrt(X) Mencari nilai akar dari X
Mendapatkan bilangan random real untuk interval: 0 ≤ X < 1
random(X)
Mendapatkan bilangan random integer untuk interval: 0 ≤ Y < X
random(X,Y)
round(X) Mendapatkan bilangan numerik dengan membulatkan nilai X
trunc(X) Menghilangkan angka desimal X
Operator Penjelasan
Lebih kecil daripada S
<
Lebih kecil atau sama dengan S
≤
Sama dengan S
=
Lebih besar daripada S
>
Lebih besar atau sama dengan S
≥
Tidak sama dengan S
<> atau ><
Note : S adalah sesuatu nilai numerik sembarang
3
4. Aturan Sintaks Bahasa Prolog
Domains
…
…
Predicates
…
…
Goals
…
…
Clauses
…
…
misalkan:
Naek menyukai Bahasa Prolog
Dr. Pardomuan menemukan komputer D76
Aju Allen mendapatkan nilai A+ untuk mata kuliah Elektromagnetik
Jika Aju Allen mendapatkan nilai A+ untuk mata kuliah Elektromagnetik, maka Yehuda juga
Dalam Bahasa Prolog dituliskan sebagai berikut:
suka(naek,”Bahasa Prolog”).
menemukan(“Dr.Pardomuan”,”komputer D76”).
dapat_nilai(aju_allen,”A+”,elektromagnetik).
dapat_nilai(yehuda,nilai,mata_kuliah) if dapat_nilai(aju_allen,nilai,mata_kuliah).
Pengenalan Studi Kasus
Kasus-1:
Dalam sebuah hasil ujian EL-560 Pengolahan Sinyal Informasi, beberapa mahasiswa
mendapatkan nilai sebagai berikut:
M. Schmoth B
Naftali A
An Lah Kho B
Elvira C
Abner C
Seorang mahasiswa bernama Lewi selalu diprediksi prestasinya menyamai mahasiswa yang
bernama Naftali.
Buatlah fakta-fakta ini dalam Bahasa Prolog.
Solusi:
domains
nama = string
nilai = symbol
predicates
nilai_el560(nama,nilai)
clauses
nilai_el560(quot;M. Schmothquot;,b).
nilai_el560(quot;Naftaliquot;,a).
nilai_el560(quot;An Lah Khoquot;,b).
nilai_el560(quot;Elviraquot;,c).
nilai_el560(quot;Abnerquot;,c).
nilai_el560(quot;Lewiquot;,Punten) if nilai_el560(quot;Naftaliquot;,Punten).
4
5. Kasus-2:
Sebuah silsilah Toga Raja Sumba ditunjukkan berikut ini:
Raja Sumba
Sihombing Simamora
Purba Manalu Debataraja Rambe (Somerham)
Buatlah dalam Bahasa Prolog.
Solusi:
domains
kakek = string
ayah = string
anak = string
cucu = string
buyut = string
ompu = string
predicates
anaknya(ayah,anak)
cucunya(kakek,cucu)
pomparanna(buyut,ompu)
clauses
anaknya(quot;Raja Sumbaquot;,quot;Simamoraquot;).
anaknya(quot;Raja Sumbaquot;,quot;Sihombingquot;).
anaknya(quot;Simamoraquot;,quot;Purbaquot;).
anaknya(quot;Simamoraquot;,quot;Manaluquot;).
anaknya(quot;Simamoraquot;,quot;Debatarajaquot;).
cucunya(quot;Raja Sumbaquot;,quot;Purbaquot;).
cucunya(quot;Raja Sumbaquot;,quot;Manaluquot;).
cucunya(quot;Raja Sumbaquot;,quot;Debatarajaquot;).
pomparanna(quot;Debatarajaquot;,quot;Raja Sumbaquot;).
pomparanna(quot;Rambequot;,Ompu) if pomparanna(quot;Debatarajaquot;,Ompu).
Kasus-3:
Silahkan analisa line-code Bahasa Prolog berikut ini:
domains
suku = string
negara = string
kota = string
pekerjaan = symbol
predicates
kebangsaan(suku,negara)
letaknya(kota,negara)
domisil(suku,kota)
legal(pekerjaan,kota)
5
6. clauses
kebangsaan(quot;Batakquot;,quot;Indonesiaquot;).
kebangsaan(quot;Melayuquot;,quot;Malaysiaquot;).
kebangsaan(quot;Benggalingquot;,quot;Indiaquot;).
letaknya(quot;Medanquot;,quot;Indonesiaquot;).
letaknya(quot;Dolok Sanggulquot;,quot;Indonesiaquot;).
domisil(quot;Batakquot;,quot;Humbangquot;).
domisil(quot;Mandailingquot;,quot;Natalquot;).
domisil(quot;Batakquot;,quot;Tobaquot;).
legal(polisi,quot;Tiga Linggaquot;).
legal(pengemis,quot;Jakartaquot;).
legal(tukang_becak,Kota) if legal(pengemis,Kota).
Solusi:
Analisa-1:
Untuk domains symbol tidak diperbolehkan menggunakan huruf capital; huruf capital hanya
bisa dipergunakan untuk domains string dan untuk goals. Sebaliknya pada domains string,
meskipun telah huruf capital namun tidak diapit oleh tanda petik dua (“…”) tidak
diperbolehkan.
Berikutnya hanya di badan clauses saja diperbolehkan sebuah assignment diakhiri dengan
tanda titik (•).
Misalkan pada cuplikan line-code berikut ini adalah yang salah:
clauses
legal(Pengemis,quot;Jakartaquot;).
kebangsaan(Melayu,quot;Malaysiaquot;).
letaknya(quot;Dolok Sanggulquot;,quot;Indonesiaquot;)
Analisa-2:
Bagian domains dapat dihilangkan asalkan tipenya menggantikan nama variable pada bagian
predicates.
Misalkan:
domains
suku = string
negara = string
…
predicates
kebangsaan(suku,negara)
…
Digantikan menjadi:
predicates
kebangsaan(string,string)
…
Analisa-3:
Letak dari line-code berikut harus sekelompok.
Misalkan:
…
legal(pengemis,quot;Jakartaquot;).
legal(tukang_becak,Kota) if legal(pengemis,Kota).
…
6
7. Sehingga apabila tidak sekelompok dituliskan seperti berikut:
…
legal(tukang_becak,Kota) if legal(pengemis,Kota).
domisil(quot;Mandailingquot;,quot;Natalquot;).
domisil (quot;Batakquot;,quot;Tobaquot;).
legal(polisi,quot;Tiga Linggaquot;).
…
Akan muncul pesan kesalahan:
Clauses for the same predicate should be grouped.
Analisa-4:
Untuk menanyakan apakah Suku Batak berkebangsaan Indonesia :
Goal: kebangsaan(quot;Batakquot;,quot;Indonesiaquot;)
Yes
Untuk menanyakan letak Dolok Sanggul dimana :
Goal: letaknya(quot;Dolok Sanggulquot;,Dimana)
Dimana=Indonesia
1 Solution
Untuk menanyakan apakah Suku Melayu berkebangsaan Afrika Selatan :
Goal: kebangsaan(quot;Melayuquot;,quot;Afrika Selatanquot;)
No
Untuk menanyakan selain pekerjaan pengemis yang dilegalkan di Jakarta, apakah tukang
becak juga termasuk :
Goal: legal(tukang_becak,quot;Jakartaquot;)
Yes
Untuk menanyakan pekerjaan legal di beberapa kota berdasarkan fakta yang diberikan :
Goal: legal(Apa,Dimana)
Apa=polisi, Dimana=Tiga Lingga
Apa=pengemis, Dimana=Jakarta
Apa=tukang_becak, Dimana=Jakarta
3 Solutions
Untuk menanyakan Suku Batak berdomisil dimana saja:
Goal: domisil(quot;Batakquot;,Dimana)
Dimana=Humbang
Dimana=Toba
2 Solutions
Untuk menanyakan kota apa saja yang letaknya di Indonesia berdasar fakta yang disajikan:
Goal: letaknya(Apa,quot;Indonesiaquot;)
Apa=Medan
Apa=Dolok Sanggul
2 Solutions
Untuk menanyakan apakah kota Texas letaknya di Indonesia berdasar fakta yang disajikan:
Goal: letaknya(quot;Texasquot;,quot;
Indonesiaquot;)
No
7
8. Untuk menanyakan dimana letak kota Texas:
Goal: letaknya(quot;Texasquot;,Dimana)
No Solution
Karena berdasarkan kamus
pengetahuan, tidak disajikan fakta
letak kota Texas
Kasus-4:
Bangunlah sebuah operator artihmatika sederhana dalam Bahasa Prolog, yang meliputi
empat dasar operasi artihematika terhadap dua buah operand yang diinput oleh user.
Silahkan analisa line-code yang telah dibangun.
Solusi:
domains
op1 = integer
op2 = integer
op3 = integer
predicates
kali(op1,op2,op3)
bagi(op1,op2,op3)
tambah(op1,op2,op3)
kurang(op1,op2,op3)
clauses
kali(A,B,X) if X=A*B.
bagi(A,B,X) if X=A/B.
tambah(A,B,X) if X=A+B.
kurang(A,B,X) if X=A-B.
Analisa-1:
Untuk melakukan proses berikut → 50 ÷ 125, line-code-nya adalah:
Goal: bagi(50,125,X)
X=0
1 Solution
Namun mengapa X bernilai 0 , bagaimana jika domains untuk proses pembagian, kita
ubah sebagai berikut:
domains
op1 = integer
op2 = integer
op3 = real
predicates
kali(op1,op2,op3)
bagi(op1,op2,op3)
tambah(op1,op2,op3)
…
Sehingga saat kita panggil kembali menggunakan code yang tadi, didapatkan:
Goal: bagi(50,125,X)
X=0.4
1 Solution
8
9. Analisa-2:
Berikut akan dilakukan editing pada line-code untuk hasil yang sama, yakni sebagai berikut:
domains
op1 = integer
op2 = integer
op3 = real
predicates
kali(op1,op2,op3)
bagi(op1,op2,op3)
tambah(op1,op2,op3)
kurang(op1,op2,op3)
goal
bagi(50,125,Jawaban),write(Jawaban),nl.
clauses
kali(A,B,X) if X=A*B.
bagi(A,B,X) if X=A/B.
tambah(A,B,X) if X=A+B.
kurang(A,B,X) if X=A-B.
Untuk melakukan proses → 5 − (-3) , ditulis sebagai berikut:
…
goal
kurang(5,-3,Haasil),write(Haasil),nl.
…
Namun yang harus diingiat bahwa tidak boleh menuliskan secara bersamaan seperti berikut:
…
goal
kali(2,3,Hasil),write(Hasil),nl.
bagi(50,125,Jawaban),write(Jawaban),nl.
tambah(5,-7,Jawabann),write(Jawabann),nl.
kurang(5,-3,Haasil),write(Haasil),nl.
…
Analisa-3:
Berikut akan dilakukan editing pada line-code untuk menghitung :
Log(2.5)
144
ln(12.182493961)
goal 0.39794000867
N=log(2.5),
write(N).
goal
12
N=sqrt(144),
write(N).
goal
N=ln(12.182493961), 2.5
write(N).
9
10. Kasus-5:
Hitunglah berapa panjang string dari kalimat berikut:
Communication Systems Division, Pangalengge Educations
Solusi:
goal
X = quot;Communication Systems Division, Pangalengge Educationsquot;,
str_len(X,N),
write(N).
54
Kasus-6:
Hitunglah berapa nilai logaritma natural dari 12.182493961 dengan menggunakan editing
pada line code sebelumnya.
Solusi:
domains
op1 = real
op2 = real
predicates
log_nat(op1,op2)
clauses
log_nat(X,N) :-
N=ln(X).
Untuk mendapatkan hasil yang sama, dituliskan sebagai berikut:
Goal: log_nat(12.182493961,Berapa)
Berapa=2.5
1 Solution
Kasus-7:
Dua buah string disebutkan sebagai berikut:
Bahasa
dan
Prolog
Gabungkanlah dua buah string tersebut menggunakan sintaks: concat
Solusi:
goal
X=quot;Bahasaquot;,
Y=quot; Prologquot;,
concat(X,Y,Gabung),
write(Gabung).
Kasus-8:
Sebuah PFK → Ax2 + Bx + C
Carilah nilai diskriminannya dengan mendapatkan nilai masing-masing untuk elemen A, B, C
dari user.
10
11. Solusi:
domains
op1 = integer
op2 = integer
op3 = integer
dis = real
predicates
diskriminan(op1,op2,op3,dis)
clauses
diskriminan(A,B,C,D) :-
D=B*B-4*A*C.
Misalkan untuk PFK → X2 − 3X + 2, maka didapatkan nilai diskriminanya adalah sebagai
berikut:
Goal: diskriminan(1,-3,2,Berapa)
Berapa=1
1 Solution
Misalkan untuk PFK → X2 + X − 12, apakah nilai diskriminannya adalah −49, dapat
ditanyakan sebagai berikut:
Goal: diskriminan(1,1,-12,-49)
No
Ternyata bukan ☺☺, apakah 49?
Goal: diskriminan(1,1,-12,49)
Yes
Reference:
Bratko, I, “Prolog Programming for Artificial Intelligence – 1st edition”, Addison-Wesley,
Massachusetts, 1986.
Clocksin, W.F and Mellish, C.S., “Programming in Prolog – 3rd edition”, Springer-Verlag,
Berlin, 1987.
Cohen, J., “A view of the origins and development of PROLOG – Communications of the
Association for Computing Machinery”, 1988,
Colomb, R.M., “Enhancing unification in PROLOG through clause indexing”, Journal of Logic
Programming, 1991
Covington, M.A., “Natural Language Processing for Prolog Programmers”, Prentice-Hall,
Englewood Cliffs, New Jersey, 1994.
11