Turbo Prolog menyediakan dua
predikat penting, yakni predikat fail yang selalu mengakibatkan kegagalan untuk
memaksa lacak balik dan predicat cut (!) yang selalu berhasil untuk mencegah
lacak balik.
Predikat Fail
Lacak balik akan terjadi bila
menemui kegagalan. Dalam keadaan tertentu kita perlu memaksa lacak balik untuk
memperoleh jawaban yang lain. Untuk itu disediakan predikat fail yang selalu
gagal dan memaksa lacak balik.
contoh :
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).
student("Don Johnson",3.5).
student("Ana",3.55).
probation("Betty Blue").
probation("David Smith").
goal
write("Yang mendapat penghargaan adalah : "),nl,
honor_student(Name), write(Name),nl,fail.
Predikat Cut
Dalam Turbo Prolog, predikat cut
digunakan untuk memotong jejak lacak balik. Predikat cut dilambangkan dengan
(!).
Perhatikan
contoh berikut :
predicates
minuman(symbol,symbol)
tes_baik(symbol)
minuman_baik
clauses
minuman(susu,sehat).
minuman(kopi,menyegarkan).
minuman(arak,berbahaya).
minuman(sirup,enak).
minuman_baik:-
minuman(Jenis,Sifat),
tes_baik(Sifat),
write(Jenis," minuman
",Sifat),nl,fail.
tes_baik(berbahaya):-!,fail.
tes_baik(_).
goal
minuman_baik.
Program ini akan
meyebutkan beberapa jenis minuman, kecuali yang berbahaya. Tugas untuk
menyaring dilakukan pada klusa tes_baik. Jika berbahaya maka akan berpadanan
dengan tes_baik(berbahaya), yang memberi status gagal. Jika tanpa cut, akan
terjadi lacak balik ke tes_baik yang selalu match dengan semua clauses
tes_baik, sehingga program akan menyebutkan semua jenis minuman meskipun
berbahaya.
Perulangan dan
Rekursi
Dalam Prolog tidak ada pernyataan
standar untuk perulangan seperti pada bahasa pemrograman lain. Prolog hanya
mengenal lacak balik dan rekursi, yakni prosedur yang memanggil dirinya, untuk
proses berulang.
Predikat repeat
untuk perulangan
Lacak balik terjadi apabila ada
jawaban lain, dan ini dapat dimanfaatkan untuk pengerjaan berulang terhadap sekelompok
fakta.Tetapi kalau faktanya deterministik maka kita harus menggunakan predikat
repeat. Predikat ini bukan predikat standar sehingga harus kita buat sendiri.
Bentuk predikat
ini adalah :
klausa_utama :-
repeat,
…
…
repeat.
repeat :-repeat
Sebagai contoh :
predicates
mulai
repeat
clauses
mulai:-
repeat,
write("Ketikkan password !"),nl,
readln(X),
X="2020".
repeat.
repeat:-repeat.
goal
mulai.
Rekursi
Cara lain untuk melakukan perulangan
adalah dengan rekursi. Prosedur dikatakan rekursif jika memanggil dirinya
sendiri.
Sebagai contoh adalah menghitung
faktorial. Faktorial N = 1 x 2 x …x (N-1) x N. Kita bagi menjadi lebih kecil
dengan mengambil faktorial (N-1). Jadi faktorial N = faktorial (N-1) x N.
Faktorial (N-1) = faktorial (N-2) x (N-1), dan seterusnya.
predicates
factorial(integer, real)
clauses
factorial(1, 1) :- !.
factorial(X, FactX) :-
Y = X-1,
factorial(Y, FactY),
FactX = X*FactY.
goal
write(" Faktorial berapa ?
"),readint(X),
factorial(X,Y),
write(" Faktorial ",X,"
adalah ",Y).
Contoh lain
adalah perpangkatan bilangan bulat positif.
predicates
pangkat(integer,integer,integer)
clauses
pangkat(D,1,D):-!.
pangkat(N,P,H):-
P_1=P-1,
pangkat(N,P_1,Y),
H=N*Y.
Struktur Data
1. Objek data
sederhana
Objek data sederhana (tidak terdiri
dari beberapa unsur) bisa berupa konstanta, karakter, bilangan (integer atau
real), atau atom (simbol atau string).
2. Objek data
majemuk
Dengan objek majemuk kita dapat
memperlakukan beberapa data seperti objek tunggal. Misalnya data alamat Jalan
Kenanga 12 Yogya 55281 yang terdiri dari tiga buah data jalan, kota , kode pos akan lebih mudah disusun
sebagai :
alamat(“Jalan kenanga 12”,
“Yogya”,55281).
Data ini diawali
dengan nama yang disebut fungtor (di sini alamat) dan diikuti argumen.
Argumen objek majemuk dapat berupa
objek majemuk juga. Misalnya kita dapat menuliskan data mahasiswa yang mencakup
nama dan alamat :
data_mahasiswa(nama(awal,akhir),alamat(jalan,kota ,kodepos))
Deklarasi Domain
Objek Majemuk
Bentuk umum deklarasi domain majemuk
adalah :
domains =
fungtor1(a11,a12,…);
fungtor2(a21,a22,…);
…
fungtorn(an1,an2,…)
Perhatikan
contoh berikut :
domains
articles = book(title, author) ;
horse(name) ; boat ;
bankbook(balance)
title, author, name = symbol
balance = real
predicates
owns(name,articles)
clauses
owns(john, book("A friend of the
family", "Irwin Shaw")).
owns(john, horse(blacky)).
owns(john, boat).
owns(john, bankbook(1000)).
Jalankan program
di atas dan berilah goal
- owns(john,book(_,X))
- owns(john,X)
- owns(john,book(X,Y)
- owns(john, horse(X)
Menggunakan goal
internal :
domains
articles = book(title, author) ;
horse(name) ; boat ;
bankbook(balance)
title, author, name = symbol
balance = real
predicates
owns(name,articles)
clauses
owns(john, book("A friend of the
family", "Irwin Shaw")).
owns(john, horse(blacky)).
owns(john, boat).
owns(john, bankbook(1000)).
goal
write("Yang
dimiliki oleh John adalah "),
owns(john,book(X,Y)),nl,
write("
Buku dengan judul ",X),nl,
write("
Pengarangnya ",Y).
atau
domains
articles = book(title, author) ;
horse(name) ; boat ;
bankbook(balance)
title, author, name = symbol
balance = real
predicates
owns(name,articles)
clauses
owns(john, book("A friend of the
family", "Irwin Shaw")).
owns(john, horse(blacky)).
owns(john, boat).
owns(john, bankbook(1000)).
goal
write("Yang
dimiliki oleh John adalah "),
owns(john,X),nl,
write(X),fail.
Tugas :
Buatlah program
yang berisi data mahasiswa yang memuat nama, alamat, dan tanggal lahir.
Dimana nama
terdiri dari nama awal dan akhir, alamat terdiri dari jalan, kota , nomor telepon dan tanggal lahir terdiri
dari tanggal, bulan dan tahun.
program bisa
menampilkan nama orang yang ulang tahun di bulan ini.
domains
name = person(symbol, symbol) /* (First, Last)
*/
birthday = b_date(symbol, integer,
integer) /* (Month, Day, Year)
*/
ph_num = symbol
/* Phone_number */
predicates
phone_list(name, symbol, birthday)
get_months_birthdays
convert_month(symbol, integer)
check_birthday_month(integer, birthday)
write_person(name)
clauses
get_months_birthdays :-
makewindow(1, 7, 7, " This Month's
Birthday List ", 0, 0, 25, 80),
write(" First name\t Last
Name\n"),
date(_, This_month, _), /* Get month from system
clock */
phone_list(Person, _, Date),
check_birthday_month(This_month, Date),
write_person(Person), fail.
get_months_birthdays :-
write("\n\n Press any key to
continue: "),
readchar(_).
write_person(person(First_name, Last_name))
:-
write(" ", First_name, "\t\t ", Last_name), nl.
check_birthday_month(Mon, b_date(Month, _,
_)) :-
convert_month(Month, Month1),
Mon = Month1.
phone_list(person(ed, willis),
"767-8463", b_date(jan,
3, 1955 )).
phone_list(person(benjamin, thomas),
"438-8400", b_date(feb,
5, 1985 )).
phone_list(person(ray, william),
"555-5653", b_date(mar, 3, 1935)).
phone_list(person(thomas, alfred),
"767-2223", b_date(apr, 29, 1951)).
phone_list(person(chris, grahm),
"555-1212", b_date(may, 12, 1962)).
phone_list(person(dustin, robert),
"438-8400", b_date(jun,
17, 1980 )).
phone_list(person(anna, friend),
"767-8463", b_date(jun,
20, 1986 )).
phone_list(person(brandy, rae),
"555-5653", b_date(jul,
16, 1981 )).
phone_list(person(naomi, friend),
"767-2223", b_date(aug,
10, 1981 )).
phone_list(person(christina, lynn), "438-8400",
b_date(sep, 25, 1981 )).
phone_list(person(kathy, ann),
"438-8400", b_date(oct,
20, 1952 )).
phone_list(person(elizabeth, ann),
"555-1212", b_date(nov,
9, 1984 )).
phone_list(person(aaron, friend),
"767-2223", b_date(nov,
15, 1987 )).
phone_list(person(jennifer, caitlin),
"438-8400", b_date(dec, 31, 1981)).
convert_month(jan, 1).
convert_month(feb, 2).
convert_month(mar, 3).
convert_month(apr, 4).
convert_month(may, 5).
convert_month(jun, 6).
convert_month(jul, 7).
convert_month(aug, 8).
convert_month(sep, 9).
convert_month(oct, 10).
convert_month(nov, 11).
convert_month(dec, 12).
Goal
get_months_birthdays.
Download Disini
Pengendalian Pencarian Jawaban (Contoh Program Prolog) Logika Informatika >>>>> Download Now
ReplyDelete>>>>> Download Full
Pengendalian Pencarian Jawaban (Contoh Program Prolog) Logika Informatika >>>>> Download LINK
>>>>> Download Now
Pengendalian Pencarian Jawaban (Contoh Program Prolog) Logika Informatika >>>>> Download Full
>>>>> Download LINK