BAB IV STRUKTUR PROGRAM PROLOG

dokumen-dokumen yang mirip
BAB IV STRUKTUR PROGRAM PROLOG

BAB III LOGIC PROGRAMMING

Konsep. Bahasa Pemrograman. Evangs Mailoa. Pertemuan 7

Pemrograman Logika 03/09/2014. Julio Adisantoso 1. Learning Outcomes KOM204 : BAHASA PEMROGRAMAN. Outline Materi. Logic Programming.

Tools Pembangun Sistem Pakar

Bahasa Pemrograman :: Pemrograman List

Modul Pratikum Sistem Pakar (Modul 3)

Logic Programming (GNU PROLOG)

ALGORITMA PEMROGRAMAN 1C SINTAKS

Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya.

Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya.

PSEUDOCODE TIPE DATA, VARIABEL, DAN OPERATOR

Pengantar dalam Bahasa Pemrograman Turbo Pascal Tonny Hidayat, S.Kom

Algoritma dan Pemrograman

Modul 1 PENGENALAN PROLOG

Algoritma Pemrograman

MODUL III STRUCTURED QUERY ANGUAGE (SQL)

Algoritma Pemrograman

Pertemuan Ke-2 (Teks Algoritma) Rahmady Liyantanto. S1 Teknik Informatika-Unijoyo

Turbo C adalah tool yang dipakai untuk membuat code program dalam bahasa C ataupun C++. Berikut adalah jendela utama Turbo C

Struktur Data adalah : suatu koleksi atau kelompok data yang dapat dikarakteristikan oleh organisasi serta operasi yang didefinisikan terhadapnya.

Struktur Data. Pertemuan 2

Variabel dan Tipe Data Kusrini 1, Heri Sismoro 2

Paradigma Functional BAHASA PEMROGRAMAN. TIM PENGAJAR PEMROGRAMAN Departemen Ilmu Komputer IPB

Pertemuan Ke-3 (Tipe Data dan Nama) Rahmady Liyantanto. S1 Teknik Informatika-Unijoyo

BAB III ANALISIS DAN PERANCANGAN APLIKASI 3.1 ANALISIS

Modul 1 Mesin Karakter 1

SOAL C++ Created by Yuli Astuti,S.Kom Copyright 2009

2 ATURAN PENULISAN TEKS ALGORITMA

Algoritma Pemrograman

Algoritma Pemrograman

MODUL DUA VARIABEL DAN TIPE VARIABEL

4. Melakukan pengawasan terhadap kinerja proyek merupakan pengertian dari... a. Chronicling b. Perubahan c. Analisa d. Bottlenecks

SINTAKS. Sintaks dari bahasa pemrograman di defenisikan dengan 2 kumpulan aturan, yaitu:

Teori Algoritma. Struktur Algoritma

Chapter 2. Tipe Data dan Variabel

ALGORITMA PEMROGRAMAN 1C PEMROGRAMAN LOGIK

Algoritma Pemrograman

Struktur Data. PDE - Struktur Data 1

MODUL PRAKTIKUM ALGORITMA & BAHASA PEMROGRAMAN I (BASIC) Dosen Pengasuh : Suroto, S.Kom, M.Ak

Dasar Komputer dan Pemrograman. Konsep Tipe Data dan Operator Nama dan Nilai Data

Algoritma Euclidean dan Struktur Data Pohon dalam Bahasa Pemrograman LISP

BAB IX LINKED LIST (SENARAI BERANTAI)

PROSES PENJUALAN BUKU

PERKEMBANGAN PASCAL. Pascal adalah bahasa tingkat tinggi ( high level language) yang orientasinya pada segala tujuan

Pengenalan Pascal. Sejarah Singkat Pascal

Algoritma dan Struktur Data

Brigida Arie Minartiningtyas, M.Kom

Bab 2. Dasar-Dasar Pemrograman C

Lab. Teknik Informatika Struktur Data 1

STACK (Tumpukan) Tumpukan Koin. Tumpukan Kotak

BAB 1 KONSEP DASAR BAHASA C

MATERI 2 JENIS-JENIS DATA SEDERHANA & INPUT/OUTPUT DATA

Pertemuan 10. Tumpukan (Stack) Dipersiapkan oleh : Boldson Herdianto. S., S.Kom., MMSI.

SINTAKS. Sintaks dari bahasa pemrograman di defenisikan dengan 2 kumpulan aturan, yaitu:

BAB II STACK Atau TUMPUKAN

