konsep bahasa pemrograman logic

Upload: fred-leonardo-letsoin

Post on 15-Jul-2015

521 views

Category:

Documents


1 download

TRANSCRIPT

Konsep Bahasa Pemrograman Logic (Pendekatan dengan Bahasa Pemrograman Prolog)y Pengertian Adalah pemrograman yang berdasarkan kepada deklarasi fakta dan aturan. Berdasarkan fakta dan aturan yang disimpan dalam program, pemakai dapat melakukan query untuk mendapatkan jawaban yang merupakan komputasi dari program logik tersebut.

I. STRUKTUR PROGRAM PROLOG (Programming Logic).

Jenis bahasa pemrograman yang dikenal 1. Bahasa pemrograman prosedural, seperti misalnya BASIC, PASCAL, C++, JAVA . Pada bahasa pemrograman prosedural, kita memberitahu kepada komputer How to solve a problem. 2. Bahasa pemrograman deklarative seperti PROLOG, LISP. Pada bahasa pemrograman deklarative kita memberitahu kepada komputer What problem we want to solve

Struktur program prolog secara lengkap terdiri atas :

COMPILER DIRECTIVES

CONSTANTS

DOMAINS

DATA BASE

PREDICATES

GOAL

CLAUSES

I.1. COMPILER DIRECTIVES Compiler directives digunakan untuk memberi perintah kepada Turbo Prolog 2.0 tentang hal-hal tambahan yang harus dilakukan pada saat kompilasi. Perintah ini dituliskan dibagian awal program, atau dapat melalui menu Option/Compiler Directives akan tetapi hal yang sudah ditentukan dalam menu akan ditimpa oleh yang ditulis dalam program. Misalkan jika anda akan membuat program grafik menjadi file.EXE (Executable file), maka harus memberi tahu compiler tentang driver yang digunakan (misal CGA, EGA, VGA). Contoh : bgidriver _VGA_driver_far

I.2. CONSTANTS Untuk menyatakan konstanta yang ada (digunakan) dalam program.

I.3. DOMAINS Domains berisi deklarasi (pernyataan) tentang jenis data yang digunakan dalam fakta dan aturan. Mirip dengan bahasa Pascal atau C. Ada 6 buah DOMAINS standar yang dikenal dalam Turbo Prolog, yaitu : Integer : Bilangan bulat dengan range -32.768 sampai dengan 32.767 Real Char : Bilangan riil dari 1*e-307 sampai dengan 1*e+308 : Karakter tunggal yang berada diantara tanda yang terdiri atas angka,

huruf atau atau simbol khusus. Contoh : a, 4, K, %. String : Kumpulan karakter yang berada diantara tanda . Contoh : Anda, Aku, Pergi belanja. Symbol : Kumpulan karakter dan harus diawali dengan huruf kecil. Contoh : mari, abu, amin File : Digunakan untuk operasi file.

Selain domains standard, pemrogram dapat mendefinisikan domains lain yang terdiri dari domains standard.

I.4. DATA BASE Untuk menyimpan informasi dalam basis data internal. Bagian DATABASE boleh lebih dari satu. Program dalam prolog is a database of facts and rules Contoh : DATABASE Data_pribadi(nama,alamat,jabatan)

Perlu diingat bahwa predikat basis data boleh lebih dari satu, tetapi predikat yang sudah dinyatakan sebagai basis data tidak dapat digunakan lagi sebagai predikat biasa. Syarat predikat yang dinyatakan dalam basis data : 1. Hanya fakta yang boleh disimpan dalam basis data, aturan tidak diperbolehkan. 2. Fakta tersebut tidak boleh mengandung variabel bebas. Dalam Turbo Prolog 2.0 ada dua basis data, yaitu Basis Data Internal dan Basis Data Eksternal. Dalam basis data internal semua data baik yang bersifat statis (dalam program) maupun yang bersifat dinamis disimpan dalam memori. Bagian DATABASE boleh lebih dari satu, jika demikian, maka masing-masing harus diberi nama. Contoh : DATABASE_DaftarMahasiswa mahasiswa(nama,nim,alamat) DATABASE_DaftarNilaiAI nilai(nim,nilai) Jika database tidak diberi nama (hanya satu bagian), maka secara otomatis Turbo Prolog 2.0 akan memberi nama dbasedom

I.5. PREDICATES PREDICATES adalah nama simbolik untuk relasi. Contoh : Terdapat fakta bahwa slamet ayah dari amin. Dapat disajikan sebagai : ayah(slamet,amin). adik_kandung(marini,mario) ayah merupakan nama predicates sedangkan slamet dan amin adalah obyek yang berjenis symbol

Dalam predicates di atas, slamet dan amin disebut sebagai argumen. Predicates tersebut menyatakan relasi antara slamet dan amin, yaitu slamet adalah ayah dari amin, marini adik_kandung mario. Sebuah predicates dapat tidak memiliki argumen atau memiliki argumen dengan jumlah bebas. Jumlah argumen suatu predicates disebut arity (aritas). Syarat penulisan nama predicates : y y y Diawali dengan huruf kecil dan dapat diikuti oleh huruf, bilangan atau garis bawah. Panjang maksimum nama predicates 250 karakter. Tidak boleh menggunakan spasi, tanda bintang (*), tanda minus (-), dan garis miring (/).

Argumen dalam predicates tidak harus dituliskan dengan domains standard, tetapi dapat dinyatakan dengan argumen lain. Contoh : alamat(jalan,kota,kode_pos) kelahiran(tanggal,bulan,tahun) Seperti dalam bahasa Pascal atau C, apabila argumen status predicates tidak dituliskan dalam domains Standard, maka argumen tersebut harus dinyatakan dalam bagian DOMAINS, demikian sebaliknya. Contoh : DOMAINS jalan,kota,kode_pos = string tanggal,bulan,tahun = integer PREDICATES alamat(jalan,kota,kode_pos) kelahiran(tanggal,bulan,tahun) Contoh di atas lebih baik dibandingkan apabila argumen suatu predicates langsung dituliskan dalam domains standard, seperti :

