You are on page 1of 12

ARTIFICIAL_INTELLIGENCE_D3

PEMROGRAMAN TURBO PROLOG

PENDAHULUAN PROLOG singkatan dari PROgramming in LOGic. Bahasa Prolog merupakan bahasa generasi kelima, dibangun atas dasar pemrograman alamiah dan logika. Dari segi teori, pembangunan gagasan pemrograman dengan logika (programming in logic) yang pertama adalah Kowalski di Edinburgh. Kemudian didemonstrasikan secara eksperimental oleh Maarten van Emden juga di Edinburgh, dan diwujudkan oleh Alain Colmerauer (seorang profesor di Universitas Aix, Marseilles, Perancis) dan Philippe Roussel dengan berhasil membuat interpreter Prolog yang pertama bersama kelompoknya the Groupe d'Intelligence Artificielle (GIA) tahun 1972. Kelahiran Prolog sendiri diawali kelika Alain Colmerauer dengan sekelompok peneliti menghadapi masalah penerjemahan bahasa dengan komputer di Montreal. Hal ini akibat hasil karya Noam Chomsky dalam ilmu bahasa alami dengan bahasa komputer. 1. FAKTA Fakta adalah suatu kenyataan atau kebenaran yang diketahui. Fakta menyatakan hubungan (relasi) antara dua obyek atau lebih. Fakta dapat juga menunjukkan sifat suatu obyek. Obyek dapat berupa benda, manusia, hewan, tumbuhan, atau suatu kejadian/peristiwa. Bentuk Umum penulisan fakta di Turbo Prolog: relasi/sifat(argumen/obyek). Penulisan fakta harus diakhiri dengan tanda titik (.). Contoh:
pedas(cabe). orangtua(ahmad,hasan).
Orangtua dan pedas disebut relasi/sifat. Nama relasi, orangtua, disebut juga predikat. Yang berada di dalam [cabe, ahmad, dan hasan] menggambarkan obyek dan

seperti kurung disebut argumen. Predikat boleh tanpa argumen. Jadi predikat dapat dapat dikatakan sebagai nama suatu relasi dan menentukan jenis obyek yang terlibat. Suatu unsur, obyek nyata atau konstanta yang tidak tersusun dari obyek lain disebut atom. Jadi cabe, ahmad, dan hasan merupakan atom-atom.

BY TONI KHALIMI, S.SI

Page 1 of 12

ARTIFICIAL_INTELLIGENCE_D3

Misalkan terdapat fakta berupa relasi yang diberikan dengan representasi jaringan semantik berikut:
punya istri Siti punya anak

Ahma d

Wahyu punya anak punya anak

Nani

Iwan

Gani

Gambar 1. Sebuah fakta hirarki suatu keluarga.

Dari gambar jaringan semantic di atas, kita bisa mengungkapkan hubungan keluarga dengan satu relasi, misalnya orangtua(X,Y); dan dibaca X adalah orang tua Y. Hubungan ini dituliskan dalam bahasa Prolog:
orangtua(ahmad,wahyu). orangtua(siti,wahyu). orangtua(wahyu,nani). orangtua(wahyu,iwan). orangtua(nani,gani). orangtua(iwan,gina).

Selain relasi orangtua, dapat juga ditentukan realsi lain seperti anak(Y,Z), kakek(Z,S), cucu(L,M), adik(K,L), dan sebagainya. Sehingga diperoleh:
anak(wahyu,ahmad). kakek(ahmad,nani).

Contoh fakta yang berupa sifat: Gula berasa manis Dinyatakan dalam Prolog:
manis(gula).

punya anak
Gina

punya anak

BY TONI KHALIMI, S.SI

Page 2 of 12

ARTIFICIAL_INTELLIGENCE_D3

2. Aturan Misalkan kita ingin agar bisa menanyakan relasi kakek atau anak dari relasi orangtua tadi, sementara sudah terlanjur menyusun fakta seperti di atas. Mungkin terlintas di fikiran kita untuk membuat saja relasi anak dan kakek sebagai berikut:
anak(wahyu,ahmad). anak(wahyu,siti). anak(nani,wahyu). anak(iwan,wahyu). anak(gani,nani). anak(gina,iwan). kakek(ahmad,nani). kakek(wahyu,gani). kakek(wahyu,gina).