BAB 1 TIPE DATA. Selain itu terdapat operasi MOD (Modulo) adalah sisa dari pembagian Contoh : 27 MOD 4 = 3

BAB 1 TIPE DATA. Struktur Data 1. Sederhana : Array dan Record 2. Majemuk terdiri atas Linier Non Linier

Struktur dan Organisasi Data 2 STRUKTUR DATA

Keterangan : Integer Long : tipe data untuk angka bulat Single, Double : tipe data untuk angka pecahan/desimal Currency : tipe data untuk angka mata

STRUKTUR KENDALI. Memanfaatkan struktur kendali untuk kasus komputasi

Dasar Komputer & Pemrogaman 2A

Struktur Data. Belajar Struktur Data Menggunakan Pascal Pertemuan-1

FUNGSI. setiap elemen di dalam himpunan A mempunyai pasangan tepat satu elemen di himpunan B.

Pengenalan Pascal/DevPascal

BAB III ANALISIS. Mekanisme Penyimpanan dan Pengambilan Sequence

Algoritma Pemrograman

VARIABEL, TIPE DATA DAN EKSPRESI Bab 2

TIPE, NAMA, DAN NILAI

& PEMROGRAMAN. Alex De Kweldju, S.Kom D3 Teknik Komputer Fakultas Teknik Universitas Negeri Papua

SATUAN ACARA PERKULIAHAN MATA KULIAH PEMROGRAMAN PASCAL * (TK) KODE / SKS: KK /2 SKS

Algoritma Pemrograman 2 B

Type Data terdiri dari : - Data Tunggal : Integer, Real, Boolean dan Karakter. - Data Majemuk : String

BAB I PENGENALAN BAHASA C

Teori Algoritma TIPE DATA

Chapter 1 KONSEP DASAR C

Chapter 3.2 : Tipe, Nama dan Nilai

Sistem Pakar Pencarian Silsilah Keluarga Menggunakan Pemrograman Prolog

ilmu bahasa pemrograman ilmu c++ Copyright izie ilmu c++

STMIK AMIKOM YOGYAKARTA. Kusnawi, S.Kom, M.Eng

Aplikasi Rekursif dalam Analisis Sintaks Program

Algoritma Pemrograman

Soal hari Jumat (16/10) Latihan 10 MS

VARIABEL, TIPE DATA, KONSTANTA, OPERATOR DAN EKSPRESI. Pemrograman Dasar Kelas X Semester 2

A[1] A[2] A[3] A[4] A[5] A[6] A[7] A[8] A[9] A[10] Nilai elemen array Index array Inelemen array

Hirarki Comsky. Unrestricted. Context Sensitive Context free Regular

BAB II SINTAKS 2.1. SINTAKS

RINGKASAN PEMROGRAMAN QUICK BASIC

P A S C A L D A S A R

SOAL PASCAL A. 1. Lengkapi Source Code Dibawah ini : {* Program Menghitung dengan Operator Matematika*}

SMA SANTO PAULUS PONTIANAK

Program. Instruksi-instruksi yang diberikan kepada komputer agar dapat melaksanakan tugas-tugas tertentu

JENIS DATA SEDERHANA & INPUT/OUTPUT DATA

ANALISIS DAN PERANCANGAN PERANGKAT LUNAK

Perancangan Perangkat Ajar Visualisasi Eksekusi Flowchart dan Konversinya ke Dalam Algoritma. Ahmad Suryan. Politeknik Telkom.

Pengantar dalam Bahasa Pemrograman Turbo Pascal

PRAKTIKUM 1 MENGENAL BAHASA PASCAL. File, Edit, Search, Run, Compile, Debug, Tools, Option, Windows dan Help.

Dasar Pemrograman Java

Alat bantu (tools) dalam pembuatan parser/ analisis sintaksis. Menggunakan simbol persegi panjang untuk non terminal

Tinjau algoritma dibawah ini

Transkripsi:

