Programming Logic (PROLOG)

11
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: 3 Pemecahan masalah 3 Robotika dan Sistem Pakar 3 Pemakaian pangkalan data yang dinamik dan berhubungan 3 Pemakaian bahasa sehari-hari dalam mengkomunikasikan kepada aplikasi 3 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

description

This tutorial will introduce and guides user how coding the declarative programming concept with PROLOG programming language. I use Turbo Prolog v2.0 from Borland Inc., as the interpereter.

Transcript of Programming Logic (PROLOG)

Page 1: Programming Logic (PROLOG)

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

Page 2: Programming Logic (PROLOG)

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

Page 3: Programming Logic (PROLOG)

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 div Integer Integer Integer mod Integer Integer

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 random(X) Mendapatkan bilangan random real untuk interval: 0 ≤ X < 1 random(X,Y) Mendapatkan bilangan random integer untuk interval: 0 ≤ Y < X 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 <> atau >< Tidak sama dengan S Note : S adalah sesuatu nilai numerik sembarang

3

Page 4: Programming Logic (PROLOG)

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("M. Schmoth",b). nilai_el560("Naftali",a). nilai_el560("An Lah Kho",b). nilai_el560("Elvira",c). nilai_el560("Abner",c). nilai_el560("Lewi",Punten) if nilai_el560("Naftali",Punten).

4

Page 5: Programming Logic (PROLOG)

Kasus-2:

Sebuah silsilah Toga Raja Sumba ditunjukkan berikut ini:

Simamora

DebatarajaManaluPurba

Sihombing

Raja Sumba

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("Raja Sumba","Simamora"). anaknya("Raja Sumba","Sihombing"). anaknya("Simamora","Purba"). anaknya("Simamora","Manalu"). anaknya("Simamora","Debataraja"). cucunya("Raja Sumba","Purba"). cucunya("Raja Sumba","Manalu"). cucunya("Raja Sumba","Debataraja"). pomparanna("Debataraja","Raja Sumba"). pomparanna("Rambe",Ompu) if pomparanna("Debataraja",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

Page 6: Programming Logic (PROLOG)

clauses kebangsaan("Batak","Indonesia"). kebangsaan("Melayu","Malaysia"). kebangsaan("Benggaling","India"). letaknya("Medan","Indonesia"). letaknya("Dolok Sanggul","Indonesia"). domisil("Batak","Humbang"). domisil("Mandailing","Natal"). domisil("Batak","Toba"). legal(polisi,"Tiga Lingga"). legal(pengemis,"Jakarta"). 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,"Jakarta"). kebangsaan(Melayu,"Malaysia"). letaknya("Dolok Sanggul","Indonesia") 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,"Jakarta"). legal(tukang_becak,Kota) if legal(pengemis,Kota). …

6

Page 7: Programming Logic (PROLOG)

Sehingga apabila tidak sekelompok dituliskan seperti berikut: … legal(tukang_becak,Kota) if legal(pengemis,Kota). domisil("Mandailing","Natal"). domisil ("Batak","Toba"). legal(polisi,"Tiga Lingga"). … Akan muncul pesan kesalahan: Clauses for the same predicate should be grouped. Analisa-4: Untuk menanyakan apakah Suku Batak berkebangsaan Indonesia : Goal: kebangsaan("Batak","Indonesia") Yes Untuk menanyakan letak Dolok Sanggul dimana : Goal: letaknya("Dolok Sanggul",Dimana) Dimana=Indonesia 1 Solution Untuk menanyakan apakah Suku Melayu berkebangsaan Afrika Selatan : Goal: kebangsaan("Melayu","Afrika Selatan") No Untuk menanyakan selain pekerjaan pengemis yang dilegalkan di Jakarta, apakah tukang becak juga termasuk : Goal: legal(tukang_becak,"Jakarta") 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("Batak",Dimana) Dimana=Humbang Dimana=Toba 2 Solutions Untuk menanyakan kota apa saja yang letaknya di Indonesia berdasar fakta yang disajikan: Goal: letaknya(Apa,"Indonesia") Apa=Medan Apa=Dolok Sanggul 2 Solutions Untuk menanyakan apakah kota Texas letaknya di Indonesia berdasar fakta yang disajikan: Goal: letaknya("Texas"," Indonesia") No

7

Page 8: Programming Logic (PROLOG)

Untuk menanyakan dimana letak kota Texas: Goal: letaknya("Texas",Dimana) No Solution

Karena berdasarkan kamuspengetahuan, tidak disajikan faktaletak 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

Page 9: Programming Logic (PROLOG)

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 N=log(2.5),

0.39794000867

write(N). goal N=sqrt(144), 12 write(N). goal N=ln(12.182493961), 2.5 write(N).

9

Page 10: Programming Logic (PROLOG)

Kasus-5: Hitunglah berapa panjang string dari kalimat berikut: Communication Systems Division, Pangalengge Educations Solusi: goal X = "Communication Systems Division, Pangalengge Educations", 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="Bahasa", Y=" Prolog", 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

Page 11: Programming Logic (PROLOG)

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