DASAR-DASAR PROLOG DAN STRUKTUR PROLOG
PROLOG
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.
1. DASAR-DASAR PROLOG
Fakta dan Relasi
Fakta Adalah suatu
unit yang selalu bernilai benar,fakta ini merupakan kumpulan data-data objek.
Suatu fakta dibedakan dalam 2 jenis, yaitu fakta yang menunjukan relasi dan
fakta yang menunjukan milik/sifat, penulisan suatu fakta selalu di akhir dengan
(.)
Contoh :
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).
|
2. STRUKTUR PROGRAM
PROLOG
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
sumber :
Komentar
Posting Komentar