Dengan dmk kita mempunyai 3 jenis predikat untuk menyatakan diagram keluarga itu. Relasi anak disusun terbalik dari fakta untuk relasi orangtua, dan fakta untuk relasi kakek dilacak dari relasi yang ada. Maka kita dapat mengajukan pertanyaan seperti: Siapa anak ahmad? Yang dalam prolog ditulis,
Goal: anak(X,ahmad)

harus huruf besar (karena merupakan variabel), tidak perlu diakhiri dengan tanda titik.
X

Prolog akan menjawab,


X = wahyu. 1 Solution

Untuk pertanyaan : siapa kakek iwan? Yang dalam Prolog ditulis,


Goal: kakek(X,iwan)

Prolog akan menjawab,


X = ahmad. 1 Solution

Cara penulisan fakta baru seperti itu tentu saja membosankan dan tidak sangkil, apalagi jika kita menghendaki lebih banyak relasi baru ditambah fakta yang ada sangat banyak. Untuk itu digunakan cara lain yaitu dengan membuat aturan, sehingga dapat memperbesar kemampuan program atau meningkatkan daya nalar program, disamping sangat sederhana dan mudah.

BY TONI KHALIMI, S.SI

Page 3 of 12

ARTIFICIAL_INTELLIGENCE_D3

Untuk membuat suatu aturan kita hanya perlu suatu rumusan logika sebagai berikut. Fakta yang ada memperlihatkan realsi orangtua, maka jika kita ingin menyatakan relasi anak atau kakek, kita harus merumuskan apa hubungan antara orangtua dan anak, juga antara orangtua dan kakek. Secara logika, A anak B, jika B orangtua A Dan A kakek C, jika A orangtua B dan B orangtua C. Jadi, di sini kita mencari rumusan anak dan kakek dengan relasi yang ada yaitu orangtua. Dalam relasi orangtua, aturan relasi untuk anak dalam Prolog ditulis sebagai berikut:
anak(X,Y) if orangtua(X,Y).

Kata if dapat diganti dengan tanda bagi dan minus ( :-), sehingga menjadi:
anak(Y,X) :- orangtua(X,Y).

sedangkan aturan untuk relasi kakek adalah


kakek(X,Z) if laki_laki(X) and orangtua(X,Y) and orangtua(Y,Z).

Dalam aturan di atas ada relasi baru yang perlu ditambahkan, yaitu laki_laki(X), untuk memastikan bahwa X bukan seorang nenek. Kata and dapat diganti dengan tanda koma (,), sehingga menjadi:
kakek(X,Z) :- laki_laki(X), orangtua(X,Y), orangtua(Y,Z).

Aturan-aturan di atas merupakan klausa.


upaklausa upaklausa upaklausa

kakek(X,Z) if laki_laki(X) and orangtua(X,Y) and orangtua(Y,Z). kepal a tubuh

Klausa (clause) adalah suatu frase (ungkapan) atau susunan kata yang dalam Prolog bisa berupa fakta atau aturan yang

BY TONI KHALIMI, S.SI

Page 4 of 12

ARTIFICIAL_INTELLIGENCE_D3

diakhiri dengan titik. Klausa dapat merupakan rangkaian upaklausa-upa-klausa dengan and (konjungsi), or (disjungsi) atau if (implikasi). Contoh penggunaan disjungsi dalam suatu aturan berikut:
orangtua(X,Y) :- ibu(X,Y) or ayah(X,Y).

Kata or dapat diganti dengan tanda titik koma (;), sehingga menjadi:
orangtua(X,Y) :- ibu(X,Y); ayah(X,Y).

