PEMROGRAMAN LOGIKA

Posted by TUTORIAL PEMROGRAMAN on Friday, 18 September 2015


PEMROGRAMAN LOGIKA

Prolog dikenal sebagai bahasa deskriptif (descriptive language), yang berarti
dengan diberikan serangkaian fakta-fakta dan aturan-aturan, Prolog, dengan menggunakan cara berpikir deduktif (deductive reasoning), akan dapat menyelesaikan permasalahan suatu program. Ini dikontraskan dengan bahasa komputer tradisional seperti C, BASIC, Pascal yang dikenal sebagai bahasa prosedural (procedural language). Dalam bahasa prosedural, programmer harus memberikan instruksi tahap demi tahap agar komputer dapat dengan pasti bagaimana menyelesaikan permasalahan yang diberikan. Dengan kata lain, programmer harus tahu lebih dahulu bagaimana cara menyelesaikan permasalahan sebelum diinstuksikan ke komputer. Lain jika dibandingkan dengan programmer Prolog. Programmer Prolog hanya membutuhkan deskripsi/gambaran permasalahan, lalu menerjemahkannya ke bahasa Prolog. Selanjutnya sistem Prolog yang menentukan bagaimana mencari solusinya.
Prolog didasarkan pada klausa-klausa Horn (Horn clauses), yang merupakan himpunan bagian dari sistem formal yang dinamakan logika predikat (predicate logic). Logika predikat menyederhanakan cara agar jelas bagaimana berpikir akan dilakukan. Prolog menggunakan variasi sintak logika predikat yang telah disederhanakan dengan demikian sintaknya mudah dimengerti dan sangat mirip dengan bahasa natural.
Prolog mempunyai mesin inferensi (infrence engine) yang merupakan suatu proses berpikir logis mengenai informasi. Mesin inferensi mempunyai pencocok pola (pattern matcher) yang akan mengambil informasi yang telah disimpan (diketahui) dan kemudian mencocokkan jawaban atas pertanyaan. Satu feature penting dari Prolog adalah bahwa, sehubungan mencari jawaban logis atas pertanyaan yang diajukan, ia dapat berhubungan dengan banyak alternatif dan mencari semua kemungkinan dari pada hanya satu solusi.
Logika predikat dibangun agar mudah menerjemahkan ide-ide berbasis logika menjadi bentuk tertulis. Prolog mengambil keunggulan dari sintak ini untuk membangun suatu bahasa pemrograman yang berbasis logika. Dalam logika predikat, pertama kali harus membuang semua kata-kata yang tidak dibutuhkan dari suatu kalimat. Kemudian mentransformasi kalimat tersebut dengan mencari relasi terlebih dahulu, kemudian setelah itu melakukan pengelompokkan object. Object kemudian menjadi argumen dari relasi atas object tersebut. Berikut ini merupakan contoh kalimat bahasa natural ditransformasikan menjadi sintak logika predikat:
Bahasa Natural
Logika Predikat
Cokelat rasanya manis
manis(cokelat)
Diana menyukai kucing
suka(diana,kucing)
Linda suka sate jika sate rasanya enak
suka(linda, sate) if enak(sate)

a.       Kalimat : Fakta dan Aturan
Programmer Prolog mendefinisikan object-object dan relasi-relasi, kemudian mendefinisikan aturan mengenai kapan relasi-relasi ini dikatakan benar (true). Contoh kalimat :
Linda suka sate.
memperlihatkan relasi antara object Wening dan bakso, relasi ini adalah suka. Berikutnya membuat aturan kapan Wening suka bakso adalah kalimat yang benar:
Linda suka sate jika sate rasanya enak.

Fakta : Apa yang diketahui
Dalam Prolog, relasi antara object-object dinamakan predikat. Dalam bahasa natural relasi disimbolisasikan oleh suatu kalimat. Dalam logika predikat yang Prolog gunakan, suatu relasi adalah kesimpulan dalam suatu frase sederhana. Suatu fakta memiliki nama relasi diikuti object atau object-object di dalam tanda kurung. Sebagaimana kalimat, fakta tersebut diakhiri dengan tanda titik (.).
Berikut ini beberapa fakta yang mengekspresikan relasi suka dalam bahasa natural:
Zico suka Liana.
Liana suka Zico.
Zico suka kuda.
Dan dalam sintak Prolog, fakta di atas ditulis:
suka(zico,liana)
suka(liana,zico).
suka(zico,kuda).
Fakta juga bisa mengekspresikan sifat (property) dari suatu object sebagaimana suatu
relasi. Dalam bahasa natural kalimat “Mawar berwarna merah” dan “Yoko adalah
laki-laki” diubah ke dalam sintak Prolog menjadi:
merah(mawar).
lakilaki(yoko).

Aturan: Apa yang dapat disimpulkan dari fakta yang ada
Aturan membuat kita dapat mengambil suatu fakta dari fakta yang lain. Dengan  bahasa lain, aturan adalah suatu konklusi diketahui benar jika satuatau lebih konklusi atau fakta lain ditemukan benar. Berikut ini beberapa aturan yang berhubungan dengan relasi suka:
Liana suka apapun yang Zico suka.
Yoko suka apapun yang berwarna merah.
Dengan aturan di atas, dapat disimpulkan dari beberapa fakta sebelumnya mengenai
sesuatu yang Inung dan Komeng suka:
Liana suka Zico.
Yoko suka Mawar.
Untuk menuliskan aturan tersebut dalam sintak Prolog hanya dibutuhkan sedikit
perubahan seperti ini:
suka(liana, Sesuatu):- suka(zico, Sesuatu).
suka(yoko, Sesuatu):- merah(Sesuatu).
Simbol  :-  diucapkan dengan “jika” dan memisahkan dua bagian dari aturan yaitu head dan body. Aturan di atas dalam makna prosedur, bisa berarti “untuk membuktikan Lianasuka sesuatu, buktikanlah bahwa Zico suka hal yang sama” dan “untuk membuktikan Yoko suka sesuatu, buktikanlah bahwa sesuatu itu berwarna merah”.

