Tentang Bahasa Pemrograman Prolog Jumat, 11.13.2009, 09:33am (GMT)
BAHASA PEMROGRAMAN PROLOG
Sejarah
Prolog
- Prolog
singkatan dari Programming in Logic.
- Dikembangkan
oleh Alain Colmenraurer dan P.Roussel di
Universitas Marseilles
Perancis, tahun1972.
- Prolog populer
di Eropa untuk aplikasi artificial
intelligence, sedangkan di Amerika peneliti mengembangkan aplikasi yang
sama, yaitu LISP.
Perbedaan
Prolog dengan Bahasa Lainnya
- Bahasa
Pemrograman yang Umum (Basic,
Pascal, C, Fortran):
o
diperlukan
algoritma/prosedur untuk memecahkan masalah (procedural languange)
o
program
menjalankan prosedur yang sama berulang-ulang dengan data masukan yang
berbeda-beda.
o
Prosedur
dan pengendalian program ditentukan oleh programmer dan perhitungan dilakukan
sesuai dengan prosedur yang telah dibuat.
- Bahasa
Pemrograman Prolog :
o
Object oriented
languange
atau declarative languange.
o
Tidak
terdapat prosedur, tetapi hanya kumpulan
data-data objek (fakta) yang akan diolah, dan relasi antar objek tersebut
membentuk aturan yang diperlukan untuk mencari suatu jawaban
o
Programmer
menentukan tujuan (goal), dan komputer menentukan bagaimana cara mencapai
tujuan tersebut serta mencari jawabannya.
o
Dilakukan
pembuktian terhadap cocok-tidaknya tujuan dengan data-data yang telah ada dan
relasinya.
o
Prolog
ideal untuk memecahkan masalah yang tidak terstruktur, dan prosedur
pemecahannya tidak diketahui, khususnya untuk memecahkan masalah non numerik.
o
Prolog
bekerja seperti pikiran manusia, proses pemecahan masalah bergerak di dalam
ruang masalah menuju suatu tujuan (jawaban tertentu).
o
Contoh
: Pembuatan program catur dengan Prolog
Aplikasi Prolog :
- Sistem Pakar
(Expert System)
Program
menggunakan teknik pengambilan kesimpulan dari data-data yang didapat, layaknya
seorang ahli.
Contoh dalam
mendiagnosa penyakit
- Pengolahan
Bahasa Alami (Natural Languange Processing)
Program dibuat
agar pemakai dapat berkomunikasi dengan komputer dalam bahasa manusia
sehari-hari, layaknya penterjemah.
- Robotik
Prolog
digunakan untuk mengolah data masukanyang berasal dari sensor dan mengambil
keputusan untuk menentukan gerakan yang harus dilakukan.
- Pengenalan
Pola (Pattern Recognition)
Banyak
digunakan dalam image processing,
dimana komputer dapat membedakan suatu objek dengan objek yang lain.
- Belajar
(Learning)
Program
belajar dari kesalahan yang pernah dilakukan, dari pengamataqn atau dari
hal-hal yang pernah diminta untuk dilakukan.
Fakta dan Relasi
- Prolog terdiri
dari kumpulan data-data objek yang merupakan suatu fakta.
- Fakta
dibedakan 2 macam :
o
Menunjukkan
relasi.
o
Menunjukkan
milik/sifat.
- Penulisannya
diakhiri dengan tanda titik “.”
- 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 menunjukkan bagaimana fakta-fakta berinteraksi satu
dengan yang lain untuk membentuk suatu kesimpulan.
- Sebuah aturan
dinyakatakan 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”.
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).
Predikat
(“Predicate”)
- Predikat
adalah nama simbolik untuk relasi.
- Contoh : ayah(slamet,amin).
Predikat dari
fakta tersebut ditulis :
ayah(simbol,simbol).
dimana ayah adalah nama predikat, sedangkan slamet
dan amin adalah menujukkan argumen.
Sebuah
predikat dapat tidak memiliki atau memiliki argumen dengan jumlah bebas. Jumlah
argumen suatu predikat disebut aritas
(arity).
ayah(nama) …… aritas-nya 1
ayah(nama1,nama2) ….. aritasnya
2
- Syarat-syarat
penulisan nama predikat :
o
Harus
diawali dengan huruf kecil dan dapat diikuti dengan huruf, bilangan atau garis
bawah.
o
Panjang
nama predikat maksimum 250 karakter.
o
Tidak
diperbolehkan menggunakan spasi, tanda minus, tanda bintang dan garis miring.
Variabel
- Varibel adalah
besaran yang nilainya dapat berubah-ubah.
- Tata cara
penulisan variabel :
1. Nama varibel harus
diawali huruf besar atau garis bawah(_)
2. Nama variabel
dapat terdiri dari huruf, bilangan, atau simbol dan merupakan kesatuan dengan
panjang maksimum 250 karakter.
3. Nama variabel
hendaknya mengandung makna yang berkaitan dengan data yang dinyatakannya.
- Contoh : dari silsilah
di atas :
?-
ayah(slamet,Anak).
Anak=budi ;
Anak=badu
No
Dari query di
atas akan dicari siapakah anak dari ayah yang bernama Slamet. Karena mempunyai
relasi yang sama (yaitu ayah), variabel
Anak akan mencari nilai dari konstanta suatu fakta/aturan yang sepadan.
Tanda “;” digunakan bila terdapat kemungkinan
ada lebih dari satu jawaban.
“No” berarti
tidak ada lagi kemungkinan jawaban.
Contoh : dari
silsilah di atas :
?- ayah(slamet,X),ayah(X,Y).
X=amin
Y=budi ;
X=amin
Y=badu ;
X=anang
Y=didi ;
X=anang
Y=didi
No
%% FAKTA */
%%orang tua */
ayah(slamet,amin).
ayah(slamet,anang).
ayah(amin,budi).
ayah(amin,badu).
ayah(anang,didi).
ayah(anang,dadi).
ayah(santoso,bu_amin).
ayah(supardi,bu_anang).
ibu(bu_slamet,amin).
ibu(bu_slamet,anang).
ibu(bu_amin,budi).
ibu(bu_amin,badu).
ibu(bu_anang,didi).
ibu(bu_anang,dadi).
ibu(bu_santoso,bu_amin).
ibu(bu_santoso,bu_anang).
%% ATURAN */
%% Kakek adalah kakek Cucu */
kakek(Kakek,Cucu)
:-
ayah(Ayah,Cucu),
ayah(Kakek,Ayah).
kakek(Kakek,Cucu)
:-
ibu(Ibu,Cucu),
ayah(Kakek,Ibu).
%% Nenek adalah nenek Cucu */
nenek(Nenek,Cucu)
:-
ayah(Ayah,Cucu),
ibu(Nenek,Ayah).
nenek(Nenek,Cucu)
:-
ibu(Ibu,Cucu),
ibu(Nenek,Ibu).
%% Nama1 adalah saudara kandung Nama2
saudara_kandung(Nama,Name)
:-
ayah(Ayah,Nama),
ayah(Ayah,Name),
ibu(Ibu,Nama),
ibu(Ibu,Name),
Nama
\= Name.
%% Sdr1 adalah saudara sepupu Sdr2
saudara_sepupu(Sdr1,Sdr2)
:-
ayah(Ayah1,Sdr1),
ayah(Ayah2,Sdr2),
saudara_kandung(Ayah1,Ayah2).
saudara_sepupu(Sdr1,Sdr2)
:-
ayah(Ayah,Sdr1),
ibu(Ibu,Sdr2),
saudara_kandung(Ayah,Ibu).
saudara_sepupu(Sdr1,Sdr2)
:-
ibu(Ibu,Sdr1),
ayah(Ayah,Sdr2),
saudara_kandung(Ibu,Ayah).
saudara_sepupu(Sdr1,Sdr2)
:-
ibu(Ibu1,Sdr1),
ibu(Ibu2,Sdr2),
saudara_kandung(Ibu1,Ibu2).
%-----------------------------------------------%
% APPLIED LOGIC SYSTEM %
% LAY MEDICINE
(medicine.pl) %
%-----------------------------------------------%
% Predicate :
relieve
%
relieve(DRUG,SYMPTOM).
% SYMPTOM is a manifestation of an underlying
disease process,
% but is distinct from the disease process
itself.
%
relieve(aspirin,headache).
relieve(aspirin,moderate_pain).
relieve(aspirin,moderate_arthritis).
relieve(aspirin_codeine_combination,severe_pain).
relieve(cough_cure_xm,cough).
relieve(pain_gone,severe_pain).
relieve(ko_diarrhea,diarrhea).
relieve(de_congest,cough).
relieve(de_congest,nasal_congestion).
relieve(penicillin,pneumonia).
relieve(bis_cure,diarrhea).
relieve(bis_cure,nausea).
relieve(noasprinol,headache).
relieve(noasprinol,moderate_pain).
relieve(triple_tuss,nasal_congestion).
% Predicate :
aggravates
%
aggravates(DRUG,CONDITION).
% CONDITION is a single disease process, or
collection of disease process,