3. Variabel Argumen suatu predikat dapat berupa konstanta (atom) atau variabel atau bahkan obyek lain. Atom disebut juga obyek nyata (concrete) sedangkan variabel disebut juga obyek umum (general). Suatu atom, variabel atau obyek lain dalam prolog disebut term. Jadi, argumen selalu berupa term. Dalam Prolog terdapat 2 variabel, yaitu: a. Variabel bernama. Yaitu variabel yang diberi nama, seperti: X, Orang, dan sebagainya. Karakter pertama variabel harus huruf besar (capital) atau garis bawah/underscore (_). Jika tidak, Prolog akan menganggap sebagai simbol atau konstanta. Karakter pertama variabel tidak boleh bilangan. Nama variabel juga tidak boleh mengandung suatu karakter khusus, seperti: + (tambah), (kurang), / (bagi), * (kali) dan sebagainya. Contoh pemberian nama variabel yang benar:
Orang Nama_Orang _orang Proyek_01 _Kota

Contoh pemberian nama variabel yang salah:


2orang nama-orang tgl/lahir proyek_01 /* /* /* /* diawali angka */ mengandung operator minus */ mengandung operator bagi */ diawali huruf kecil */

Untuk memudahkan pembacaan program, sebaiknya nama variabel menunjukkan (mengandung) arti yang ditunjuknya. Misalnya:
PendapatanPerKapita GolonganRuangJabatan

BY TONI KHALIMI, S.SI

Page 5 of 12

ARTIFICIAL_INTELLIGENCE_D3

Dalam mencari jawaban, Prolog melakukan pemadanan (unifikasi). Pada saat pemadanan, variabel akan mendapatkan nilai. Variabel yang belum mendapatkan nilai disebut variabel bebas (free variable) dan variabel yang sudah terikat dengan suatu nilai disebut variabel terikat (bound variable). Keterikatan ini bersifat sementara dan disebut juga instantiasi. Secara sederhana, instantiasi berarti berarti proses pengambilan fakta contoh (instance) dari sekumpulan fakta yang ada dan mengikatkan nilai variabel pada argumen yang sesuai secara sementara (selama belum ada lacak balik). Pada Prolog, keterikatan variabel hanya berlaku pada satu tahap pencarian jawaban. Nilai suatu variabel tidak dapat dimanfaatkan klausa lain tanpa adanya pemadanan dengan variabel yang dipakai klausa lain tersebut. b. Variabel tak bernama (anonymuous variable) Variabel tak bernama dilambangkan dengan tanda garis bawah/underscore (_). Variabel ini digunakan untuk suatu nilai yang diabaikan. Jadi, variabel ini tidak pernah akan terikat. Jika dipadankan dengan suatu nilai, variabel ini tidak pernah menyebabkan kegagalan, atau selalu sepadan (match).

Contoh:
direktur(heru, keuangan). direktur(joko, produksi). direktur(syarif, umum). direktur(didin, operasional).

Jika ingin menanyakan siapa saja yang jadi direktur, dengan mengabaikan direktoratnya, dalam Prolog ditulis:
direktur(Orang,_).

maka akan diperoleh jawaban:


Orang Orang Orang Orang = = = = heru joko syarif didin

Bagaimana jika dalam Prolog ditanyakan seperti ini:


direktur(_,Direktorat).

Menanyakan apakah keluarannya?

hal

itu?

Bagaimana

pula

hasil

BY TONI KHALIMI, S.SI

Page 6 of 12

ARTIFICIAL_INTELLIGENCE_D3

Varibel ini juga bisa dipakai untuk menyatakan kata setiap/semua, seperti: setiap orang mempunyai nama, dalam Prolog ditulis:
memiliki(_,nama).

4. Match Match atau serasi/sepadan dalam Prolog mengandung beberapa arti dalam perbandingan fakta, yakni: a. Struktur fakta yang sama/identik
orangtua(ali,husein) sepadan/identik orangtua(ali,husein).

dengan

b. Struktur sepadan untuk satu variabel


orangtua(ali,X).

dengan
orangtua(ali,husein).

Di sini, X akan terikat dengan husein bila X masih bebas. Jika X sudah terikat, misalnya dengan husein, maka kedua klausa di atas masih match. Ttp jika sudah terikat dengan nilai lain, tidak akan match atau gagal (fail).

c. Struktur sepadan untuk dua variabel


orangtua(X,husein).

dengan
orangtua(Y,husein).