PREDICATES alamat(string,string,string) kelahiran(integer,integer,integer) Predicates dengan nama yang sama dapat mempunyai aritas yang berbeda. Kedua predicates ini merupakan predicates yang berbeda tetapi keduanya harus dituliskan dalam satu kumpulan nama yang sama. Misalnya : ayah(nama); ayah(parto) ayah(nama,nama); ayah(parto,paijo) Pada contoh pertama, predicates menyatakan bahwa nama tersebut adalah seorang ayah, sedangkan predicates kedua menyatakan nama tersebut adalah seorang ayah dari nama yang lain.

I.6. GOAL GOAL berisi pertanyaan yang anda ajukan kepada turbo prolog.Bagian GOAL ini hanya dituliskan menggunakan kata tunggal, karena hanya boleh ada sebuah GOAL. GOAL dapat terdiri dari beberapa SUBGOAL. Perlu diingat suatu pernyataan baik fakta, relasi atau GOAL dikatakan satu apabila diakhiri dengan tanda titik. Ada 2 (dua) jenis GOAL : y GOAL eksternal : goal yang diberikan melalui compiler terpadu turbo prolog (di luar program) dan dalam jendela dialog. y GOAL internal : goal yang sekaligus dituliskan dalam program sehingga setiap kali dieksekusi tidak perlu lagi menuliskan goal yang diinginkan. Catatan : y Kalimat yang diapit dengan tanda /* .... */ menyatakan keterangan dan tidak dibaca oleh compiler Turbo Prolog 2.0.

Turbo Prolog 2.0, logika and dituliskan dengan tanda koma ,, kondisi if dituliskan dengan tanda :-.

I.7. CLAUSES (KLAUSA) CLAUSES (KLAUSA) berisi fakta dan aturan yang membentuk keseluruhan program. Bagian klausa ini mirip dengan procedure pada bahasa Pascal. Bagian fakta umumnya dituliskan sebelum bagian aturan. Fakta atau aturan yang mempunyai relasi yang sama harus dituliskan berkelompok. CLAUSES suka(siti,anto)

ayah(hendra,pranoto). ayah(hendra,kristanto). ayah(pranoto,bardan ). kakek(hendra,bardan). Dalam turbo prolog dapat juga digunakan pernyataan if dan dituliskan dengan simbol :-. Misalkan suatu pernyataan aturan Dewi suka sesuatu yang disukai oleh Panji : suka(dewi,sesuatu):suka(panji,sesuatu).

Turbo Prolog 2.0

Copyright (c) 1986,88 by

Catatan : Untuk contoh-contoh program digunakan struktur utama dari Turbo Prolog 2.0 yang terdiri atas : y DOMAINS y PREDICATES y GOAL

y CLAUSES Berikut ini sekedar contoh dan ikuti petunjukknya. Masuk ke editor dengan cara 1. Masuk ke direktori Turbo Prolog 2.0 berada, ketik Prolog lalu tekan enter. 2. Tekan huruf F (file) dan N (new) untuk masuk ke editor Turbo Prolog 2.0 3. Ketikkan program berikut ini :

/* Contoh program silsilah keluarga */ DOMAINS nama PREDICATES ayah(nama,nama) kakek(nama,nama) CLAUSES /* Fakta */ ayah(hendra,pranoto). ayah(hendra,kristianto). ayah(pranoto,bardan). ayah(pranoto,deni). ayah(kristianto,harahap). ayah(kristianto,sutarno). = symbol

/* Aturan */ Kakek(Kakek,Cucu) :ayah(Ayah,Cucu),

ayah(Kakek,Ayah).

4. Setelah selesai tekan F10 untuk kembali ke menu utama. 5. Tekan C lalu M (atau hot key F9), untuk mengkompilasi program kedalam memory. 6. Apabila kesalahan, Turbo Prolog 2.0 akan memberitahu jenis kesalahan dan nomor serta lokasi kesalahan, sehingga anda dapat langsung memperbaikinya. Setelah selesai lakukan kompilasi ulang dengan menekan F9. 7. Jika sudah tidak ada kesalahan maka di jendela Message, akan tampil pesan Compile succesfull. Simpan program dalam hard disk atau media lain dengan menekan F (File) lalu W (Write to) dan berilah nama misal program1 , Turbo Prolog akan langsung menambahkan ekstensi .PRO dibelakang nama program1. 8. Tekan R (run) untuk menjalankan program tsb dan dijendela dialog akan muncul pertanyaan Goal: Cobalah beberapa Goal berikut ini : Goal: ayah(hendra,pranoto) Yes Goal: ayah(pranoto,deni) Yes Goal: ayah(hendra,deni) No Goal: ayah(Ayah,X) Ayah=hendra, X=pranoto Ayah=hendra, X=kristanto Ayah=pranoto, X=bardan Ayah=pranoto, X=deni Ayah=kristanto, X=harahap Ayah=kristanto, X=sutarno

6 Solutions Goal: kakek(Kakek,X) Kakek=hendra, X=bardan Kakek=hendra, X=deni Kakek=hendra, X=harahap Kakek=hendra, X=sutarno 4 Solutions Goal: kakek(Z,sutarno) Z=hendra 1 Solution Goal: ayah(hendra,X) X=pranoto X=kristanto 2 Solutions

Contoh : program di atas misal suatu silsilah sebagai berikut :

