Bahasa Pemrograman untuk Aplikasi Inteligensi Buatan : PROLOG
11.1 Dasar-dasar Prolog :Fakta & Relasi, Aturan dan pertanyaan
Prolog adalah bahasa pemograman logika,di sebut juga sebagai
bahasa non-procedural. Bahasa pemrograman Prolog di ambil dari bahasa prancis
yaitu programmation en logiquie (pemrograman logika).bahasa ini di buat oleh
Alain Colmerauer dan Robert Kowalski sekitar tahun 1972 dalam upaya untuk
menciptakan suatu bahasa pemrograman yang pernyataan logika alih-alih rangkaian
perintah untuk di jalankan komputer. Prolog popular di Eropa untuk aplikasi
Artificial intelligence. 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 Kalimat : Fakta dan
Aturan
Fakta
|
Prolog
|
Slamet adalah ayah
Amin
|
ayah (slamet, amin).
|
Anita adalah seorang
wanita
|
wanita (anita).
|
Angga suka renang
dan tenis
|
suka(angga,renang).dan
suka(angga,tenis).
|
Jeruk berwarna
jingga
|
jngga(jeruk).
|
Aturan (“Rules”)
Aturan adalah suatu pernyataan yang menunjukan
bagaimana fakta-fakta berinteraksi satu dengan yang lain untuk membentuk suatu
kesimpulan. Sebuah aturan dinyatakan sebagai suatu kalimat bersyarat. Kata “if” adalah kata
yang dikenal Prolog untuk menyatakan kalimat bersyarat atau disimbolkan dengan
“:-“.
Contoh :
Fakta dan Aturan
|
Prolog
|
F : Tino suka apel
A : Yuli suka
sesuatu yang disukai Tino
|
suka(tino, apel).
suka(yuli,Sesuatu)
:- suka(tino,Sesuatu).
|
Setiap aturan terdiri dari kesimpulan (kepala) dan tubuh. Tubuh
dapat terdiri dari 1 atau lebih pernyataan atau aturan yang lain, disebut subgoal dan
dihubungkan dengan logika “and”. Aturan memiliki sifat then/if
conditional “Kepala(head) benar jika tubuh (body) benar”.
Contoh : Silsilah keluarga :
Fakta dan Aturan
|
Prolog
|
F : Slamet adalah
ayah dari Amin
F : Amin adalah ayah
dari Badu
F : Slamet adalah
kakek dari Badu
A :
Slamet adalah benar
kakek Badu jika Slamet adalah benar ayah Amin dan Amin adalah benar ayah
Badu.
|
ayah(slamet,amin).
ayah(amin,badu).
kakek(slamet,badu).
kakek(slamet,amin)
:-
ayah(slamet,amin)
and
ayah(amin,badu).
|
F : Amin adalah
saudara kandung Anang
F : Amin mempunyai
ayah Slamet
F: Anang
mempunyai ayah Slamet.
A :
Amin adalah benar
saudara kandung Anang, jika Amin mempunyai ayah Slamet dan Anang juga
mempunyai ayah Slamet.
|
saudara_kandung(amin,anang).
ayah(slamet,amin).
ayah(slamet,anang).
saudara_kandung(amin,anang)
:-
ayah(slamet,amin)
and
ayah(slamet,anang).
|
Pertanyaan (“Query”)
Setelah memberikan data-data berupa fakta dan
aturan, selanjutnya kita dapat mengajukan pertanyaan berdasarkan fakta dan
aturan yang ada. Penulisannya diawali simbol “?-“ dan diakhiri tanda “.”.
Contoh :
Pertanyaan
|
Prolog dan Jawaban Program
|
Apakah Tini suka
boneka ?
|
?-
suka(tini,boneka).
Yes ……. (jika
faktanya Tini suka boneka)
No……..…(jika tidak
sesuai fakta).
|
Apakah yang disukai
Tini ?
|
?- suka(tini,Apa).
Apa=boneka
|
Siapakah yang suka
boneka ?
|
?-
suka(Siapa,boneka).
Siapa=tini
|
Dari contoh silsilah
keluarga di atas :
Siapakah kakek Budi
?
Siapakah cucu Slamet
?
|
?-
kakek(Siapa,budi).
Siapa=slamet
?-
kakek(slamet,Cucu).
Cucu=budi ;
Cucu=badu
(jika kemungkinan
ada lebih dari satu jawaban gunakan tanda “;” pada akhir setiap jawaban).
|
11.2 Struktur program Prolog : Domain, Predicate, Variable, dan Goal Majemuk
Dalam struktur program prolog terdapat 4 macam di antara nya
adalah Domain,Predicate,Variable, dan goal.
Domain
Domain
berfungsi untuk menyatakan jenis suatu variabel seperti hal nya tipe data dalam
bahasa prosedural (Pascal,C) . beberapa domain standar dalam prolog diantara
nya char,integer,real,string,symbol. Contoh :
namaBunga = symbol
mataKuliah = string
nilai = integer
- Domains char dipakai pada predikat yang
argumennya memiliki nilai berupa karakter tunggal, yaitu
abjad, angka, pungtuasi (?.!,<,...), dan operasi (+,‐,...). Penulisan argumen bertipe char dalam
prolog diapit tanda ’...’. contoh : nilai (dita, ’A’).
- Domains string dipakai pada predikat yang
argumennya memiliki nilai berupa karakter jamak yang dapat berupa kata maupun
suatu tulisan (kumpulan kata‐kata termasuk di
dalamnya pungtuasi dan tanda operasi yang dapat dipisahkan spasi). Penulisan
argumen bertipe string dalam prolog diapit tanda ”...”. contoh:
hobi(rina,”Memasak”).
-Domains integer dipakai pada predikat yang
argumennya memiliki nilai berupa bilangan bulat.
Contoh : nilai(tini,”Kalkulus”,75).
-Domains real dipakai pada predikat yang argumennya
memiliki nilai berupa bilangan pecahan. Penulisan argumen bertipe real dalam
prolog untuk nilai pecahan ditulis di belakang tanda titik (.). contoh:
nilai(ivan, 8.75).
-Domains symbol dipakai pada predikat yang
argumennya memiliki nilai berupa kumpulan karakter yang hanya terdiri dari
huruf atau kata tanpa dipisahkan oleh spasi. Suatu kata dapat
disambungkan dengan kata lain dengan tanda _ (underscore). contoh :
lelaki(toni_setiawan).
Predicate
Dalam
bahasa prolog kita perlu mendeklarasikan predikat yang ada pada bagian
Predicates dan mendefinisikannya dalam bagian Clauses. Jika tidak, Prolog tidak
akan mengenalnya. Namun untuk predikat standar seperti cursor, makewindow,
readln, readchar dsb tidak perlu dideklarasikan.
Misalkan untuk domains seperti di atas dapat dibuat predicates
Predicates
menu(integer)
data(NamaOrang,
Alamat, Umur)
Deklarasi predicates dalam bagian predicates, harus disertai
argumen jika memang berargumen. Nama predikat harus diawali dengan huruf, boleh
besar atau kecil, selebihnya bisa huruf, angka, garis bawah, namun dianjurkan
untuk dimulai dengan huruf kecil. Nama predikat tidak boleh mengandung spasi,
tanda minus, asteris atau garis miring.
Variable
Variabel
merupakan sebuah interpretasi yang digunakan untuk menemukan
nilai dari sebuah klausa. Variabel harus diawali dengan huruf
besar. Contoh :
- suka(andi,X) .
X
= eskrim
- anakperempuan(lila, X).
X
= agus
Variabel yang memiliki beberapa value kamu dapat memunculkan
nilai lain dengan
menekan tombol (;)
Deskripsi Rekrusif dari Sebuah Hubungan
Nah ini yang gak kalah penting, Rekursif ini digunakan untuk
mencari seluruh dari
child dari sebuah tree. Intinya, misalkan terdapat sebuah
keluarga terdapat kakek,
ayah, dan anak. Maka untuk mendapatkan seluruh keturunan dari
kakek, yaitu kakek,
ayah, anak, anaknya anak dan seterusnya kita membutuhkan
rekursif.
Representasinya seperti berkut
turunan(X,Y) :- antiturunan(Y,X).
turunan(X,Y) :- antiturunan(Y,Z), turunan(X,Z).
Goal
Goal dalam turbo
Prolog ada 2 macam yakni :
a. Goal eksternal
b. Goal internal
Goal
eksternal diketikkan langsung pada bagian ‘goal’ : di jendela dialog pada
kompiler terpadu Turbo Prolog. dengan cara ini kita hanya bisa menjalankan
program dari lingkungan kompiler Turbo Prolog. Untuk dapat dijalankan di
lingkungan DOS kita harus menggunakan goal internal yang di simpan pada bagian
Goal. Sebenarnya goal inilah yang dicari dan dipanggil pada saat program
dijalankan. Jika goal tercapai, program berhenti dengan berhasil, tapi jika
sebaliknya, program berhenti dalam keadaan gagal.
Contoh :
Predicates
tulis(string)
Goal
tulis(X),
write(X).
Clauses
tulis(“Bandung”).
tulis(“Yogya”).
tulis(“Jakarta”).
Program ini pertama
akan memanggil goalnya, yang terdiri dari sub goal tulis dan write. Ini
artinya, goal akan memanggil klausa tulis. Di bagian clauses, terdapat tulis
yang berupa fakta. Prolog akan mencarinya dari paling atas, diperoleh
tulis(“Bandung”). Ini berarti sub-goal tulis(X) berhasil dengan X terikat
dengan nilai “Bandung”. Selanjutnya Prolog membuktikan sub-goal kedua yakni
write(X). Ini pasti berhasil dan program berhenti. Jika goal diajukan dari luar
(dari jendela Goal, goal internalnya dibuang), kemudian kita tuliskan :
tulis(X) [enter], akan tertulis pada layar :
X
= Bandung
X
= Yogya
X
= Jakarta
Komentar
Posting Komentar