b.      Query
Kalau kita sudah memberikan Prolog sekumpulan fakta, selanjutkan dapat diajukan pertanyaan sehubungan dengan fakta-fakta. Ini dikenal dengan nama memberikan query ke sistem Prolog (querying the Prolog system). Pertanyaan yang diajukan ke Prolog sama tipenya seperti dalam bahasa natural. Berdasarkan pada fakta dan aturan yang diberikan sebelumnya, kita dapat  menjawab pertanyaan tentang relasi-relasi ini sebagaimana Prolog juga bisa:
Apakah Zico menyukai Liana?
dalam sintak Prolog:
suka(zico, liana).
dengan memberikan query ini, Prolog akan menjawab:
Yes
karena Prolog mempunyai fakta yang mengatakan hal tersebut. Berikut merupakan pertanyaan yang lebih rumit dalam bahasa natural:
Apa yang Zico suka?
dalam sintak Prolog:
suka(zico, Apa).
Sintak Prolog tidak berubah ketika mengajukan query dan tampak bahwa
sintak query sangat mirip dengan sintak fakta. Yang penting untuk diingat
adalah bahwa object kedua Apa diawali dengan huruf besar sedang object
pertama toni tidak. Ini karena toni sudah fix sebagai konstanta object
sedangkan Apa adalah sebuah variabel. Variabel selalu diawali dengan sebuah
huruf besar atau sebuah garis bawah (underscore, _ ).
Prolog selalu mencari jawaban dari suatu query dengan memulai dari
bagian paling atas (top) dari fakta-fakta dan melihat setiap fakta sampai ke
bagian paling bawah (bottom) dimana tidak ada satupun fakta lagi. Untuk
menjawab query di atas, Prolog akan menampilkan:

karena Prolog tahu bahwa:
suka(zico, liana).
Dan
suka(zico, kuda).
jika kita bertanya pada Prolog:
suka(liana, Apa).
maka Prolog akan menjawab:
karena Prolog tahu Liana suka Zico dan juga Liana suka apapun yang Zico
suka, sedangkan Zico suka Liana dan juga suka kuda.
Prolog mendukung query jamak (compound query). Ada 2 jenis query jamak yaitu:
1. Konjungsi (logika and)
2. Disjungsi (logika or)
Konjungsi dalam sintak Prolog, antara satu query dengan query yang lain dipisahkan dengan tanda koma (,) sedangkan disjungsi dipisahkan dengan tanda semicolon (;). Contohnya untuk query “Siapakah orang yang suka berenang dan sekaligus suka membaca?” ditulis dalam sintak Prolog:suka(Orang, renang), suka(Orang, baca).sedangkan jika query berbunyi “Siapakah orang yang suka berenang atau suka membaca?” dalam Prolog ditulis:
suka(Orang, renang); suka(Orang, baca).

c.       Variabel
Seperti yang telah disebutkan sebelumnya, untuk memberikan nama variabel dalam Visual Prolog harus diawali dengan huruf besar (capital letter) atau garis bawah (underscore), berikutnya dapat berupa huruf (besar atau kecil), angka (“0-9”) dan garis bawah (“_”). Berikut ini merupakan contoh penamaan variabel yang valid:
Ini_adalah_variabel_yang_valid
Tanggal_Lahir_Anak_Saya_1_12_1999
_Ini_juga_valid
sedangkan berikut ini penamaan variabel yang tidak valid:
1desember_1999 %diawali dengan angka
ini_tidak_valid %diawali dengan huruf kecil
$Pengganggu %terdapat karakter yang dilarang (‘$’)
Penamaan variabel selain valid sebaiknya yang mudah dimengerti. Sebagai contoh
daripada memberikan nama variabel X untuk:
suka(X, tennis).
akan lebih dimengerti jika menggunakan nama variabel Orang sehingga menjadi:
suka(Orang, tennis).

Anonnymous Variables (Variabel Anonim)
Variabel anonim digunakan jika hanya dibutuhkan informasi tertentu dari suatu query. Variabel anonim akan mengabaikan nilai-nilai yang tidak dibutuhkan. Dalam Prolog, variabel anonim direpresentasikan dengan tanda garis bawah tunggal (“_”). Contoh jika ada fakta-fakta berikut:
orangtua(liana,imron).
orangtua(zico,rendi).
orangtua(yoko,evi).
jika ingin tahu siapa saja yang berstatus orangtua tanpa melihat siapa anaknya, maka
bisa dilakukan query sebagai berikut
orangtua(Ortu, _).
Maka Prolog akan memberikan jawaban:
Variabel anonim juga bias berlaku sebagai fakta. Jika ditulis:
punya(_, sepatu).
makan(_).
maka dalam bahasa natural dapat dituliskan:
Setiap orang mempunyai sepatu.
Setiap orang makan.

Blog, Updated at: 03:04

0 comments:

Post a Comment

Search This Blog

Popular Posts