praktikum logika informatik

Upload: kristianwisnusaputra

Post on 20-Feb-2018

222 views

Category:

Documents


0 download

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!