hendra

pranoto

kristianto

bardan

deni

harahap

sutarno

Silsilah dapat dijelaskan sbb: hendra ayah pranoto, sedangkan pranoto adalah ayah bardan dan ayah deni. Dapat disimpulkan bahwa hendra kakek dari bardan dan deni. Sehingga dalam Prolog dapat dituliskan : ayah(hendra,pranoto). ayah(pranoto,bardan). Kakek(hendra,bardan). Bagaimana hubungan antara kakek dengan ayah, dari pernyataan di atas ?. kakek(hendra,bardan) if ayah(hendra, pranoto) and ayah(pranoto,bardan). Secara kalimat : Hendra adalah benar kakek Bardan jika Hendra adalah benar ayah Pranoto dan Pranoto adalah benar ayah Bardan. Secara umum, relasi kakek tersebut dapat dinyatakan sebagai suatu aturan sbb : kakek(X,Y) if ayah(X,Z) and ayah(Z,Y).

I.5. FAKTA dan RELASI Prolog merupakan suatu bahasa pemrograman yang terdiri dari kumpulan data-data obyek yang merupakan suatu fakta. Karena fakta menunjukkan suatu keadaan atau suatu situasi nyata maka fakta selalu benar (true). Prolog membedakan fakta menjadi 2 (dua), yaitu : 1. Menunjukkan relasi 2. Menunjukkan milik/sifat.

Lihat pada contoh di atas : ayah(hendra,pranoto). Fakta ini mengatakan bahwa hendra adalah ayah pranoto. Ayah menunjukkan relasi antara hendra dan pranoto. Penulisan relasi tidak baku, bebas bergantung pada pembuat program. Contoh di atas dapat juga dituliskan sebagai : ayah_dari(hendra,pranoto) Untuk sebuah fakta yang menunjukkan sifat misalnya : suparto adalah seorang pria, maka pria(suparto),motor(andi).

I.6. RULES (ATURAN). Aturan adalah suatu pernyataan yang menunjukkan bagaimana fakta-fakta berinteraksi satu dengan yang lain untuk membentuk suatu kesimpulan. Sebuah aturan dinyatakan sebagai suatu kalimat bersyarat. Misalnya ada suatu fakta : Prasojo suka durian. Kemudian ada sebuah aturan yang berbunyi : Andri suka sesuatu yang disukai oleh Prasojo. Dari informasi yang diperoleh dari fakta yang diketahui dapat diambil kesimpulan (jawaban) dari aturan tersebut yaitu Andri suka durian Aturan tersebut dapat juga dinyatakan : Andri suka sesuatu jika Prasojo suka sesuatu itu juga, dan dapat dituliskan sebagai : suka(andri,sesuatu) if suka(prasojo,sesuatu).

I.7. QUERYS (PERTANYAAN). Setelah data-data berupa fakta dan aturan diberikan, dapat diajukan pertanyaan berdasarkan fakta dan aturan yang ada. Misalkan : Apakah Tini suka boneka ? dan dalam Prolog dituliskan : suka(tini,boneka). Jika pertanyaan ini sesuai dengan fakta yang ada, maka Prolog akan memberikan jawaban : Yes(yang berarti benar) Catatan : y Kalimat yang diapit dengan tanda /* ....... */ menyatakan keterangan dan tidak dibaca oleh compiler.

y

Dalam Turbo Prolog, logika and dapat dituliskan dengan tanda koma (,) dan kondisi if dituliskan dengan tanda :-

I.8. VARIABLE. Besaran yang nilainya dapat berubah-ubah disebut variabel. Misalnya : Siapakah ayah Deni?. Karena ayah Deni belum diketahui, maka dituliskan dalam suatu variabel, misalnya X dan dituliskan sebagai : GOAL: ayah(X,deni) X=pranoto

I.8.1. CARA PENULISAN VARIABEL. 1. Nama variabel harus diawali dengan huruf besar atau garis bawah (_). 2. Nama variabel dapat terdiri dari huruf, bilangan atau simbol dan merupakan satu kesatuan dengan panjang maksimum 250 karakter. 3. Nama variabel hendaknya mengandung makna yang berkaitan dengan data yang dinyatakannya. Contoh : Tanggal_lahir Nama_ayah Nama variabel hanya berlaku untuk satu aturan (lokal). Bila variabel yang sama digunakan pada aturan yang lain, berarti variabel tersebut mempunyai arti yang berbeda. Misalkan dalam bagian CLAUSES terdapat dua aturan yang berbeda : kakek(Kakek,Cucu):ayah(Kakek,Ayah), ayah(Ayah,Cucu). nenek(Nenek,Cucu):ibu(Nenek,Ayah), ayah(Ayah,Cucu).

Variabel Ayah digunakan dalam aturan kakek dan nenek, namun kedua variabel tersebut tidak saling berhubungan. Variabel Ayah dalam aturan kakek hanya digunakan dalam tersebut, begitu pula dalam aturan nenek.

I.8.2. MACAM VARIABEL 1. Variabel bebas (Free variable) : variabel yang belum mempunyai nilai tertentu pada suatu saat. 2. Variabel terikat (Bound variable) : variabel yang sudah mempunyai nilai tertentu pada suatu saat. Contoh : GOAL: ayah(Ayah,deni), ayah(Ayah,bardan). Yang berarti siapa ayah deni dan juga ayah bardan? 3. Variabel tak bernama (Anonymous variable) : Bila anda ingin mendapatkan informasi tertentu, anda dapat menggunakan variabel tak bernama untuk mengabaikan nilai yang tak dikehendaki. Dalam Prolog variabel tak bernama dituliskan dengan garis bawah (_). Variabel tak bernama tak pernah terikat pada suatu nilai tertentu sehingga selalu sepadan dengan nilai apapun. Misal pada contoh program di atas anda ingin mengetahui nama-nama orang yang mempunyai anak (menjadi orang tua) tetapi anda tidak ingin mengetahui anakanaknya, anda dapat menanyakan : Goal: ayah(Ayah,_) dan Prolog akan menjawab : Ayah=hendra Ayah=hendra Ayah=pranoto Ayah=pranoto Ayah=kristanto Ayah=kristanto Variabel tak bernama dapat juga untuk menyatakan fakta setiap/semua Contoh : Setiap mahasiswa teknik informatika mempunyai komputer Prolog : mempunyai(_,komputer)

