1. Pendahuluan
Prolog merupakan bahasadeklaratif. Artinya jika kita memberi fakta
dan aturan, Prolog akan menyelesaikan problem secara deduktif, atau dari banyak
fakta dan aturan kemudian diturunkan kesimpulan sebagai jawaban. Hal ini
berbeda dengan bahasa prosedural seperti Pascal atau C. Dalam bahasa
prosedural, pemrogram harus memberi perintah untuk memecahkan masalah langkah
demi langkah.
2. Dasar Program
Prolog
a. Fakta
Fakta adalah suatu kenyataan atau
kebenaran yang diketahui. Fakta menyatakan hubungan (relasi) antara dua objek
(benda) atau lebih. Fakta dapat pula menunjukkan sifat suatu objek.
Misalkan hubungan
keluarga ‘orang tua ‘, dapat dituliskan dengan suatu relasi orangtua(X,Y).
contoh : orangtua(adi,ali)
orangtua(ani,ali)
Orangtua disebut
sebagai relasi atau juga predikat, sedangkan yang berada dalam tanda kurung
disebut argumen.
Contoh fakta yang menunjukkan sifat adalah :
gula berasa manis
dapat ditulis
sebagai
manis(gula).
b. Aturan
Untuk membuat suatu aturan, kita
hanya perlu suatu rumusan logika. Misalkan fakta yang memperlihatkan relasi
orang tua, maka jika kita ingin menyatakan relasi tentang anak atau kakek, kita
harus merumuskan apa hubungan antara orangtue dan anak juga orangtua dan kakek.
Dalam relasi orang tua maka aturan
relasi untuk anak adalah :
anak(Y,X) if orangtua(X,Y).
Sedangkan aturan untuk relasi kakek
adalah :
kakek(X,Z) if laki_laki(X) and
orangtua(X,Y) and orangtua(Y,Z).
Dalam Prolog if ,and, or ditulis
masing-masing dengan tanda “ :-“, “,”, “ ;”.
Sehingga aturan
di atas dapat ditulis sebagai berikut :
kakek(X,Z):-laki_laki(X),
orangtua(X,Y), orangtua(Y,Z).
anak(Y,X):-orangtua(X,Y).
3. Struktur
Program Turbo Prolog
Secara umum program Turbo Prolog
terdiri dari Domains, Predicates, Clause dan Goal.
A. Bagian
Domains
Domains dalam Prolog seperti type
dalam Pascal. Di bagian Domains, kita menyatakan jenis suatu variabel atau
argumen. Contoh :
Domains
NamaOrang = symbol
Alamat = string
Umur = integer
Misalkan kita
miliki predikat data(NamaOrang, Alamat, Umur), maka domain dalam predikat ini
adalah milik argumen pada posisi yang ditempati domain dalam predikat tersebut.
Jika kita tidak mempergunakan
domains sendiri, kita hanya boleh menggunakan domain standar, seperti :
data(symbol, string, integer)
Domains standar dalam Turbo Prolog
adalah :
a. char :Karakter tunggal diapit tanda
kutip tunggal ‘a’, ‘b’, ‘\58’.
b. integer :Bilangan bulat dari –32768 sampai
dengan 32767. Integer heksadesimal diawali dengan tanda ($).
c. real : Bilangan real dari 1 x 10-307
sampai 1 x 10308. Jika integer diberikan pada argumen real maka akan langsung
diubah ke real.
d. string : Rentetan karakter tang diapit tanda
kutip ganda seperti “Jalan Sangkuriang”. Panjang maksimum 255 karakter,
sedangkan jika string tersebut dari file, atau terkandung dalam program, bisa
mencapai 64 Kbyte.
e. symbol : Rangkaian huruf, angka dan garis
bawah, asalkan karakter pertama huruf kecil, tidak mengandung spasi/karakter
khusus.
Selain domain standar ada domain
lain yakni : domain file, domain list, domain majemuk, domain yang telah
ditetapkan. Yang akan dijelaskan di bab selanjutnya.
B. Bagian
Predicates
Kita harus mendeklarasikan predikat
yang ada pada bagian Predicates dan mendefinisikannya dalam bagian Clauses.
Jika tidak, Turbo 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.
C. Bagian
Clauses
Sekumpulan klausa dari predikat yang
sama harus disatukan (dikelompokkan) dalam bagian Clauses dan disebut prosedur.
Bila melakukan pemanggilan klausa atau matching, turbo Prolog melacaknya dari
atas ke bawah.
Misalkan
Clauses
menu(1):- data(NamaOrang, Alamat,
Umur), Umur > 50.
D. Bagian 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
3 solutions
E. Bagian Lain
selain bagian utama di atas, pada
Prolog terdapat bagian lain yaitu :
- bagian Database
- bagian Constants
- bagian Global
- bagian petunjuk kompiler
a. Bagian
Database
Program Turbo Prolog merupakan
kumpulan fakta dan aturan.Terkadang kita perlu memperbarui data selagi program
berjalan. Dalam hal ini fakta-fakta tersebut merupakan basis data dinamik yang
dapat berubah pada saat program berjalan. Turbo Prolog menyediakan tempat untuk
menyatakan fakta dalam program yang merupakan bagian dari basis data dinamik
(berubah), yakni bagian database. Diuraikan pada bagian selanjutnya.
b. Bagian
Constants
Bagian Constants, disediakan turbo
Prolog untuk mendeklarasikan konstanta.
Contoh :
constants
part_1 = 200
pi = 3.141592653
r = 10.5
c. Bagian Global
Bagian global digunakan untuk
menyatakan domains, database dan predicates global. Jika tidak dinyatakan
demikian, maka turbo Prolog menganggapnya sebagai lokal.
d. Petunjuk
kompiler
Petunjuk kompiler digunakan untuk
memberi petunjuk atau perintah pada kompiler. Misalnya include, untuk
menyertakan file lain. trace untuk mengetahui bagaimana Turbo Prolog mencari
jawaban atau mengerjakan program.
4. Contoh
Program
Selanjutnya perhatikan contoh
program sederhana menggunakan Turbo Prolog.
1. Contoh
Program 1
predicates
likes(symbol,symbol)
clauses
likes(ellen, tennis).
likes(john, football).
likes(tom, baseball).
likes(eric, swimming).
likes(mark, tennis).
likes(bill, Activity) if likes(tom,
Activity).
2. Contoh
Program 2
predicates
male(symbol)
female(symbol)
parent(symbol, symbol)
clauses
male(bill).
male(joe).
female(sue).
female(tammy).
parent(bill, joe).
parent(sue, joe).
parent(joe, tammy).
3. contoh
Program 3
predicates
car(symbol,real,integer,symbol,integer)
truck(symbol,real,integer,symbol,integer)
clauses
car(chrysler, 130000, 3, red, 12000).
car(ford, 90000, 4, gray, 25000).
car(datsun, 8000, 1, red, 30000).
truck(ford, 80000, 6, blue, 8000).
truck(datsun, 50000, 5, orange, 20000).
truck(toyota, 25000, 2, black, 25000).
4. Contoh
Program 4
predicates
can_buy(symbol, symbol)
person(symbol)
car(symbol)
likes(symbol, symbol)
for_sale(symbol)
clauses
can_buy(X, Y) :-
person(X),
car(Y),
likes(X, Y),
for_sale(Y).
person(kelly).
person(judy).
car(lemon).
car(hot_rod).
likes(kelly, hot_rod).
likes(judy, pizza).
for_sale(pizza).
for_sale(lemon).
for_sale(hot_rod).
5. Conto program
5
predicates
type(symbol, symbol)
is_a(symbol, symbol)
lives(symbol, symbol)
can_swim(symbol)
goal
can_swim(What) ,
write("A ", What, " can
swim.").
clauses
type(ungulate, animal).
type(fish, animal).
is_a(zebra, ungulate).
is_a(herring, fish).
is_a(shark, fish).
lives(zebra, on_land).
lives(frog, on_land).
lives(frog, in_water).
lives(shark, in_water).
can_swim(Y) :-
type(X, animal) ,
is_a(Y, X) ,
lives(Y, in_water).
6. Contoh
program 6
predicates
buy_car(symbol, symbol)
car(symbol, symbol, integer)
colors(symbol, symbol)
clauses
buy_car(Model, Color) :-
car(Model, Color, Price),
colors(Color, sexy),!,
Price < 25000.
car(maserati, green, 25000).
car(corvette, black, 24000).
car(corvette, red, 26000).
car(porsche, red, 24000).
colors(red, sexy).
colors(black, mean).
colors(green, preppy).