You are on page 1of 9

MODUL 8

SECTION FACTS

A. DASAR TEORI
Section facts terdiri dari fakta-fakta yang mana fakta-fakta tersebut dapat ditambah dan
dihapus secara langsung dari sebuah program pada saat program sedang berjalan (at run time). Kita
dapat mendeklarasikan sebuah predikat pada section facts dan predikat tersebut dapat digunakan
sama halnya seperti kalau dideklarasikan pada section predicates.
Visual Prolog menyediakan beberapa predikat built-in untuk menangani hal yang berkaitan
dengan penggunaan section facts, antara lain:

o assert, asserta dan assertz untuk menambah fakta baru pada section facts.
o retract dan retractall untuk menghapus fakta yang ada.
o consult untuk membaca fakta dari sebuah file dan menyertakan fakta tersebut ke dalam fakta
internal.
o save menyimpan isi fakta internal ke dalam sebuah file.

Deklarasi Section Facts
Kata kunci facts atau bisa juga database menandai permulaan sederetan deklarasi dari
predikat yang ada pada section facts. Kita dapat menambahkan fakta-fakta (bukan rule) pada suatu
section facts dari keyboard pada saat run time dengan menggunakan asserta dan assertz atau
memanggil predikat consult untuk mengambil fakta tambahan dari sebuah file.
Ada 2 syarat dalam menggunakan predikat yang dideklarasikan pada section facts :
1. Penambahan predikat pada section facts hanya berlaku sebagai fakta saja, tidak bisa sebagai
rule.
2. Fakta-fakta yang ada di section facts tidak boleh mempunyai variabel bebas.
Visual Prolog memungkinkan suatu program untuk memiliki lebih dari satu section facts, tapi
untuk membedakannya harus secara eksplisit diberi nama untuk setiap section facts. Jika tidak ada
maka Visual Prolog akan memberi nama standar (default) dbasedom.

Menambah fakta pada saat run time
Pada saat run time, fakta-fakta dapat ditambah ke section facts dengan menggunakan
predikat assert, asserta dan assertz atau me-load sebuah file yang berisikan fakta menggunakan
predikat consult.

Menghapus fakta pada saat run time
Predikat retract mengunifikasi suatu fakta dan menghapus fakta tersebut dari sectio facts.
retract akan menghapus fakta pertama yang cocok dengan argumen <fakta> yang diberikan. Karena
retract merupakan predikat nondeterministik maka selama lacakbalik, retract akan menghapus fakta-
fakta yang cocok dengan argumen <fakta>, kecuali jika fakta yang akan dihapus, predikatnya
dideklarasikan deterministik. Ketika semua fakta yang cocok sudah terhapus, pemangilan retract
berikutnya akan gagal. Predikat retractall akan menghapus semua fakta yang cocok dengan argument

Menyimpan database fakta-fakta pada saat run time
Predikat save berfungsi untuk menyimpan fakta-fakta yang ada pada section facts ke dalam
sebuah file. Jika memanggil save hanya dengan satu argumen (tidak ada nama section facts), maka
akan menyimpan fakta-fakta dari section facts default dbasedom ke file dengan nama yang sesuai
dengan argumen. Jika memanggil save dengan dua argumen (nama file dan nama section facts), maka
akan menyimpan semua fakta yang ada pada section facts yang sesuai ke dalam file dengan nama
yang sesuai pula.

Kata kunci pada section facts
Fakta-fakta pada section facts dapat dideklarasikan dengan beberapa kata kunci opsional
berikut:
nondeterm menentukan bahwa kemungkinan ada sejumlah fakta dari suatu predikat
sepanjang program berjalan (default)
determ menentukan bahwa hanya boleh ada satu fakta dari suatu predikat sepanjang
program berjalan.
global menentukan bahwa setion facts adalah global dalam program.
single menentukan hanya satu fakta dari predikat yang akan selalu ada.
nocopy normalnya pemanggilan fakta akan mengikat variabel ke sebuah string atau ke
sebuah object jamak. String atau object jamak tersebut akan disalin ke
tumpukan dari Visual Prolog Global Stack (GStack). Dengan kata kunci ini
maka tidak ada proses penyalinan terserbut.

B. PEMBAHASAN
Di bawah ini adalah pembahasan dari Modul 8 yang telah dipraktekkan dengan menggunakan
VPE pada saat praktikum:

1. Pertama yang dipraktekkan adalah Program dengan kode dibawah ini:

DOMAINS
nama = symbol
umur = integer
jender = lakilaki; perempuan

FACTS
orang(nama, umur, jender)

PREDICATES
nondeterm cetak

CLAUSES
orang(yulianto, 31, lakilaki).
orang(yuliani, 31, perempuan).

cetak:-
orang(Nama, Umur, Jender),
write("Nama : " ,Nama),nl,
write("Umur : " ,Umur),nl,
write("Jender : " ,Jender),nl,nl,
fail.
cetak.

GOAL
save("data_org.txt"),
cetak.

Penjelasan Pada CLAUSES
orang(yulianto, 31, lakilaki).
orang(yuliani, 31, perempuan).
adalah mendeskripsikan klausa orang, yaitu (Nama Yulianto, Umur 31, Jender Laki-Laki) dan
(Nama Yuliani, Umur 31, Jender Perempuan)

