SECTION FACTS
I. Dasar Teori
Pengertian Facts
Facts pada prolog berupa fakta – fakta yang mana fakta – fakta tersebut
dapat ditambah dan dihapus secara langsung dari sebuah program pada saat
program sedang berjalan. Kita dapat mendeklarasikan sebuah predikat pada
section facts seperti pada section predicates.
Yang perlu dicatat bahwa perbedaan pendeklarasian fakta – fakta yang ada pada
section facts dengan yang ada pada section predicates yaitu :
- Bahwa penambahan predikat pada section facts hanya berlaku sebagai fakta
saja, tidak bisa sebagai rule
- Fakta – fakta yang ada di section facts tidak boleh mempunyai variabel
bebas
Beberapa predikat built in dalam penggunaan section facts antara lain :
• assert , asserta dn assertz : digunakan untuk menambahkan faktu
baru pada section facts
• retract dan retractall : digunakan untuk menghapus fakta yang ada
• consult : digunakan untuk membaca fakta dari sebuah file dan
menyertakan fakta tersebut ke dalam fakta internal
• save : digunakan isi fakta internal ke dalam sebuah file
II. Pembahasan
a. Mendeklarasi section facts
Pada pertemuan modul 8 mahasiswa diperkenalkan dengan apa yang disebut
section facts. Section facts pada prolog itu dikategorikan seperti sebuah
kumpulan dari predikat – predikat ataupun fakta – fakta yang akan digunakan
dalam program. Berbeda pada section predicates, facts hanya menampung fakta-
fakta dan bukan rule. Jadi kita mendeklarasikan sebuah fakta pada section facts,
maka untuk predikat dari fakta tersebut tidak boleh berupa rule yang berisi
syarat tertentu. Tetapi jika fakta terdapat pada section predicates maka tentu saja
Domains
nama, alamat = string
umur = integer
lakilaki = string
Facts
orang(nama, alamat, umur, lakilaki)
Predicates
lakilaki(nama, alamat, umur)
Clauses
lakilaki(Nama, Alamat, Umur):-
orang("Galih","Jl.manggis",19,lakilaki).
Goal
orang(Nama,Alamat,Umur,lakilaki).
Lihat tanda panahnya diatas, bahwa deklarasi fakta pada section facts tidak
diperkenankan menjadi sebuah rule. Sedangkan fakta yang dideklarasikan pada
section predicates dapat dijadikan rule pada program.
Domains
nama, alamat = string
umur = integer
lakilaki = string
Facts
orang(nama, alamat, umur, lakilaki)
Predicates
lakilaki(nama, alamat, umur)
Clauses
lakilaki(Nama, Alamat, Umur):-
orang(Nama, Alamat, Umur, lakilaki).
orang("Galih","Jl.manggis",19,lakilaki).
Goal
asserta(orang("Jelita","mlati",14,lakilaki)),
orang(Nama,Alamat,Umur,lakilaki).
Dengan perintah asserta pada section goal maka akan menambahkan sebuah
solusi berdasarkan fakta yang telah kita tambahkan bersama deklarasi asserta
tersebut. Sehingga jika kita run program maka akan ada hasil seperti berikut :
Dapat kita lihat perbedaannya, jika asserta nama jelita lebih dahulu maka
dengan assert / assertz adalah nama andre terlebih dahulu
Domains
nama = symbol
umur = integer
jender = lakilaki; perempuan
Facts
orang(nama, umur, jender)
Predicates
Cetak
cetak:-
orang(Nama, Umur, Jender),
write("Nama : ", Nama),nl,
write("Umur : ", Umur),nl,
write("Jender : ", Jender),nl,nl,
fail.
cetak.
Goal
save("d:\\data_org.txt"),
cetak.
Dan juga akan terbentuk sebuah file baru bernama data_org.txt di drive D:
dengan isi seperti berikut :
Domains
nama = symbol
umur = integer
jender = lakilaki; perempuan
Facts
orang(nama, umur, jender)
Predicates
cetak
Clauses
orang("ahmadrosit",50,lakilaki).
cetak:-
orang(Nama, Umur, Jender),
write("Nama : ", Nama),nl,
write("Umur : ", Umur),nl,
write("Jender : ", Jender),nl,nl,
fail.
cetak.
Goal
consult("d:\\data_org.txt"),cetak.
IV. Tugas
Buatlah dulu file txt dengan isian seperti dibawah dan simpan dengan nama file
akakom.txt
Domains
list = nama*
nama = symbol
Predicates
ib(list)
pde(list)
so(list)
nilai1(list)
nilai2(list)
nilai3(list)
matkul(symbol,symbol,symbol)
cari(symbol)
Clauses
matkul(ib,pde,so).
nilai1([a,b,c,d,c]).
nilai2([b,c,c,b,d]).
nilai3([b,a,a,b,c]).
Hasil program :
a. Mengecek mata kuliah supardi