13.07.2015 Views

PROLOG SEARCH TREE Prolog Search Tree Search Tree PST ...

PROLOG SEARCH TREE Prolog Search Tree Search Tree PST ...

PROLOG SEARCH TREE Prolog Search Tree Search Tree PST ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

1/4/2010<strong>Prolog</strong> <strong>Search</strong> <strong>Tree</strong><strong>PROLOG</strong> <strong>SEARCH</strong> <strong>TREE</strong>Bahasa PemrogramanKuliah #77 Januari 2010• <strong>Tree</strong> yang tersusun pada saat aturanditerapkan berdasarkan pertanyaan (query).• Contoh (relasi faktorial):faktorial(0,1).faktorial (N,M) :-N1 is N-1,faktorial (N1,M1),M is N*M1.?- faktorial(3,X).Julio Adisantoso, ILKOM‐IPB<strong>PST</strong>faktorial(0, 1)Xfaktorial(0, 1)Xfaktorial(0, 1)faktorial(3, X)X 6_2 2, _1 6faktorial(3,_1) :- N1 is 2, faktorial(2,_2),_1 is 3*_2._3 1, _2 2Xfaktorial(0, 1)faktorial(2,_2) :- N1 is 1, faktorial(1,_3),_2 is 2*_3._4 1, _3 1faktorial(1,_3) :- N1 is 0, faktorial(0,_4),_3 is 1*_4.√Unifikasi• Variabel _4, _3, _2, _1 disebut place holder.• Proses mengganti variabel dengan nilai (misalnya _4 1),dan mencari relasi yang sesuai disebut unifikasi.• Unifikasi:– instance suatu term T yang diperoleh dengan menggantikan sub‐termdari variabel‐variabel T.– proses pemadanan atau pembandingan untuk mencari jawabansepertinilaisuatuvariabel.• Lacak Balik (Back Track):– Penggunaan metode lain karena query yang gagal.– Diakibatkan oleh unifikasi yang tidak sesuai.Julio Adisantoso, ILKOM‐IPBBack Track• Perhatikan relasi berikut:maks(A, B, A) :- A >= B.maks(A, B, B) :- A < B.• <strong>PST</strong> untuk query maks(10, 5, X) adalah√maks(10, 5, X)maks(10, 5, _1) :- 10 >= 5 maks(10, 5, _1) :- 5 < 10_1 10X 10XPERLUMEKANISMECUTCUT• Memotong jejak query untuk melakukan back‐track.• Dilambangkan dengan tanda seru (!).• Bentuk umum:B :‐ C 1 , C 2 , ..., C j‐1 , !, C j , C j+1 , ..., C n .jawaban yang memenuhi sampai C j‐1 tidak ada back track lagi.• Ada dua jenis CUT:– Green Cut, hanya untuk efisiensi, tidakmempengaruhi logika.– Red Cut, mempengaruhi logika jika tanda Cutdihilangkan.1


1/4/2010Relasi Maksimum• Tanpa CUT:maks(A, B, A) :- A >= B.maks(A, B, B) :- A < B.• Dengan CUT:maks(A, B, A) :- A >= B, !.maks(_, B, B).Relasi Faktorial• Tanpa CUT:faktorial(0,1).faktorial(N,M) :-N1 is N-1,faktorial(N1,M1),M is N*M1.• Dengan CUT:faktorial(0,1) :- !.faktorial(N,M) :-N1 is N-1,faktorial(N1,M1),M is N*M1.Latihan 1Diketahui program fungsional berikut:(define (misteri a b x)(if (empty? x) x(if (= b (first x))(cons a (misteri a b (rest x)))(cons (first x) (misteri a b (rest x))))))Apa outputnya jika dijalankan:(misteri 2 4 (list 2 4 4))Terjemahkan program tersebut ke dalam GNU‐<strong>Prolog</strong>.Latihan 2Buatlah program untuk menentukan apakahbilangan bulat pertama dan kedua, jika dijumlahkanakan habis dibagi oleh bilangan ketiga.Contoh Scheme:> (habis 3 17 10)#tContoh GNU‐<strong>Prolog</strong>:?- habis(3, 17, 10).YesLatihan 3Buat program fungsional dan GNU‐<strong>Prolog</strong> untukmenentukan digit terakhir dari suatu bilangan bulat.Contoh Scheme:> (digit 236)6Contoh GNU‐<strong>Prolog</strong>:?- digit(236, X)X=6Latihan 4Buat program fungsional dan GNU‐<strong>Prolog</strong> untukmenentukan digit pertama dari suatu bilanganbulat.Contoh Scheme:> (digit 236)2Contoh GNU‐<strong>Prolog</strong>:?- digit(236, X)X=22


1/4/2010Latihan 5Membuat sebuah list sederhana yang berisi elemena sebanyak n. Jika n=0, maka list yang dihasilkanadalah list kosong.Contoh Scheme:> (ganda 5 8)(8 8 8 8 8)Contoh GNU‐<strong>Prolog</strong>:?- ganda(5, 8, X).X=[8, 8, 8, 8, 8]Latihan 6Menggabungkan dua buah list yang masing‐masingsudah terurut menjadi sebuah list terurut.Contoh Scheme:> (merge (list 3 5 9) (list 1 7))(1 3 5 7 9)Contoh GNU‐<strong>Prolog</strong>:?- merge([3, 5, 9], [1, 7], X).X=[1, 3, 5, 7, 9]Latihan 7Mengambil beberapa elemen dari sebuah list xdimulai pada posisi ke‐a sebanyak n elemen.Contoh Scheme:> (ambil (list 3 5 7 2 6 5 8) 34)(7 2 6 5)Contoh GNU‐<strong>Prolog</strong>:?- ambil([3,5,7,2,6,5,8], 3, 4,X).X=[7,2,6,5]Latihan 8Menghitung a dipangkatkan dengan b, dimanaa, b bilangan bulat positif >0.Contoh Scheme:> (pangkat 2 3)8Contoh GNU‐<strong>Prolog</strong>:?- pangkat(2, 3, X).X=83

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!