I.9. GOAL MAJEMUK. Dimaksudkan adalah goal yang terdiri lebih dari satu pertanyaan. Bagian dari goal disebut sub goal . Lihat dan coba contoh berikut ini : /* Contoh program merk mobil,tahun,harga */ DOMAINS merk,warna tahun,harga = symbol = integer

PREDICATES mobil(merk,warna,tahun,harga)

CLAUSES /* Fakta */ mobil(mercedez,biru,1975,20). mobil(mercedez,coklat,1986,50). mobil(kijang,merah,1990,65). mobil(baleno,hijau,1997,85). mobil(bmw,putih,1997,100). mobil(peugeot,metalic,1999,95). mobil(kijang,hijau,1987,55). mobil(honda,hitam,1999,98). mobil(mazda,hijau,1986,35). mobil(corolla,merah,2000,97).

mobil(corona,biru,1986,45). Misal anda ingin mendapatkan informasi tentang mobil yang harganya diatas 85, Turbo Prolog akan mencari padanan sub goal mobil(Merk,Warna,Tahun,Harga) dengan fakta yang ada dimulai dari fakta pertama, kemudian dilanjutkan ke sub goal berikutnya yaitu apakah harganya >85, jika benar maka turbo prolog akan memunculkan solusi dan diteruskan ke fakta yang lain, jika tidak benar maka Turbo Prolog akan mencari kemungkinan yang lain, dst. Sehingga diperoleh informasi diinginkan yang merupakan solusi sbb : Goal: mobil(Merk,Warna,Tahun,Harga),Harga>85 Merk=bmw, Warna=putih, Tahun=1997, Harga=100 Merk=peugeot, Warna=metalic, Tahun=1999, Harga=95 Merk=honda, Warna=hitam, Tahun=1999, Harga=98 Merk=corolla, Warna=merah, Tahun=2000, Harga=97 4 Solutions

Anda dapat juga meminta informasi misalnya mobil yang tahunnya > 1997 dan warnanya merah. Goal: mobil(Merk,Warna,Tahun,Harga), Warna=merah, Tahun>1997 Merk=corolla, Warna=merah, Tahun=2000, Harga=97 1 Solution

II. UNIFIKASI DAN BACKTRACKING II.1. UNIFIKASI. Proses yang dilakukan oleh Turbo Prolog untuk mencari padanan antara pernyataan yang terdapat pada aturan dengan fakta atau kepala aturan yang lain.

Syarat terjadinya unifikasi antara 2 (dua) pernyataan : 1. Mempunyai relasi yang sama. 2. Mempunyai jumlah dan posisi argumen yang sama. 3. Argumen yang berpadanan harus dari jenis data yang sama. 4. Semua pasangan argumen (pada data majemuk) harus juga berpadanan. Contoh terjadi unifikasi : y y ayah(Ayah, pranoto) dengan ayah(hendra,pranoto) lahir(Tanggal,Bulan,Tahun) dengan lahir(12,Agustus,1964)

Contoh tidak akan terjadi unifikasi : y ayah(hendra) dengan ayah(hendra,pranoto)

Karena mempunyai jumlah argumen yang tidak sama, meskipun mempunyai nama relasi yang sama.

II.2. PROSES PENCARIAN JAWABAN. Proses pencarian jawaban dalam Turbo Prolog 2.0 dilakukan dengan cara pemadanan (padanan). Untuk lebih jelasnya, misal pada contoh program di atas (silsilah keluarga) dilakukan penambahan beberapa fakta dan aturan sbb:

/* Contoh program silsilah keluarga */ DOMAINS nama = symbol

PREDICATES ayah(nama,nama) kakek(nama,nama)

ibu(nama,nama) nenek(nama,nama) saudara_kandung(nama,nama) saudara_sepupu(nama,nama)

CLAUSES /* Fakta */ /* Orang tua */

ayah(hendra,pranoto). ayah(hendra,kristianto). ayah(pranoto,bardan). ayah(pranoto,deni). ayah(kristianto,harahap). ayah(kristianto,sutarno). ayah(prabowo,bu_pranoto). ayah(sasongko,bu_kristanto). ibu(bu_hendra,pranoto). ibu(bu_hendra,kristanto). ibu(bu_pranoto,bardan). ibu(bu_pranoto,deni). ibu(bu_kristanto,harahap). ibu(bu_kristanto,sutarno). ibu(bu_prabowo,bu_pranoto). ibu(bu_sasongko,bu_kristanto).

/* Aturan */ /* Kakek adalah kakek Cucu */

kakek(Kakek,Cucu) :ayah(Ayah,Cucu), ayah(Kakek,Ayah). kakek(Kakek,Cucu) :Ibu(Ibu,Cucu), ayah(Kakek,Ibu).

/* Nenek adalah nenek Cucu */

nenek(Nenek,Cucu):ayah(Ayah,Cucu), ibu(Nenek,Ayah).

nenek(Nenek,Cucu):ibu(Ibu,Cucu), ibu(Nenek,Ibu).

/* Nama1 saudara kandung Nama2 */

