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 :
adakah sintak keluar program dari prolog?
BalasHapus:-halt.
Hapusadakah sintak exit dari program prolog?
BalasHapustidak ada setau saya
Hapus