Kedua variabel X dan Y masih bebas, maka akan terjadi penyatuan,n yakni jika nanti Y mendapat nilai, maka nilai itu pula yang dikandung X, demikian pula sebaliknya. Keterikatan ini disebut pula dengan freesharing variables, yakni keduanya masih bebas dan merupakan satu variabel. 5. Struktur Program Lazimnya, struktur program Turbo Prolog terdiri dari beberapa bagian pokok:
-

Bagian lain dari struktur program Turbo Prolog: Constants, Global dan petunjuk compiler.

Domains Predicates Clauses, dan Goal

Database,

BY TONI KHALIMI, S.SI

Page 7 of 12

ARTIFICIAL_INTELLIGENCE_D3

Domains
Bagian domain berisi deklarasi tipe/jenis data, jadi seperti deklarasi type dalam Pascal. Di bagian ini, kita menyatan jenis suatu variable atau argument. Contoh:
Domains NamaOrang Alamat PanjangSisi LuasLingkaran L_alamat = = = = = symbol string integer real alamat*

Deklarasi L_alamat = alamat* menyatakan bahwa L_alamat merupakan list dari alamat. Jika ada dua domain sejenis, maka cara menulisakannya dipisahkan dengan tanda koma (,). Contoh: Alamat, Jabatan = string Deklarasi domain di atas digunakan untuk predikat misalnya
data(NamaOrang,Alamat)

Domain dalam suatu predikat adalah milik argument pada posisi yang ditempati domain dalam predikat tersebut. Deklarasi domain membedakan suatu domain buatan (yang dideklarasikan) dari domain buatan yang lain, meskipun berasal dari domain standar yang sama. Jika kita tidak menggunakan domains sendiri, kita hanya boleh menggunakan domain standar, seperti:
data(string,string)

Domain standar (baku) Turbo Prolog adalah sebagai berikut: a. symbol Berupa rangkaian huruf asalkan karakter pertama berupa huruf kecil, angka, dan garis bawah serta tidak mengandung spasi/karakter khusus. b. string Rangkaian karakter yang diapit dalam tanda petik ganda (). Panjang maksimum sebuah string adalah 255 karakter. Jika string tersebut dari file atau terkandung dalam program, bisa mencapai 64 kByte. Contoh suatu string:
Fakultas Ilmu Komputer UNIKU

c. integer Bilangan bulat : -32.768 sampai dengan 32.767. Bilangan bulat basis 16 (hexadecimal) diawali dengan tanda dolar ($).

BY TONI KHALIMI, S.SI

Page 8 of 12

ARTIFICIAL_INTELLIGENCE_D3

d. real Bilangan riil : 1 x 10-307 sampai dengan 1 x 10-308 (1e-307 sampai dengan 1e-308). Jika bilangan bulat diberikan pada argument riil, maka akan langsung diubah ke riil.

Predicates
Predikat harus dideklarasikan pada bagian Predicates dan mendefinisikannya dalam bagian Clauses. Jika tidak, Turbo Prolog tidak akan mengenalnya. Nama predikat harus diawali dengan huruf, boleh huruf besar (tidak dianjurkan) atau huruf kecil, selebihnya bisa huruf, angka, atau garis bawah. Nama predikat tidak boleh mengandung spasi, tanda minus, asterisk atau garis miring. Deklarasi predikat dalam bagian Predicates harus juga disertai argument jika memang berargumen. Jumlah argument dalam predikat disebut aritas (arity). Satu predikat boleh memiliki aritas yang berbeda asal harus dikelompokkan dalam bagian clausesnya.
anggota(Nama) anggota(Nama,Alamat)

Jenis argument suatu predikat boleh memiliki domain yang berbeda, seperti:
anggota(nomor,alamat) anggota(nomor,nama)

Predikat yang sudah didefinisikan berargumen X dengan domain Xd tidak dapat mengalihkan nilai (nilai X) untuk argument predikat lain dengan domain Yd meskipun Xd dan Yd berdomain standar sama.
Domains anggota = string nama = string nomor = integer Predicates menu(nomor,nama) tulis(anggota) clauses menu(No,Nm):-tulis(Nm),

