• Like
Programming Logic (PROLOG)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

Programming Logic (PROLOG)

  • 2,902 views
Published

This tutorial will introduce and guides user how coding the declarative …

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.

Published in Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • exelent
    Are you sure you want to
    Your message goes here
  • thx bro
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
2,902
On SlideShare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
236
Comments
2
Likes
7

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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