cetak:-
orang(Nama, Umur, Jender),
write("Nama : " ,Nama),nl,
write("Umur : " ,Umur),nl,
write("Jender : " ,Jender),nl,nl,
fail.
adalah pertama mengambil nilai data dari orang yang sebelumnya dideskripsikan, kemudian
menulis data-data tersebut.
cetak.
adalah mencetak hasil data yang sudah ditulis sebelumnya.

Penjelasan pada GOAL
save("data_org.txt"),
cetak.
Yaitu pertama menjalankan program dan menyimpan hasil keluaran pada sebuah file
bernama data_org.txt, dan mencetak pada layar.

2. Kemudian menguji goal dari program diatas tersebut
Hasil Goal:


*) Hasil GOAL diatas diperoleh dari
yaitu program menjalankan program dan menyimpan hasil keluaran pada sebuah file bernama
data_org.txt, kemudian mencetak data-data tersenut pada layar.
3. Setelah goal diuji, maka akan terbentuk file data_org.txt.
maka data_org.txt akan tersimpan pada folder eksekusi, yaitu c:\windows\temp\

Seperti yang terlihat pada explorer dibawah

4. Selanjutnya adalah menambahkan data pada fakta, sebagai berikut:
DOMAINS
nama = symbol
umur = integer
jender = lakilaki; perempuan

FACTS
orang(nama, umur, jender)

PREDICATES
nondeterm cetak

CLAUSES
orang(yulianto, 31, lakilaki).
orang(yuliani, 31, perempuan).
orang(gilang, 20, lakilaki).
orang(ranti, 19, perempuan).
orang(bayu, 10, lakilaki).
orang(wening, 9, perempuan).

cetak:-
orang(Nama, Umur, Jender),
write("Nama : " ,Nama),nl,
write("Umur : " ,Umur),nl,
write("Jender : " ,Jender),nl,nl,
fail.
cetak.
GOAL
save("data_org.txt"),
cetak.

Maka Hasil Goal, menjadi:



karena pada clausa data ditambahkan dengan beberapa data lagi, jadi jika sebelumnya hanya 2
orang setelah ditambahkan data 4 orang akan menjadi 6 orang seperti yang terlihat pada gambar
di atas.

maka data_org.txt akan tersimpan pada folder eksekusi, yaitu c:\windows\temp\ dan berubah
menjadi seperti dibawah ini :


5. Kemudian mengganti goal dari program tersebut dengan:
consult("data_org.txt"),
cetak.

DOMAINS
nama = symbol
umur = integer
jender = lakilaki; perempuan

FACTS
orang(nama, umur, jender)
PREDICATES
nondeterm cetak

CLAUSES
orang(yulianto, 31, lakilaki).
orang(yuliani, 31, perempuan).
orang(gilang, 20, lakilaki).
orang(ranti, 19, perempuan).
orang(bayu, 10, lakilaki).
orang(wening, 9, perempuan).

cetak:-
orang(Nama, Umur, Jender),
write("Nama : " ,Nama),nl,
write("Umur : " ,Umur),nl,
write("Jender : " ,Jender),nl,nl,
fail.
cetak.

GOAL
consult("data_org.txt"),
cetak.

Maka Hasil Goal, menjadi:




pada goal dari save diganti dengan consult, karena consult adalah pengulangan maka output
akan berulang 2 kali dari data sebenarnya.




C. PERTANYAN/TUGAS

Buat program seperti pada bagian pertanyaan/tugas pada modul VII, namun semua fakta (yang
ada pada section clauses) tidak berada pada badan program namun berada pada file akakom.txt.
Dan uji goal-goal seperti yang juga diperintahkan pada modul VII.

SOURCE PROGRAM
DOMAINS
nama,mk,mhs=string
nilai=string

FACTS
kuliah(mk,mhs,nilai)

PREDICATES
nondeterm supardi(mk,nilai)
nondeterm tidak_lulus(mhs,mk)

CLAUSES
supardi(Mk,Nilai):-
kuliah(Mk,"Supardi",Nilai).
tidak_lulus(Mhs,Mk):-
kuliah(Mk,Mhs,"D").
tidak_lulus(Mhs,Mk):-
kuliah(Mk,Mhs,"E").

GOAL
assert("akakom.txt"),
%supardi(Mk,Nilai).
%kuliah(_,"Suripah",_).
%tidak_lulus(Mhs,Mk).


HASIL OUTPUT







Data pada file akakom.txt adalah :
kuliah("Intelejensi Buatan","Supardi","A").
kuliah("Intelejensi Buatan","Suradi","B").
kuliah("Intelejensi Buatan","Suyatmi","C").
kuliah("Intelejensi Buatan","Suparni","D").
kuliah("Intelejensi Buatan","Sujiman","C").
kuliah("PDE","Suharto","B").
kuliah("PDE","Sudirman","C").
kuliah("PDE","Supardi","C").
kuliah("PDE","Suyatmi","B").
kuliah("PDE","Sutini","D").
kuliah("Sistem Operasi","Suharto","B").
kuliah("Sistem Operasi","Sutini","A").
kuliah("Sistem Operasi","Supardi","A").
kuliah("Sistem Operasi","Suparni","B").
kuliah("Sistem Operasi","Suripah","C").

D. KESIMPULAN

Pada modul 8 / modul terakhir ini kita mempelajari tentang Section Facts dan dari penjelasan di
atas dapat disimpulkan bahwa Section facts terdiri dari fakta-fakta yang mana fakta-fakta tersebut
dapat ditambah dan dihapus secara langsung dari sebuah program pada saat program sedang
berjalan (at run time).

E. LISTING
(terlampir)

You might also like