Program ini salah karena Nm dalam predikat menu berdomain nama, sedangkan dalam predikat tulis berdomain anggota. Untuk itu salah satu predikat harus berdomain lebih dari satu, menjadi seperti:
menu(nomor,nama) menu(nomor,anggota)

Bagian predikat harus ada selama kita membutuhkan predikat bukan standar.

BY TONI KHALIMI, S.SI

Page 9 of 12

ARTIFICIAL_INTELLIGENCE_D3

Clauses
Merupakan inti program Turbo Prolog. Boleh juga tanpa Clauses tapi tentunya goal hanya terdiri dari predikat standar. Jika ada bagian Clauses harus ada bagian Predicates begitu juga sebaliknya. Sekumpulan klausa dari predikat yang sama harus disatukan (dikelompokkan) dalam bagian Clauses dan disebur prosedur (procedure). Bila melakukan pemanggilan klausa atau matching, Turbo Prolog melacaknya dari atas ke bawah. Jika Prolog menemukan bandingan atau kalusa yang match, Prolog mencatat tempat ditemukannya. Dengan demikian, urutan prosedur harus benar untuk menjaga agar Turbo Prolog dapat mencari jawaban dengan benar dan juga menentukan kecepatan eksekusi program.

Goal
Goal dalam Turbo Prolog ada dua macam: a. Goal eksternal (external goal) Merupakan goal yang diketikkan langsung pada prompt Goal: di jendela Dialog pada compiler terpadu Turbo Prolog. b. Goal internal (internal goal) Goal ini diketikkan pada bagian Goal di dalam program Turbo Prolog. Hakekatnya goal ini sama seperti tubuh suatu kalusa atau dalam hal ini aturan, yang hanya terdiri dari satu atau lebih upa-goal, tanpa kepala, karenanya tidak menggunakan if (:-). Cara menuliskan goal contoh:
Goal write(Tulis kalimat apa saja, kemudian Enter\n), readln(X), write(X),

Prolog selalu berusaha agar goal bisa tercapai, dan sebaliknya kita pun berusaha agar program berhenti dalam keadaan berhasil.

Komentar
Komentar satu baris digunakan tanda persen (%). Sedangkan untuk komentar yang lebih dari satu baris digunakan paduan tanda garis miring (/) dan asterisk (*). Contoh:
% % ini komentar satu baris, baris pertama ini komentar satu baris, baris kedua

BY TONI KHALIMI, S.SI

Page 10 of 12

ARTIFICIAL_INTELLIGENCE_D3

/* * * * * /* */

ini komentar beberapa baris, awal komentar

akhir komentar */ ini komentar bersarang (nested) /* komentar dalam komentar adalah seperti ini */

Dengan goal internal ini, sekali goal tercapai, Prolog tidak mencari alternative jawaban yang lain, berbeda dengan goal eksternal yang selalu berusaha mencari jawaban lain sampai habis (jika goal yang diajukan berupa fakta). Bagian constants disediakan untuk mendeklarasikan nilai konstanta yang biasanya dipakai berulang-ulang. Dibagian ini kita memberi nama secara simbolik pada suatu konstanta dengan format: nama_simbolik = definisi_konstanta Dalam constants, harus ada satu deklarasi dalam satu baris. constants part_1 pi = $3D8 = 3.141592653

seratus = (10 * (10-1) + 10) Beberapa kendala dalam penggunaan konstanta: 1. Definisi konstanta tidak boleh memanggil dirinya, misalnya: Sistem tidak bersifat case sensitive. Jika nama konstanta no_ini = 2 * no_ini / 2

2.

digunakan dalam klausa, huruf pertamanya harus huruf kecil (dalam deklarasi boleh menggunakan huruf besar) untuk menghindari kekeliruan antara nama konstanta dengan nama peubah.

3.
4.

Boleh ada lebih dari satu bagian constants di dalam program, Nama konstanta bersifat global dan hanya dapat sekali

tetapi harus dideklarasikan sebelum dipakai. dideklarasikan.

BY TONI KHALIMI, S.SI

Page 11 of 12

ARTIFICIAL_INTELLIGENCE_D3

BY TONI KHALIMI, S.SI

Page 12 of 12

You might also like