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).
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,
_).
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.
0 comments:
Post a Comment