praktikum logika informatik
TRANSCRIPT
-
7/24/2019 Praktikum Logika Informatik
1/7
Pertemuan III
Pengendalian Pencarian Jawaban
Turbo Prolog menyediakan dua predikat penting, yakni predikat fail yangselalu mengakibatkan kegagalan untuk memaksa lacak balik dan predicat cut (!) yang
selalu berhasil untuk mencegah lacak balik.
Predikat Fail
acak balik akan teradi bila menemui kegagalan. "alam keadaan tertentu kita
perlu memaksa lacak balik untuk memperoleh awaban yang lain. #ntuk 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>=!", not(probation(Name))!
student(#$etty $lue#, !")! student(#%a&id 'mith#, !)! student(#*ohn *ohnson#, !+)! student(#%on *ohnson#,!")! student(#Ana#,!"")! probation(#$etty $lue#)! probation(#%a&id 'mith#)!goalrite(#ang mendapat penghargaan adalah : #),nl,
honor_student(Name), rite(Name),nl,.ail!
Predikat %ut"alam Turbo Prolog, predikat cut digunakan untuk memotong eak lacak
balik. Predikat cut dilambangkan dengan (!).
Perhatikan contoh berikut $
predicatesminuman(symbol,symbol)tes_bai/(symbol)minuman_bai/
clausesminuman(susu,sehat)!
minuman(/opi,menyegar/an)!minuman(ara/,berbahaya)!
-
7/24/2019 Praktikum Logika Informatik
2/7
minuman(sirup,ena/)!minuman_bai/:-
minuman(*enis,'i.at),tes_bai/('i.at),rite(*enis,# minuman #,'i.at),nl,.ail!
tes_bai/(berbahaya):-0,.ail!tes_bai/(_)!
goalminuman_bai/!
Program ini akan meyebutkan beberapa enis 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 teradi lacak balik ke tes&baik yang selalu match dengan semua clauses tes&baik,
sehingga program akan menyebutkan semua enis minuman meskipun berbahaya.
Perulangan dan 'ekursi
"alam 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
acak balik teradi apabila ada awaban lain, dan ini dapat dimanfaatkan untuk
pengeraan berulang terhadap sekelompok fakta.Tetapi kalau faktanya deterministik
maka kita harus menggunakan predikat repeat. Predikat ini bukan predikat standar
sehingga harus kita buat sendiri.
entuk predikat ini adalah $klausa&utama $
repeat,
**repeat.repeat $repeat
+ebagai contoh $predicates mulai repeatclauses mulai:- repeat, rite(#1eti//an passord 0#),nl, readln(2), 2=##! repeat! repeat:-repeat!goalmulai!
'ekursi
-
7/24/2019 Praktikum Logika Informatik
3/7
%ara lain untuk melakukan perulangan adalah dengan rekursi. Prosedur
dikatakan rekursif ika memanggil dirinya sendiri.
+ebagai contoh adalah menghitung faktorial. Faktorial - / 0 / */ () /
. 1ita bagi menadi lebih kecil dengan mengambil faktorial (). Jadi faktorial -
faktorial () / . Faktorial () - faktorial (0) / (), dan seterusnya.
predicates .actorial(integer, real)
clauses .actorial(3, 3) :- 0!
.actorial(2, 4act2) :- = 2-3, .actorial(, 4act), 4act2 = 254act!goal rite(# 4a/torial berapa 6 #),readint(2),
.actorial(2,), rite(# 4a/torial #,2,# adalah #,)!
%ontoh lain adalah perpangkatan bilangan bulat positif.
predicatespang/at(integer,integer,integer)
clausespang/at(%,3,%):-0!pang/at(N,P,7):-
P_3=P-3,pang/at(N,P_3,),7=N5!
-
7/24/2019 Praktikum Logika Informatik
4/7
+truktur "ata
. 2bek data sederhana
2bek data sederhana (tidak terdiri dari beberapa unsur) bisa berupa konstanta,
karakter, bilangan (integer atau real), atau atom (simbol atau string).
0. 2bek data maemuk"engan obek maemuk kita dapat memperlakukan beberapa data seperti obek
tunggal. 3isalnya data alamat Jalan 1enanga 0 4ogya 5506 yang terdiri dari tiga
buah data alan, kota, kode pos akan lebih mudah disusun sebagai $
alamat(7Jalan kenanga 08, 74ogya8,5506).
"ata ini diawali dengan nama yang disebut fungtor (di sini alamat) dan diikuti
argumen.
9rgumen obek maemuk dapat berupa obek maemuk uga. 3isalnya kita
dapat menuliskan data mahasiswa yang mencakup nama dan alamat $
data&mahasiswa(nama(awal,akhir),alamat(alan,kota,kodepos))
"eklarasi "omain 2bek 3aemukentuk umum deklarasi domain maemuk adalah $domains - fungtor(a,a0,*):
fungtor0(a0,a00,*): * fungtorn(an,an0,*)
Perhatikan contoh berikut $
domains articles = boo/(title, author) 8
horse(name) 8 boat 8
ban/boo/(balance) title, author, name = symbol balance = real
predicates ons(name,articles)
clauses ons(9ohn, boo/(#A .riend o. the .amily#, #rin 'ha#))! ons(9ohn, horse(blac/y))! ons(9ohn, boat)! ons(9ohn, ban/boo/(3))!
Jalankan program di atas dan berilah goal owns(ohn,book(&,;))
owns(ohn,;)
owns(ohn,book(;,4)
owns(ohn, horse(;)
3enggunakan goal internal $domains articles = boo/(title, author) 8
horse(name) 8 boat 8ban/boo/(balance)
title, author, name = symbol balance = real
-
7/24/2019 Praktikum Logika Informatik
5/7
predicates ons(name,articles)
clauses ons(9ohn, boo/(#A .riend o. the .amily#, #rin 'ha#))!
ons(9ohn, horse(blac/y))! ons(9ohn, boat)! ons(9ohn, ban/boo/(3))!goalrite(#ang dimili/i oleh *ohn adalah #),ons(9ohn,boo/(2,)),nl,rite(# $u/u dengan 9udul #,2),nl,rite(# Pengarangnya #,)!
ataudomains articles = boo/(title, author) 8
horse(name) 8 boat 8
ban/boo/(balance) title, author, name = symbol balance = real
predicates ons(name,articles)
clauses ons(9ohn, boo/(#A .riend o. the .amily#, #rin 'ha#))! ons(9ohn, horse(blac/y))! ons(9ohn, boat)! ons(9ohn, ban/boo/(3))!goal
rite(#ang dimili/i oleh *ohn adalah #),ons(9ohn,2),nl,rite(2),.ail!
Tugas $
uatlah program yang berisi data mahasiswa yang memuat nama, alamat, dan tanggal
lahir.
"imana nama terdiri dari nama awal dan akhir, alamat terdiri dari alan, 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) ;5(4irst,
-
7/24/2019 Praktikum Logika Informatik
6/7
get_months_birthdays :- ma/eindo(3, +, +, # his onth?s $irthday
-
7/24/2019 Praktikum Logika Informatik
7/7
get_months_birthdays!