BAB IV STRUKTUR PROGRAM PROLOG Dalam buku ini digunakan program Turbo Prolog untuk melengkapi pembahasan pemrograman logika dengan Prolog. Turbo prolog mirip dengan Turbo Pascal, Turbo C, dan sejenisnya. Tampilannya terbagi menjadi empat jendela yaitu editor, dialog, message, dan trace. Jendela editor sebagai tempat untuk menyunting program, sedangkan dialog tempat menuliskan goal dan menampilkan hasil query. Pesan-pesan error, compiler, running, dan lain-lain ditampilkan di dalam jendela message, sedangkan trace sebagai tempat untuk menelusuri jalannya program. Secara umum, suatu program Prolog terdiri dari beberapa kelompok, yaitu domains, predicates,, goal. Masing-masing bagian akan diuraikan pada bagian berikut. DOMAINS Domain dalam Prolog seperti type dalam Pascal, yaitu untuk menyatakan jenis variabel atau argumen, misalnya: domains kota = symbol alamat = string list = symbol* Ada lima domain baku di dalam Prolog, yaitu: 1. char, karakter tunggal yang diapit oleh tanda kutip tunggal: a, b, \13. 2. integer, bilangan bulat antara 32768 hingga 32767. Notasi $ digunakan untuk menunjukkan bilangan heksa. 3. real, bilangan nyata antara 1x10 307 hingga 1 x 10 308. 4. string, deretan karakter yang diapit oleh tanda kutip dobel, misalnya ipb. 5. symbol, rangkaian karakter yang diawali dengan huruf kecil da tanpa tanda apa pun. Disamping itu terdapat domain lainnya yang tidak baku, di antaranya adalah: 1. domain file, yang digunakan untuk memberi nama file secara simbolik seperti contoh berikut: file = <nama file simbolik 1> ; <nama file simbolik 2> ;.. 2. domain list, digunakan untuk menyatakan list (linked list) dimana elemen pertama mempunyai pointer ke elemen kedua dan seterusnya. Deklarasi list ini dapat dituliskan dengan bentuk: <nama list> = <domain>* list_simbol = symbol* 21

3. domain majemuk, untuk menyatakan data majemuk, seperti: alamat( Jl. Pajajaran, Bogor ) Pada contoh ini, alamat adalah nama obyek dan disebut sebagai fungtor, dan bagian yang ditulis dalam tanda kurung disebut argumen. Domain majemuk juga dapat digunakan untuk menyatakan beebrapa kemungkinan nilai yang masing-masing dipisahkan oleh tanda titik koma (;) seperti contoh berikut: Tombol = up; down; left; right; karakter(char) PREDICATES Bagian ini untuk menuliskan setiap relasi predikat yang digunakan dalam program, kecuali predikat baku seperti cursor, makewindow, readln, readchar, dan sejenisnya tidak perlu didefinisikan. Lihat contoh-contoh program contoh pada bagian selanjutnya dari bab ini. CLAUSES Sekumpulan klausa dari predikat yang sama harus dikelompokkan dalam bagian ini. Dalam melakukan pemanggilan klausa, Prolog melacaknya berurutan dari atas ke bawah. Bagian ini merupakan inti dari program Prolog, dimana semua fakta dan aturan diimplementasikan di sini. Berikut disajikan beberapa contoh lengkap program dalam Turbo Prolog 2.0. Contoh 1. Program untuk menyatakan hubungan kakek, ayah, dan ibu. predicates grandfather(symbol,symbol) father(symbol,symbol) mother(symbol,symbol) grandfather(x,z):-father(x,y),father(y,z). grandfather(x,z):-father(x,y),motehr(y,z). father(john,bill). father(bill,mary). father(bill,tom). father(tom,chris). father(tom,bob). mother(mary,june). mother(mary,katie). goal clearwindow, father(bapak,chris), write(bapak), grandfather(kakek,chris), write(kakek). 22

Contoh 2. predicates ukuran(symbol, symbol) warna(symbol,symbol) gelap(symbol) ukuran(beruang, besar). ukuran(gajah, besar). ukuran(kucing, kecil). warna(beruang, coklat). warna(kucing, hitam). warna(gajah, kelabu). gelap(z):-warna(z, hitam). gelap(z):-warna(z,coklat). goal clearwindow, gelap(z), ukuran(z,besar), write(z). Contoh 3. domains list = symbol* predicates append(list, list, list) append([],y,y). append([h X1],Y,[H Z1]):-append(X1,Y,Z1). goal clearwindow, append([a,b],[c,d],z), write(z), append(x,[c,d],[a,b,c,d]), write(x), append([a,b],y,[a,b,c,d]), wrtie(y). UNIFIKASI Unifikasi adalah instance suatu term T yang diperoleh dengan menggantikan sub-term dari variabel-variabel T. Dengan kata lain, unifikasi merupakan proses pemadanan atau pembandingan untuk mencari jawaban seperti nilai suatu variabel. Melalui unifikasi, suatu variabel diberi nilai sehingga akan diperoleh jawaban dari suatu pertanyaan (goal). Jika Prolog mendapat pertanyaan maka Prolog akan mencari padanan goal dari bagian klausa paling atas. Bila sudah diperoleh klausa yang dicari, terjadilan pengikatan variabel bebas (jika ada) sehingga pertanyaan dan klausa menjadi identik, dan pertanyaan tersebut dikatakan menyatu dengan klausa. Perhatikan ilustrasi berikut: 23

