A. Dasar-Dasar Prolog
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
“:-“.
Fakta dan Aturan
|
Prolog
|
F : Tino suka
apel
A : Yuli suka
sesuatu yang disukai Tino
|
suka(tino, apel).
suka(yuli,Sesuatu)
:- suka(tino,Sesuatu).
|
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).
|
B. 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)
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