Saudara_kandung(Nama1,Nama2):ayah(Ayah,Nama1),

ayah(Ayah,Nama2), ibu(Ibu,Nama1), ibu(Ibu,Nama2), Nama1 Nama2.

/* Sdr1 saudara sepupu Sdr2 */

saudara_sepupu(Sdr1,Sdr2):ayah(Ayah1,Sdr1), ayah(Ayah2,Sdr2), saudara_kandung(Ayah1,Ayah2).

saudara_sepupu(Sdr1,Sdr2):ayah(Ayah1,Sdr1), ibu(Ibu,Sdr2), saudara_kandung(Ayah,Ibu).

saudara_sepupu(Sdr1,Sdr2):ibu(Ibu,Sdr1), ayah(Ayah,Sdr2), saudara_kandung(Ibu,Ayah).

saudara_sepupu(Sdr1,Sdr2):ibu(Ibu1,Sdr1), ibu(Ibu2,Sdr2),

saudara_kandung(Ibu1,Ibu2).

Perhatikan, ada 2 (dua) kata yang hampir sama penulisannya tetapi mempunyai fungsi yang berbeda, yaitu Kakek sebagai variabel dan kakek sebagai relasi, demikian juga Nenek dan nenek, dan lainnya. Bagaimana caranya Turbo Prolog 2.0 mendapatkan jawaban dari Goal yang kita berikan ? Lihat kembali pada suatu goal yang kita berikan misal : GOAL: kakek(Kakek,bardan) Turbo Prolog 2.0 akan mencari padanan goal di atas dengan fakta/ aturan, mulai dari yang teratas sampai ditemukan fakta/aturan yang sepadan, yaitu : kakek(Kakek,bardan) kakek(Kakek,Cucu)

Variabel Cucu terikat menjadi bardan dan Turbo Prolog 2.0 akan mencari nilai variabel Kakek dengan membuktikan apakah semua pernyataan (subgoal) di dalam aturan tersebut benar. Pernyataan yang pertama : ayah(Ayah,Cucu) ayah(Ayah,bardan) Untuk membuktikan pernyataan di atas benar, Turbo Prolog 2.0 mencari padanan dengan fakta yang ada mulai dari yang teratas hingga ditemukan : ayah(Ayah,bardan) ayah(pranoto,bardan) Ini berarti variabel Ayah terikat menjadi pranoto. Karena subgoal yang pertama benar, maka Turbo Prolog 2.0 melanjutkan ke subgoal berikutnya dengan membawa serta semua variabel yang telah terikat pada subgoal sebelumnya : ayah(Kakek,Ayah) ayah(Kakek,pranoto) Ditemukan padanan : ayah(Kakek,pranoto) ayah(hendra,pranoto)

Sehingga variabel Kakek terikat menjadi hendra. Setelah semua subgoal dieksekusi dan semua variabel menjadi variabel terikat, Turbo Prolog 2.0 akan kembali ke bagian kepala aturan tersebut dengan membawa semua variabel terikat, sedangkan nilai variabel yang diteruskan oleh aturan kakek tergantung pada variabel yang terdapat pada bagian kepala. Pada aturan kakek, hanya nilai variabel Kakek yang diteruskan sedangkan nilai variabel Ayah tidak diperlukan. kakek(Kakek,bardan) kakek(hendra,bardan) Salah satu jawaban akhir adalah : Kakek = hendra. Setelah keluar dari suatu aturan, variabel yang digunakan oleh subgoal di dalam aturan tersebut akan menjadi variabel bebas kembali. Coba untuk beberapa GOAL berikut ini : I : Siapakah kakek Bardan ? P: kakek(Kakek,bardan). I : Siapakah Cucu hendra? P: kakek(hendra,Cucu). I : Siapakah saudara kandung pranoto? P: saudara_kandung(pranoto,Sdr). I : Siapakah keponakan kristanto? P: keponakan(Keponakan,kristanto). I : Siapa saja yang mempunyai hubungan saudara kandung? P: saudara_kandung(Nama1,Nama2). I : Siapa saja yang mempunyai hubungan saudara sepupu? P: saudara_sepupu(Nama1,Nama2). I : Siapakah nenek dari harahap? P: nenek(X,harahap).

I : Siapakah saudara_kandung Bardan? P: saudara_kandung(X,bardan).

II.3. BACKTRACKING (RUNUT BALIK). Backtracking adalah suatu cara (prosedur) kembali ke awal dan mengikuti kembali cara (prosedur) yang sama dengan sebelumnya. Cara ini dilakukan berulang kali sampai jawaban yang diinginkan dapat ditemukan atau sampai semua kemungkinan jawaban telah habis dicoba. Coba ketik program pendek berikut ini : /* Program Coba_3 */ DOMAINS orang, minuman, kue, rasa = symbol PREDICATES minuman(minuman) kue(kue) rasa(minuman,rasa) rasa(kue,rasa) suka(orang,minuman,kue) CLAUSES minuman(teh). minuman(kopi). minuman(susu). kue(serabi). kue(bolu). kue(martabak).

rasa(teh,tawar). rasa(kopi,pahit). rasa(susu,manis). Rasa(serabi,asin). Rasa(martabak,gurih). Rasa(bolu,manis).

/* Panji suka minuman manis dan kue yang rasanya asin */

suka(panji,Minuman,Kue):minuman(Minuman), rasa(Minuman,manis), kue(Kue), rasa(Kue,asin).