goal = f(x,b) = f(a,y). X=a, Y=b f(a,b) adalah instance dari f(a,y),f(x,b), f(x,y) g(a,b) bukan instance dari g(x,x) Unifikasi terjadi secara implisit yaitu pada saat suatu aturan dijalankan seperti terlihat pada contoh berikut: fakta = identity(z,z) goal = identity(f(x,b),f(a,y)) X = a, Y = b LACAK BALIK (BACK-TRACK) Dalam memecahkan persoalan, sering dijumpai proses kegagalan sehingga dilakukan kembali dengan menggunakan jalan atau metode yang lain. Hal yang sama juga dilakukan oleh Prolog dalam menjawab suatu pertanyaan. Permasalahan ini akan ditunjukkan pada bagian berikut dari bab ini. STRUKTUR DATA (LIST) Salah satu bentuk data yang populer dalam pemrograman adalah struktur data list dimana dalam Prolog dituliskan dengan menggunakan tanda kurung [] dan setiap elemen dipisahkan oleh tanda koma(,). Sebagai contoh: [] list kosong [a, b, c] list dengan tiga elemen Setiap list dalam Prolog dapat dituliskan sebagai [H T] dimana H adalah kepala (head) yang menunjukkan elemen pertama dari suatu list dan T adalah ekor (tail), yaitu list tanpa elemen pertama. Nilai H dan T ini dapat dibandingkan dengan operasi car dan cdr pada pemrograman fungsional. Oleh karena itu, list [a, b, c] dapat dituliskan sebagai: [a,b,c []] [a,b [c]] [a [b,c]] Contoh: goal = [H T ] = [a,b,c].. H = a, T = [b,c] 24

Beriktu disajikan dua contoh pemrograman Prolog yang berkaitan dengan struktur data list. Contoh 1. Menggabungkan dua buah list. append([],y,y). append([h X],Y,[H Z]):-append(X,Y,Z). goal = append ([a,b],[c,d],z).. Z = [a,b,c,d] goal = append ([a,b],y,[a,b,c,d]).. Y = [c,d] Contoh 2. Memeriksa keanggotaan dalam list. member(x,[x _]). member(x,[_ Y]):-member(X,Y). goal = member(a,[p,q,a]).. Open List Open List adalah list yang mempunyai elemen berupa variabel, misalnya [a,b X]. Bila X diunifikasi dengan [] menjadi [a,b], dan bila diunifikasi dengan [c] menjadi [a,b,c]. Place Holder Place holders adalah nama variabel sementara yang digunakan kompiler, biasanya sebagai pengganti open list. Perhatikan contoh berikut: goal = append (X,[c],Z). X=[_1], Z=[_1,c] X=[_1,_2],Z=[_1,_2,c] dan seterusnya SEARCH TREE Search tree (sering juga disebut sebagai Prolog Search Tree) adalah tree yang tersusun pada saat aturan diterapkan berdasarkan pertanyaan (goal). Contoh search tree berdasarkan relasi member untuk pertanyaan: goal = member(a,[p, q,a]) adalah sebagai berikut: 25

