I. Unifikasi
Unifikasi adalah suatu proses
pemadanan atau pembandingan untuk mencari jawaban seperti nilai suatu variabel.
Melalui unifikasi suatu variabel diberi nilai.
Beberapa hal tentang unifikasi :
a. Unifikasi
terjadi pada sesama argumen yang posisinya sama.
b. Nama dan
aritas predikat harus sama
c. Unifikasi
terjadi bersamaan pada semua argumen.
d. Hasil
unifikasi tidak boleh mengakibatkan variabel mempunyai nilai ganda atau
bertentangan.
e. Domain objek
majemuk dapat berunifikasi dengan variabel biasa seperti s(A) dengan C.
f. Argumen objek
majemuk dapat berunifikasi dengan variabel biasa seperti s(x) dengan s( C ).
g. Bisa terjadi
unifikasi dengan aturan.
contoh :
domains
jenis,pabrik
=symbol
penumpang=integer
predicates
pembuat(pabrik,jenis)
pesawat(jenis,penumpang)
pesawat_kecil(jenis)
clauses
pembuat(boeing,boeing_747).
pembuat(fokker,f28).
pembuat(iptn,n250).
pesawat(boeing_747,500).
pesawat(n250,50).
pesawat_kecil(Jenis):-
pembuat(_,Jenis),
pesawat(Jenis,JmlPen),
JmlPen>100.
Apabila kiat
meniliskan pada goal:
pesawat_kecil(Jenis)
maka Turbo
Prolog akan menjawab :
Jenis = n250
1 solutions
Pada saat Turbo prolog menerima goal
tadi, maka Turbo Prolog melakukan pemanggilan klausa pesawat_kecil yang berupa
aturan. Pencarian jawaban akan berhasil bila tubuh klausa terpenuhi yaitu :
- Pertama, Turbo Prolog akan memanggil
sub klausa penbuat(_,Jenis). Di sini nama pabrik tidak dipermasalahkan
karena menggunakan variabel tak bernama. Oleh karena itu hanya variabel
Jenis yang diinstantiasikan dengan boeing_747. Turbo Prolog kembali dari
memanggil klausa pembuat dengan hasil Jenis = boeing_747.
- Kedua, Turbo Prolog memanggil sub
klausa pesawat(boeing_747,JmlPen), yang kemudian kembali dengan JmlPen =
500.
- Ketiga, Turbo Prolog melakukan
pembandingan 500<100. Hasilnya gagal.
- Keempat, kegagalan ini menyebabkan
Turbo Prolog mencari jawaban yang lain sehingga diperoleh Jenis = n250 dan
JmlPen =50. Maka Turbo Prolog akan menjawab seperti di atas.
Untuk
selanjutnya pahami contoh program berikut ini :
domains
name = symbol
gpa =
real
predicates
honor_student(name)
student(name, gpa)
probation(name)
clauses
honor_student(Name):-
student(Name, GPA),
GPA>=3.5,
not(probation(Name)).
student("Betty Blue", 3.5).
student("David Smith", 2.0).
student("John Johnson", 3.7).
probation("Betty Blue").
probation("David Smith").
Ketikkan pada
bagian goal : honor_student(Name)
II.
Lacak Balik.
Dalam menyelesaikan permasalahan,
Turbo Prolog akan mencari semua kemungkinan jawaban. Apabila menemui kegagalan,
Turbo Prolog akan melacak balik.(analog dengan pencarian suatu alamat).
Dalam pelacakannya, Turbo Prolog menggunakan
metode pencarian terdalam (depth-first search).
Perhatikan contoh berikut ini :
domains
orang,makanan,rasa = symbol
predicates
suka(orang,makanan)
berasa(makanan,rasa)
makanan(makanan)
clauses
suka(didit,X):-
makanan(X),berasa(X,keju).
berasa(roti,tawar).
berasa(pia,coklat).
berasa(pia,susu).
berasa(pia,keju).
makanan(roti).
makanan(kripik).
makanan(pia).
goal
suka(didit,Apa),
write("
Didit suka makan ",Apa).
Pada saat program dijalankan, Turbo
Prolog akan mencari klausa suka dari atas. Dalam hal ini, program akan
memanggil klausa suka dan didapati aturan :
suka(didit,X)
:- makanan(X),berasa(X,keju).
Pada saat itu terjadi unifikasi
antara variabel Apa dengan X yang keduanya masih bebas. Aturan di atas terdiri
dari dua sub-goal :makanan dan berasa, keduanya harus terpenuhi. Maka Prolog
mulai memanggil sub-goal paling atas hingga paling bawah. Pertama, prolog
melakukan unifikasi sub goal makanan(X) dengan kumpulan klausa makanan yang
teratas yakni :makanan(roti). Unifikasi berhasil menyebabkan X terikat dengan
roti. Di sini Prolog mencatat titik lacak balik untuk klausa makanan, karena
ada klausa makanan lain, yaitu makanan(kripik). Prolog kembali dengan
berhasil(X=roti), sehingga Prolog melanjutkan ke subgoal berikutnya :berasa(X,keju),
yang diartikan berasa(roti,keju).
Di sini Prolog mengalami kegagalan
karena tidak menemukan fakta berasa(roti,keju). Kemudian Prolog memeriksa
catatan titik balik dan ada pada makanan(kripik), sehingga terjadi unifikasi
antara variabel X dengan kripik. Pada saat ini Prolog juga mencatat titik lacak
balik di makanan(pia).
Kemudian Prolog mencari fakta
berasa(kripik,keju) yang juga mengalami kegagalan. Sehingga Prolog memulai
pelacakan kembali dari titik balik terakhir yaitu pada makanan(pia). Yang kemudian
Prolog melanjutkan ke subgoal berasa(pia,keju) dan berhasil karena ada fakta
tersebut.
Tidak ada komentar:
Posting Komentar