Program Prolog : Perkenalan

Assalamualaikum ...

Selamat malam. Di tengah kedinginan yang menyelimuti Bogor setelah hujan deras, kali ini saya akan kembali membahas materi pemrograman. Setelah beberapa post materi pemrograman dalam bahasa C, kini saya akan mengajak Anda berkenalan dengan salah satu bahasa pemrograman yang menggunakan paradigma pemrograman yang berbeda. Ya, jika bahasa C menggunakan paradigma imperatif (algoritmis), bahasa pemrograman yang satu ini menggunakan paradigma logika. Bahasa ini bernama Prolog.

Sumber : http://career.guru99.com/wp-content/uploads/2014/10/prolog_logo_splash.gif

Prolog (programmation en logique, bahasa Prancis dari pemrograman dengan logika) adalah bahasa pemrograman yang dikembangkan oleh Philippe Roussel pada tahun 1972. Prolog adalah salah satu bahasa pemrograman logika pertama dan relatif populer serta banyak digunakan hingga kini, terutama dalam kaitannya dengan kecerdasan buatan (artificial intelligence/AI). Prolog sangat cocok digunakan untuk pekerjaan yang berkaitan dengan basis data (database) karena Prolog menggunakan query untuk mengeksekusi (lebih tepatnya mengonsultasi) program.

Sekarang, kita akan mulai berkenalan dengan Prolog. Pada post ini, saya akan menekankan pembahasan pada sintaks dan semantik Prolog. Anda sangat disarankan sudah mengenal yang disebut sebagai first-order logic. Jika Anda belum mengenalnya, kita akan memulai pembahasan dari hal terkecil dalam Prolog, yaitu tipe data.

Tipe data dalam Prolog disebut term. Hanya ada satu tipe data dalam Prolog, yaitu term tersebut. Ini berbeda dengan C, yang memiliki tipe data integer, floating-point, string, character, dan lain-lain. Term dalam Prolog dapat berupa :
  • Konstanta, yaitu sesuatu yang bernilai tetap. Suatu konstanta dapat berupa atom (misal budi, kue, ruang_tamu), bilangan (misal 54, 10.5), atau string (misal "blogger", "jakarta"). Konstanta harus diawali dengan huruf kecil apabila terdiri dari beberapa karakter alfanumerik.
  • Variabel, yaitu sesuatu yang dapat diberi nilai. Variabel harus diawali dengan huruf kapital jika terdiri dari beberapa karakter alfanumerik, atau diawali underscore, atau hanya underscore (variabel tanpa nama). Variabel harus berupa huruf kapital jika itu berupa sebuah huruf.
  • Term gabungan, yaitu gabungan functor (disebut predicate dalam first-order logic) dan beberapa argumen (banyaknya argumen disebut arity). Contohnya adalah mencintai(joko,ani) yang berarti "joko mencintai ani". Term gabungan tersebut dirujuk sebagai mencintai/2 dengan predikat mencintai dan arity dua (joko dan ani). Suatu term gabungan khusus dalam Prolog adalah list, yaitu kumpulan term terurut yang ditulis dalam kurung siku dan antar-term dipisahkan dengan tanda koma (misal [1,2,3], [ani,budi,joko]).
Karena Prolog menggunakan paradigma logika, program Prolog menggambarkan hubungan yang didefinisikan dalam beberapa klausa. Ada dua macam klausa dalam Prolog, yaitu fakta dan aturan. Aturan didefinisikan dalam bentuk:


Head :- Body.


Bentuk di atas mengikuti bentuk klausa Horn. Bentuk di atas dapat dibaca "head benar jika body benar". Fakta adalah klausa tanpa body. Jadi, saya dapat menulis fakta bahwa Jakarta adalah sebuah kota sebagai:

kota(jakarta).

Jika saya menjalankan query dalam Prolog untuk menanyakan bahwa Jakarta adalah sebuah kota, Prolog akan menjawab "ya" karena fakta di atas selalu bernilai benar.

?- kota(jakarta).
Yes

Aturan adalah klausa dengan body. Contoh aturan adalah:

jumlah(A,B,X) :- X is A+B.

Aturan di atas bermakna "jumlah dari A dan B adalah X hanya jika X =A+B". Jika kita menjalankan query seperti di bawah ini, Prolog akan mengeluarkan output dalam variabel X.

?- jumlah(3,6,X).
X = 9

Query adalah bentuk dari goal, yaitu pernyataan yang di-input oleh pengguna (user) dengan berpatokan pada head. Goal dibuktikan melalui dasar pengetahuan (knowledge base) pada program Prolog yang dikonsultasikan. Dalam proses pembuktian goal, Prolog akan melakukan binding nilai ke dalam suatu variabel apabila kita melibatkan suatu variabel. Contoh binding nilai adalah sebagai berikut:

teman(ani, budi).
teman(joko, bayu).
teman(susi, ika).

?- teman(X, budi).
X = ani

Dalam contoh program di atas, Prolog akan membangun search tree dan mengunifikasi variabel X dengan knowledge base yang tersedia. Jika kedua hal tersebut dapat diunifikasi, Prolog akan melakukan binding nilai ani ke dalam variabel X. Berdasarkan contoh di atas, Prolog sukses melakukan unifikasi sehingga variabel X bernilai ani.

Pembahasan terkait unifikasi dan mekanismenya akan disampaikan pada post berikutnya. Di post berikutnya, saya juga akan membahas list dan implementasi pemrograman Prolog untuk menyelesaikan beberapa masalah. Tentu saja, saya akan menampilkan kode sumber (source code) disertai dengan penjelasannya. Tunggu post berikutnya di blog ALIF AHMAD ZULFIKAR.


Wassalamualaikum...

Dramaga, 29 Maret 2017

Komentar