member(a,[p, q, a, b]) member(a,[p [q,a, b]):-member(a,[q,a, b]) member(a,[q,a, b]) member(a,[q [a, b]):-member(a,[a, b]) member(a,[a, b]) member(a,[a [b]) Dalam mengevaluasi pertanyaan, kontrol di dalam Prolog ditentukan oleh dua hal, yaitu urutan pertanyaan dan urutan fakta maupun aturan. Untuk urutan pertanyaan, Prolog menggunakan algoritme evaluasi sebagai berikut: start with a query as the current goal; while the current goal is nonempty do let the current goal be G 1, G 2,, G k, where k 1; choose the leftmost subgoal G 1 ; if a rule applies to G 1 then select the first such rule A :- B 1, B 2,, B j, where j 0; let be the most general unifier of G 1 and A; the current goal becomes B 1, B 2,, B j, G 2, G 3,, G k else backtrack end if end while; succeed Sebagai contoh, perhatikan aturan berikut: append ([],Y,Y). append ([H X],Y,[H Z]):-append(X,Y,Z). prefix(x,z):-append(x,y,z). suffix(y,z):-append(x,y,z). appen2([h k],y,[h Z]):-appen2(X,Y,Z). appen2([],y,y). 26

1. Letak subgoal mempengaruhi hasil seperti pada contoh berikut: goal = prefix(x,[a,b,c]), suffix([e],x). no solutions goal = suffix([e],x), prefix(x,[a,b,c]). trail overflow ---> infinite computation 2. Letak rule mempengaruhi hasil goal = append(x,[c],z). X=[], Z=[c] X=[_1], Z=[_1,c] dst. goal = appen2(x,[c],z). <infinite computation> Contoh Prolog search tree untuk kasus ini adalah: GOAL = suffix([a],l), prefix(l,[a,b,c]) suffix([a],l):-append(_1,[a],l) append(_1,[a],l),prefix(l,[a,b,c]). {_1 [],L [a]} append([], [a], [a]) prefix([a], [a, b, c]) prefix([a], [a, b, c]) :- append([a], _2, [a, b, c] append([a], _2, [a,b,c]) append([a], _2, [a, b, c] :- append([], _2, [b,c]) append([], _2, [b,c]) {_2 [b, c]} append([], [b, c], [b, c]), L [a] 27

GOAL = suffix([b],l), prefix(l,[a,b,c]) append(_1,[b],l), prefix(l,[a,b,c]) {_1 [], L [b]} {_1 [_3 4], L [3 _5]} prefix([b],[a,b,c]) append(_4,[b],_5), prefix(_3 _5,[a,b,c]) {_4 [], _5 [b]} append([b],_2,[a,b,c]) prefix([_3,b],[a,b,c]).. backtrack append([_3,b],_6,[a,b,c]) {_3 a } append([b],_6,[b,c]) append([],_6,[c]) {_6 [c] } L =[a,b] 28

GOAL = prefix(l,[a,b,c]),suffix([a],l) append(l, _1, [a,b,c]), suffix([a], L) {L [], L [a, b, c]} {L [a _3]} suffix([a], []) append(_3, _1, [b, c]), suffix([a], [a _3) {_3 [], _1 [b, c]} append(_2,[a], []) suffix( [a], [a] ).. backtrack append( [_4, [a], [a] ) {_4 [] } L =[a], <no> 29

GOAL = append( X, [c], Z ) {X [], Z [c]} {X [ _1 _2 ], Z [ _1 _3]}. X = [], Z = [c] append( _2, [c], _3 ) { _2 [], _3 [c]}. X = [ _1], Z = [ _1, c].. GOAL = appen2( X, [c], Z ) {X [ _1 _2], Z [ _1 _3]} {X [], Z [c]} appen2( _2, [c], _3 ). X = [], Z = [c] { _2 [], _3 [c]}... X = [ _1], Z = [ _1, c] CUT Predikat CUT digunakan untuk memotong jejak query untuk melakukan lacak balik (backtrack), dan dilambangkan dengan tanda seru (!). Bentuk umum adalah: B :- C 1, C 2,...,C j-1,!, C j, C j+1,..., C n Proses query karena cut adalah jawaban yang memenuhi sampai dengan Cj-1 di-freeze (tak ada backtrack lagi). Backtrack hanya boleh pada C j,c j+1,...,c n aturan lain dari B tidak diperhatikan lagi. Ada dua jenis CUT, yaitu green CUT dimana predikat ini tidak mempengaruhi logika program melainkan hanya untuk peningkatan efisiensi atau kecepatan proses, dan red CUT yang secara logika memang diperlukan opeh aturan yang dibuat agar dapat digunakan untuk mencegah perhatian Prolog terhadap alternatif sub-goal yang ada. 30

Berikut disajikan contoh pengaruh predikat CUT terhadap proses evaluasi dari suatu pertanyaan yang diberikan. a(x) :- b(x). a(x) :- f(x). b(x) :- g(x), v(x). b(x) :- X=4, v(x). g(1). g(2). g(3). v(x). f(5). goals a(z). a(x) :- b(x). a(x) :- f(x). b(x) :- g(x),!, v(x). b(x) :- X=4, v(x). g(1). g(2). g(3). v(x). f(5). goals a(z). a(z) a(z) b(z) f(5) b(z) f(5) g(z), v(z) v(4) Z = 5 g(z),!, v(z) Z = 5 v(1) v(2) v(3) Z = 4!, v(x) Z = 1 Z = 2 Z = 3 v(1) Z = 1 31