Untuk melihat backtracking, masukkan GOAL : suka(panji,Apa1,Apa2) Turbo Prolog 2.0 akan mencoba memadankan dengan fakta atau aturan mulai dari yang teratas dan didapatkan padanan pada aturan : suka(panji,Minuman,Kue) Variabel Apa1 berunifikasi dengan variabel Minuman dan variabel Apa2 berunifikasi dengan variabel Kue . Untuk membuktikan apakah aturan suka tersebut benar atau salah, Turbo Prolog 2.0 akan membuktikan masing-masing bagian (subgoal) aturan tersebut dimulai dari yang pertama, yaitu :

minuman(Minuman) Turbo Prolog 2.0 mencari padanan, mulai dari fakta yang pertama dan diperoleh : minuman(teh) sehingga variabel Minuman terikat menjadi teh, dan kue(Kue). Diperoleh : kue(serabi), sehingga variabel Kue terikat menjadi serabi. Karena ada lebih dari fakta/aturan yang sama, Turbo Prolog 2.0 memberi tanda pada fakta/aturan berikutnya sebagai titik runut balik yang nanti akan digunakan untuk mencari kemungkinan jawaban lain bila kemungkinan sebelumnya salah/gagal. Dengan variabel Minuman terikat menjadi teh dan variabel Kue terikat menjadi serabi, Turbo prolog 2.0 akan melanjutkan untuk membuktikan subgoal berikutnya yaitu : rasa(Minuman,manis)- rasa(teh,manis) dan rasa(Kue,asin)- rasa(serabi,asin) Ternyata untuk minuman tidak sepadan sehingga subgoal tersebut gagal, tetapi untuk rasa(serabi,asin) benar. Kemudian Turbo Prolog2 melakukan runut balik pada titik runut balik mendapatkan fakta : minuman(kopi) rasa(Minuman,manis)- rasa(kopi,manis) ini juga tidak benar, kembali runut balik diperoleh : minuman(susu) rasa(Minuman,manis)- rasa(susu,manis) dan ini benar. Turbo Prolog 2.0 berhasil mendapatkan padanannya sehingga subgoal tersebut benar dan seluruh aturan tersebut juga benar. Karena variabel Apa1 telah terikat dengan variabel

Minuman dan variabel Minuman terikat dengan susu serta variabel Apa2 terikat dengan variabel Kue, sedangkan variabel Kue terikat dengan serabi, maka diperoleh solusi : Apa1=susu, Apa2=serabi 1 Solution

Apabila suatu program, GOAL diletakkan di dalam (GOAL internal), maka Turbo Prolog 2.0 akan melakukan runut balik. Apabila ditemui kondisi gagal (fail) pada suatu subgoal, maka Turbo Prolog 2.0 akan melakukan runut balik dimulai dari subgoal terdekat. Misalkan : sesuatu:- a,b,c,d Dengan subgoal a dan c terdiri dari beberapa fakta/aturan. Jika subgoal b gagal, maka akan dilakukan runut balik pada subgoal a. Jika kondisi gagal baru ditemui pada subgoal d, maka akan dilakukan runut balik pada subgoal c sampai semua kemungkinan jawaban telah dicoba. Jika ternyata tidak ada jawaban yang memenuhi, maka runut balik akan dilanjutkan pada subgoal a. Demikian seterusnya hungga seluruh kemungkinan jawaban a dan c telah dicoba. Berikut ini gambar salah satu kemungkinan alur : A b(gagal) a b c d(gagal) c(terakhir) d(gagal) a b c d(gagal) c d. (berhasil). Jika GOAL di luar program (GOAL Eksternal) dan anda isikan pada bagian Dialog, maka runut balik akan dilakukan secara otomatis walaupun kondisi subgoal tersebut berhasil, akibatnya Turbo Prolog 2.0 akan menampilkan semua kemungkinan jawaban dari program tersebut. Untuk lebih memahami hal di atas, cobalah program pendek berikut ini : Program berisi namanama pemain bulutangkis beserta umurnya. Dua orang pemain yang sama umurnya akan bertanding. DOMAINS nama = symbol umur = integer

PREDICATES pemain(nama,umur)

CLAUSES pemain(tan_yoe_hok,35). pemain(rudy_hartono,25). pemain(sumirat,35). pemain(ade_chandra,27). pemain(swie_king,22). pemain(minarni,35). Pada jendela dialog, masukkan GOAL : pemain(A,35),pemain(B,35),AB Maka akan diperoleh : A=tan_yoe_hok, A=tan_yoe_hok, A=sumirat, A=sumirat, A=minarni, A=minarni, 6 Solutions. Tambahkan GOAL menjadi GOAL internal yaitu sebelum CLAUSES, sbb : GOAL pemain(A,35), B=sumirat B=minarni B= tan_yoe_hok B=minarni B= tan_yoe_hok B=sumirat

pemain(B,35), AB. write(A, ,B). Karena menggunakan GOAL internal, Turbo Prolog 2.0 tidak melakukan runut balik karena pada bagian akhir, GOAL mempunyai kondisi berhasil, sehingga yang ditampilkan dilayar hanya satu yaitu : A=tan_yoe_hok B= sumirat.

II.4. PREDIKAT NOT Seperti dilogika matematika Not digunakan untuk menyatakan lawan logika dari suatu pernyataan. Not tidak dapat berdiri sendiri dan tidak dapat dipasangkan pada fakta atau kepala suatu aturan, tetapi hanya dapat dipasangkan pada bagian suatu aturan. Contoh, misalkan pernyataan : Sdr1 adalah saudara_sepupu Sdr2 jika Sdr1 dan Sdr2 mempunyai kakek yang sama dan Sdr1 bukan saudara_kandung Sdr2 dan Sdr1 tidak sama dengan Sdr2 Dalam Turbo Prolog 2.0 dituliskan : Saudara_sepupu(Sdr1,Sdr2):Kakek(Kakek,Sdr1), Kakek(Kakek,Sdr2), Not(saudara_kandung(Sdr1,Sdr2)), Sdr1Sdr2.

