KOM204 : BAHASA PEMROGRAMAN Pemrograman Logika Pertemuan 5 Learning Outcomes Mahasiswa dapat memahami prinsip dasar pemrograman logika, horn clause, logika predikat Mahasiswa dapat menulis program sederhana menggunakan Prolog Mahasiswa dapat merumuskan fakta, aturan, dan query dari suatu persoalan Outline Materi Pustaka acuan: Tucker & Noonan Benjamin J. Keller Outline Materi: Pemrograman logika Horn clause, logika predikat, dan bahasa deklaratif Fakta dan aturan Pemrograman logika menggunakan GNU Prolog Latihan Logic Programming Pemrograman deklaratif, mendeklarasikan tujuan komputasi, bukan menyusun algoritme secara detil. Disebut juga rule-based programming. Aplikasinya: Artificial intelligence, misalnya MYCIN Database information retrieval, misalnya SQL Fitur dari pemrograman logika: Nondeterministik, program bisa memperoleh banyak jawaban, tidak hanya satu jawaban Backtracking, lacak balik secara otomatis Horn clauses Program logika menggunakan ekspresi logika matematika untuk jawaban masalah. Dasar pemrograman logika adalah proposisi dan predikat. Salah satu bentuknya adalah Horn clause. Definisi: Horn clause memiliki sebuah head h yang disebut sebagai predikat, dan body sebagai daftar dari predikat p 1, p 2,., p n. Horn clauses Dapat ditulis sebagai h p 1, p 2,., p n Artinya, h adalah benar (true) hanya jika p 1, p 2,., p n secara simultan adalah benar. salju(c) hujan(c), beku(c) Julio Adisantoso 1
Logika Predikat Disebut juga kalkulus predikat. Dinyatakan dalam bentuk fakta dan aturan. lelaki(joko) // fakta menikah(joko, tuti) // fakta y x orang(y) ibu(x,y) // aturan x y [menikah(x,y) lelaki(x)] ~lelaki(y) lelaki, menikah, orang, ibu disebut relasi. Bahasa Deklaratif Prawiro adalah bapak dari Joko, ditulis: bapak(prawiro, joko). A adalah kakek dari Z, dibuat aturan: jika A bapaknya X dan X bapaknya Z atau jika A bapaknya X dan X ibunya Z ditulis sebagai kakek(a,z) :- bapak(a,x), bapak(x,z). kakek(a,z) :- bapak(a,x), ibu(x,z). Operator Relasi HANYA JIKA :- DAN, ATAU ; Fakta Kenyataan atau kebenaran yang diakui Menyatakan: Hubungan dua atau lebih obyek Sifat obyek bapak(prawiro, joko). merah(darah). asin(garam). Aturan Logika yg dirumuskan dalam bentuk relasi sebab-akibat dan hubungan implikasi. kakek(a,z) :- bapak(a,x), bapak(x,z). kakek(a,z) :- bapak(a,x), ibu(x,z). Variabel Argumen suatu predikat, berupa atom, variabel, atau obyek lain. Disebut sebagai TERM. Dua jenis variabel (diawali dengan huruf kapital): Bernama, misal: X, Joko, Orang Tak bernama (place holder): _ Simbol (diawali dengan huruf kecil), misalnya: joko, orang Julio Adisantoso 2
Compiler Prolog GNU Prolog (http://www.gprolog.org/) atau SWI Prolog (http://www.swi-prolog.org/) is a free Prolog compiler Prosedur : Tulis program prolog menggunakan editor yang mudah. Simpan file program sumber dengan nama *.pro, misalnya contoh1.pro Jalankan program Prolog Loading program, misalnya [contoh1] atau menggunakan menu File Consult. Jalankan query GNU dan SWI Prolog contoh1.pro kakek(x,z):- ayah(x,y), ayah(y,z). kakek(x,z):- ayah(x,y), ibu(y,z). ayah(john,bill). ayah(bill,mary). ayah(bill,tom). ayah(tom,chris). ayah(tom,bob). ibu(mary,june). ibu(mary,katie). Load and Query (contoh1.pro) LOAD :?- [contoh1]. QUERY :?- ayah(ayah,chris).?- kakek(x,chris). GNU Prolog Console Contoh2.pl ukuran(beruang, besar). ukuran(gajah, besar). ukuran(kucing, kecil). warna(beruang, coklat). warna(kucing, hitam). warna(gajah, kelabu). gelap(z):-warna(z, hitam). gelap(z):-warna(z, coklat). Julio Adisantoso 3
Load and Query (contoh2.pro) LOAD :?- [contoh2]. QUERY :?- gelap(z), ukuran(z,besar). Latihan #1 Buat program logika untuk menentukan hasil pengurangan bilangan pertama dan kedua. minus(a, B, C) :- C is A-B. Latihan #2 Buat program logika untuk menentukan bilangan terbesar dari dua bilangan Latihan #3 Buat program logika untuk menentukan nilai faktorial dari bilangan bulat n, n 0 maks(a, B, A) :- A >= B. maks(a, B, B) :- A < B. faktorial(0,1). faktorial(n,m) :- N1 is N-1, faktorial(n1,m1), M is N*M1. Latihan #4 Buat program logika untuk menentukan nilai deret fibonacci ke n, n 0 fibonacci(0) = 0 fibonacci(1) = 1 fibonacci(n) = fibonacci(n-1) + fibonacci(n-2) fib(0,0). fib(1,1). fib(n,m) :- N1 is N-1, N2 is N-2, fib(n1,m1), fib(n2,m2), M is M1+M2. Latihan #5 Buat program logika untuk menjumlahkan deret 1+2+3+ + n, n 1 jumlah(1,1). jumlah(n,m) :- N1 is N-1, jumlah(n1, M1), M is N + M1. Julio Adisantoso 4
Latihan #6 Buat program logika untuk menentukan a pangkat b, dimana a dan b bilangan bulat dan a,b 0 pangkat(a, 0, 1). pangkat(a, B, C) :- B1 is B-1, pangkat(a, B1, C1), C is A * C1. Julio Adisantoso 5