III. MASUKAN DAN KELUARAN

Semua predikat yang telah dibicarakan/digunakan dibuat sendiri oleh pemrogram, sehingga pemrogram bebas menentukan nama predikat tersebut. Turbo Prolog 2.0 telah dilengkapi dengan predikat standar dalam jumlah cukup banyak yang mencakup berbagai fungsi. Predikat standar tidak dapat diubah-ubah oleh pemrogram dan juga predikat standar tidak boleh digunakan sebagai nama predikat yang dibuat oleh pemrogram. Karena merupakan reserved word.

III.1. FUNGSI ARGUMEN PREDIKAT STANDAR. Ada 2 fungsi : 1. Meneruskan nilai yang ditentukan dalam program ke predikat standar untuk diolah (input). Variabel dalam predikat tersebut harus variabel terikat. 2. Meneruskan nilai yang didapat oleh predikat standar ke dalam program (output). Variabel dalam predikat tersebut harus variabel bebas. III.2. PREDIKAT KELUARAN Turbo Prolog 2.0 mempunyai 3 buah predikat keluaran, yaitu : a. write : digunakan untuk menuliskan konstanta atau isi variabel ke piranti keluaran yang dikenali pada saat itu. Bentuk umum : write(E1,E2,.....,En) E1,E2,....,En adalah konstanta (karakter atau string) atau variabel. Variabel harus variabel terikat. Predikat write selalu benar. Untuk menampilkan pada baris berikutnya digunakan predikat standar nl (new line). write(Program Studi Ilmu Komputer),nl, write(Fakultas MIPA UNDIP). Selain itu ada yang lainnya : \n : baris baru (carriage return/line feed) \t : tabulasi

\b : backspace (hapus karakter disebelah kiri) Dan harus dituliskan dalam tanda kutip bersama-sama dengan apa yang akan ditampilkan, Contoh : write(Program Studi Ilmu Komputer.\n), write(Fakultas MIPA UNDIP). b. writef : fungsi sama seperti write, tetapi hasilnya mempunyai format yang diinginkan

pemrogram. Bentuk Umum : writef(format,E1,E2,...,En) variabel format mempunyai bentuk : %-m.pf. : menghasilkan tulisan rapat kiri.

Untuk rapat kanan, tanpa tanda m : lebar tulisan minimum (optional) p f : jumlah angka desimal (optional) : format lain yang diinginkan (optional)

Macam-macam format f : f e : format bilangan real dalam notasi desimal : 123.4 atau 0.054 : format bilangan real dalam notasi eksponensial : 1.234e2

g : format bilangan real dalam bentuk paling sederhana (default untk bilangan real d : format karakter atau bilangan bulat dalam bilangan desimal. u : format karakter atau bilangan bulat posistip (unsigned inte-ger) x c : format karakter atau bilangan bulat dalam bilangan heksade-simal. : format karakter atau bilangan bulat sebagai karakter

s

: format string.

c. writedevice (dengan default adalah layar) : Predikat ini untuk mengubah atau mendapatkan informasi tentang piranti keluaran yang dikenali oleh program pada saat itu. Bentuk umum : writedevice(VarPiranti). Jika VarPiranti adalah variabel bebas berarti minta informasi piranti yang digunakan, bila variabel terikat, maka mengubah piranti keluaran.

III.3. PREDIKAT MASUKAN Ada 5 (lima) buah predikat keluaran (default adalah keyboard): a. Readln : digunakan untuk membaca sederetan karakter dari piranti masukan sampai diketemukan tanda carriage return (ASCII 13). Karakter yang dibaca ditampilkan di layar monitor. Bentuk umum : readln(VarString) b. Readchar : digunakan untuk membaca karakter tunggal dari piranti masukan (tanpa perlu enter). Bentuk umum : readchar(VarChar) c. Readint : untuk membaca bilangan bulat (-32,768 hingga 32,767) sampai tombol Enter ditekan. Bentuk umum : readint(VarInt) d. Readreal : untuk membaca bilangan real sampai tombol Enter ditekan. Bentuk umum : readreal(VarReal) e. Readdevice : digunakan untuk mengubah atau meminta informasi tentang piranti masukan yang saat itu dikenal. Bentuk umum : readdevice(VarDev)

ARITHMETIC EXPRESSIONS Arithmetic is performed by built-in procedures whose arguments are integer expressions which are evaluated when the procedure is called. An integer expression is a term built from evaluable functors, integers and variables. At the time of evaluation, each variable in an integer expression must be bound to an integer, or an integer expression. Each evaluable functor stands for an arithmetic operation. The evaluable functors are as follows, where X and Y are integer expressions: In the arithmetic built-in procedures which follow, X and Y stand for arithmetic expressions and Z for some term. Z is X X+Y X-Y X*Y X/Y X // Y X mod Y X ** Y X^Y -X abs(N) acos(N) Expression X is evaluated and the result is unified with Z. Addition Subtraction Multiplication Floating-point division Integer division X modulo Y exponentiation (Y > 0). exponentiation (Y > 0). [Not ISO Standard] unary minus Absoliute value Arccosine (in radians)

asin(N) atan(N) atan2(Y, X) ceiling(N) cos(N) exp(N) float(N) floor(X) log(N) log10(N) sin(N) sign(N) sqrt(N)

Arcsine (in radians) Arctangent (in radians) Same as atan(Y/X) except that the signs of both arguments are used to determine the quadrant of the result Smallest inteteger not smaller than N Cosine (argument in radians) Natural anitlogarithm, e^N Convert to floating point Largest integer not greater than X Natural logarithm Logarithm (base 10) Sine (argument in radians) Sign (-1, 0 or 1 for negative, zero or positive N) Square root

truncate(X) Integer equal to the integer part of X X =:= Y X =\= Y XY X =< Y The values of X and Y are equal. The values of X and Y are not equal. The value of X is less than the value of Y. The value of X is greater than the value of Y. The value of X is less than or equal to the value of Y.

X = Y

The value of X is less than or equal to the value of Y. [Not ISO Standard] The value of X is greater than or equal to the value of Y.

Konsep Dasar Pemrogramam Logiky Pemrograman logic/ deklaratif y Ciri pemrograman logic y Awal pemrograman logic y Konstruktor program logic o Fakta o Query o Aturan (rules) Pemrograman logik/ deklaratif y Adalah pemrograman yang berdasarkan kepada deklarasi fakta dan aturan y Berdasarkan fakta dan aturan yang disimpan dalam program, pemakai dapat melakukan query untuk jawaban yang merupakan komputasi dari program logik tersebut Ciri pemrograman logik y Tidak berfikir dalam urut-urutan operasi komputer seperti pada pemrograman prosedural, tapi menyatakan program dalam bentuk deklarasi y Knowladge dan asumsi sudah cukup untuk menyelesaikan persoalan jika dinyatakan secara eksplisitsebagai aksioma logik

y Program logik dieksekusi dengan memberikan padanya sebuah prblem yang dinyatakan dalam pernyataan logik yang di sebut goal statement y Eksekusi program adalah usaha untuk membuktikan goal benar, dengan asumsi (berupa fakta, aturan) yang ada pada program Awal pemrograman logik y Kowalski dan Colmerauer mencanangkan interpretasi prosedural dari Klausa Horn: Aksioma: A if B1 and B2 and and Bn Dapat ditulis sebagai prosedur: o A adalah prosedure head o Bi adalah Body o A benar, jika B benar y Jadi pada pemrograman logik o Program adalah sebuah himpunan aksioma/aturan yang mendefinisikan hubungan antar objek o Komputasi program adalah pembuktian dari goal yang diberikan pada program o Sebuah program mendefinisikan konsekuensi yang merupakan arti dari program itu Konstruksi program logik y Fakta y Rules (aturan) y Query Aturan, fakta dan query adalah Klausa Horn Fakta y Adalah kalimat sederhana untuk menyatakan relasi antar objek

y Fakta dalam pemrograman logik dituliskan sebagai predikat y Hanya fakta yang benar yang dimasukan ke dalam basis data dalam suatu program deklaratif y Faktra yang benar tersebut dienumerasi satu per satu dan harus sesuai dengan dunia nyata yang diprogram y Contoh: 1. {Ayah (X,Y): X adalah ayah dari Y} Ayah (philips, charles) Ayah (charles, harry) 2. {Ibu (X,Y) adalah benar, jika X adalah ibu dari Y} Ibu (elisabeth, charles) Ibu (diana, william) 3. {Pria (X)L jika X adalah pria} Pria (philips) Pria (charles) 4. {Perempuan (X): X adalah perempuan} Perempuan (elisaneth) Perempuan (diana) 5. {Suka (X,Y) benar, jika S suka Y} Suka (sinta, kacang) Suka (sinta, kripik) Suka (ali, kripik) Suka (ali, sinta)

6. {plus (N,M,S) benar, jika N ditambah M adalah S} Plus (2,3,5) Plus (3,4,7) 7. {jadwal (K,D,T,J1,J2) benar, jika kereta api bernomor K bernagkat dari kota D menuju ke T pada jam J1 dan akan tiba di kota T pada J2} Jadwal (P101, Bandung, Jakarta, 05:00, 7:40) Jadwal (P102, Bandung, Jakarta, 06:00, 7:40) Jadwal (M101, Bandung, Surabaya, 17:45, 6:00) Jadwal (P201, Jakarta, Bandung 05:30, 8:10) Jadwal (P202, Jakarta, Bandung 06:30, 9:10) Jadwal (P101, Surabaya, Bandung 06:00, 6:00) 8. {tanggal (d,m,y benar, jika adalah sebuah tanggal dengan tanggal d, bulan m, dan tahun y} Tanggal (1,1,1995) Tanggal (31,1,1995) Tanggal (28,2,1994) Tanggal (31,12,1993) y Setiap nilai parameter dari FAKTA mempunyai domain tertentum berupa: Numerik (integer, real) Konstanta simbolik (nama)]list (bentuk spesifik yang terdiri dari sebuah elemen yang disebut head dan sisanya adlaah list yang disebut sebagai tail. List dituliskan dengan [X|Xs]. Query y Adalah cara untuk memperoleh informasi dari sebuah program deklaratif

y Menanyakan apakah suatu relasi tertentu dipenuhi anatar objek y Ditulis dengan tanda tanya y Contoh : Ayah (philips, charles)? (jawaban : YES) Simple Query y Terdiri dari 1 goal P Fakta P = Query P? menyanyakan apakah P benar y Contoh Fakta - Ayah (philip, charles) - Ibu (elisabeth, charles) Query - Ayah (philips, charles)? - Ibu (elisabeth, charles)? Logical variables y Logical variabel adalah indibidu yang belum di tentukan secara spesifik y Contoh: = suka (sinta, X)? X = kacang, X = kripik = plus (X,Y,4)? (X=0, Y=4)

(X=1, Y=3) y Variabel sangat berguna untuk menyatakan fakta yang banyak y Contoh: Suka (alin, nasi) {ali suka nasi} Suka (X, nasi) {semua orang suka nasi} Suka (X,X) {semua orang suka pada dirinya sendiri} Kali (O,X,O) {bilangan berapapun dikalikan nol, hasilnya nol}