TS2023 - Sistem Cerdas
BAB 1 PENGENALAN KEPADA PROLOG Pengenalan Unit ini agak berbeza dengan unit-unit yang lain dalam modul ini kerana ia lebih memberi penekanan kepada aspek pengaturcaraan dengan menggunakan bahasa pengaturcaraan Prolog. Pelajar diingatkan supaya dapat memisahkan kefahaman pelajar tentang bahasa pengaturcaraan konvensional seperti Pascal atau bahasa C dengan pengaturcaraan logik yang akan dibincangkan secara umum dalam Bab 1 dan diperincikan dalam keseluruhan bab seterusnya dala unit ini. Dalam bab ini, pelajar akan diberi gambaran umum tentang bahasa pengaturcaraan Prolog di samping membincangkan perbezaan di antara Prolog dengan bahasa pengaturcaraan konvensional. Mekanisma asas Prolog juga diketengahkan menerusi contoh aturcara mudah Prolog.
Objektif Di akhir bab ini anda dapat: 1. Mengetahui sejarah ringkas dan kegunaan bahasa pengaturcaraan Prolog. 2. Mengenalpasti perbezaan di antara bahasa pengaturcaraan Prolog dengan bahasa pengaturcaraan konvensional. 3. Mendapat gambaran umum tentang aturcara Prolog melalui contoh aturcara mudah.
1.1 Apakah Prolog Pernahkan anda melihat atau mendengar perkataan Prolog? Prolog adalah singkatan daripada PROgramming in LOGic. Ia merupakan satu ide yang dicetuskan pada awal 1970an untuk menggunakan logik sebagai bahasa pengaturcaraan. Mereka yang bertanggungjawab dalam pembangun awal ide ini ialah Robert Kowalski dari Edinburgh dalam aspek teori dan Colmerauer dari Marseilles dalam aspek implementasi. Bilakah bahasa Prolog sesuai untuk diguna? Prolog biasanya dikaitkan dengan logik bermantik dan ia merupakan bahasa pengaturcaraan untuk pengiraan simbolik dan tak-berangka. Ia paling sesuai untuk menyelesaikan masalah yang berkaitan dengan objek dan hubungan antara objek, masalah padanan corak, masalah penjejakan ke belakang dan masalah yang maklumatnya tidak lengkap.
1
TS2023 - Sistem Cerdas
Alkwarizmi dalam Prolog terdiri daripada logik dan kawalan. Logik merupakan fakta dan peraturan yang menerangkan apa yang yang patut dilakukan oleh alkhawarizmi. Kawalan pula merupakan cara alkhawarizmi boleh diimplementasikan dengan menggunakan peraturan. Sintaks yang dibentuk dalam Prolog adalah dalam bentuk klausa atau formula First Order Predicate Logic.
1.2 Perbezaan di antara pengaturcaraan Prolog dengan konvensional Pengaturcaraan Prolog Pengaturcara mentafsirkan APA masalah yang hendak diselesaikan menggunakan logik. Komputer menghasilkan jujukan arahan mengikut tertib yang ditentukan oleh pengaturcara.
Pengaturcaraan Konvensional Pengaturcara mengarahkan komputer BAGAIMANA menyelesaikan masalah . Sistem mengaplikasikan peraturan logik, deduksi dan padanan dalam menyelesaikan sesuatu masalah.
Oleh itu, Prolog juga dikenali sebagai pengaturcaraan paras tinggi.
1.3 Contoh Aturcara Mudah Kita akan melihat satu contoh aturcara mudah bagi membantu pelajar mendapat sedikit gambaran bagaimana aturcara dalam bahasa pengaturcaraan Prolog dikodkan. Rajah 1.1 di bawah menunjukkan contoh satu hubungan keluarga. Cuba pelajar bayangkan hubungan atau pertalian dalam hubungan masing-masing yang terdiri daripada ibubapa pakcik, makcik, adik, abang, kakak, sepupu dan sebagainya. Fakta yang menunjukkan ali ibubapa kepada Abu boleh ditulis dalam Prolog sebagai: ibubapa(ali,abu). siti
ali
abu
ani
rini
alia
adri
2
TS2023 - Sistem Cerdas
mat
Rajah 1.1: Pohon Keluarga Di sini kita memilih ibubapa sebagai nama hubungan: ali dan abu adalah argumen. Disebabkan oleh alasan tertentu yang akan dibincangkan kemudian, kita menulis nama seperti ali dan abu dengan menggunakan huruf kecil. Keseluruhan pohon keluarga dalam Rajah 1.1 boleh ditarifkan dalam aturcara Prolog sebagai: ibubapa(siti,abu). ibubapa(ali,abu). ibubapa(ali,rini). ibubapa(abu,ani). ibubapa(abu,alia). ibubapa(alia,mat). ibubapa(rini,adri). Setiap pernyataan, contohnya ibubapa(siti,abu) dikenali sebagai klausa dan perlu diakhiri dengan tanda noktah. Jadi aturcara ini mengandungi tujuh klausa. Setiap klausa mentakrifkan satu fakta mengenai hubungan ibubapa. Sebagai contoh, ibubapa(ali,abu) merupakan satu contoh hubungan ibubapa. ibubapa dikenali sebagai predikat yang mewakili perhubungan di antara elemen.
Apabila aturcara ini dihubungkan dengan sistem Prolog, Prolog boleh diajukan dengan beberapa soalan berkaitan dengan hubungan ibubapa. Sebagai contoh: Adakah Abu ibubapa kepada Alia? Soalan ini boleh dihubungkan dengan sistem Prolog dengan menaip soalan di bawah pada terminal komputer dengan andaian komputer pelajar telah dilengkapi dengan penterjemah Prolog. Pelajar tidak perlu risau tentang penulisan aturcara dan penterjamah Prolog kerana aspek ini akan dibincangkan dengan lebih terperinci dalam Bab 3. ?- ibubapa(abu,alia). Fakta ini telah sedia ada dalam aturcara. Prolog akan memberi jawapan: Yes
3
TS2023 - Sistem Cerdas
Soalan seterusnya mungkin: ?-ibubapa(rini,alia). Prolog akan memberi jawapan: no kerana aturcara tidak menyatakan sebarang fakta bahawa Rini merupakan ibubapa kepada Alia. Prolog juga memberi jawapan ‘tidak’ kepada soalan: ?-ibubapa(ali,ahmad). kerana aturcara tidak mengandungi sebarang nama Ahmad. Pelajar juga boleh menanyakan soalan yang lebih menarik juga boleh ditanya. Sebagai contoh: Siapa ibubapa kepada Rini? ?-ibubapa(X,rini). Contoh soalan ini agak berbeza dengan contoh soalan di atas. Pelajar akan mendapati bahawa Prolog bukan sahaja ‘ya’ atau ‘tidak’ untuk kes ini. Prolog akan memberitahu kita apakah nilai bagi X supaya pernyataan di atas itu benar. Jadi, jawapannya ialah: X = ali Bagi soalan siapakah anak kepada Abu atau Abu merupakan ibubapa kepada siapa? boleh dihubungkan dengan Prolog sebagai: ?-ibubapa(abu,X). Sekarang, jika pelajar meneliti kembali pohon keluarga pada Rajah 1.1, pelajar akan mendapati Abu merupakan ibubapa kepada Ani dan Alia. Dalam contoh ini terdapat lebih daripada satu penyelesaian. Kalau pelajar masih ingat, contoh-contoh sebelum ini hanya melibatkan satu penyelesaian sahaja. Ini agak berbeza dengan contoh sekarang. Apabila soalan ini diajukan kepada sistem Prolog, Prolog akan memaparkan penyelesaian pertama dahulu iaitu: X = ani Bagi mendapatkan penyelesaian seterusnya (dalam kebanyakan implementasi Prolog, pelajar dikehendaki menaip semikolon (;)) selepas penyelesaian pertama X=ani, Prolog akan memberikan penyelesaian yang kedua. X = alia Jika kita meminta penyelesaian lain lagi iaitu dengan menaip semikolion (;) selepas perkataan alia, maka Prolog akan memberi jawapan ‘tidak’ kerana semua penyelesaian telah habis.
4
TS2023 - Sistem Cerdas
Aturcara kita juga boleh diajukan soalan yang lebih umum: Siapa ibubapa kepada siapa? Formula lain kepada soalan ini boleh ditulis dalam ayat mudah sebagai: Cari X dan Y supaya X adalah ibubapa kepada Y. Ini boleh dinyatakan dalam Prolog sebagai: ?-ibubapa(X,Y). Sekarang Prolog akan mencari semua pasangan ibubapa-anak satu per satu. Penyelesian akan dipaparkan satu per satu selagi kita memberitahu Prolog yang kita memerlukan penyelesaian lain iaitu dengan menaip semikolon (;), sehingga semua penyelesaian telah dijumpai. Jawapan yang dipaparkan ialah: X = siti Y = abu; X = ali Y = abu; X = ali Y = rini; …. Contoh aturcara kita juga boleh ditanya dengan soalan yang lebih kompleks seperti: Siapa datuk atau nenek kepada Mat? Jika pelajar perhatikan, aturcara ini tidak mengetahui secara langsung tentang hubungan datuknenek. Maka pertanyaan yang dikemukakan itu perlu dipecahkan kepada dua langkah iaitu : (1) Siapa ibubapa kepada Mat? Andaikan Y. (2) Siapa ibubapa kepada Y? Andaikan X. Ini dapat digambarkan dalam Rajah 1.2 di bawah. X ibubapa Y
datuknenek
ibubapa mat
5
TS2023 - Sistem Cerdas
Rajah 1.2: Hubungan datuknenek digambarkan sebagai gabungan dua hubungan ibubapa Maka, pertanyaan ini ditulis dalam Prolog sebagai satu jujukan yang terdiri daripada dua pertanyaan mudah: ?-ibubapa(Y,mat),ibubapa(X,Y). Jawapannya ialah: X = alia Y = abu Pertanyaan yang digubah itu boleh dibaca: Cari X dan Y yang memenuhi keperluan di bawah: ibubapa(Y,mat) dan ibubapa (X,Y) Seterusnya, soalan-soalan lain yang boleh ditanya oleh pelajar ialah: Adakah Ani dan Alia mempunyai ibubapa yang sama? Ini sekali lagi boleh digambarkan dalam dua langkah: (1) Siapa ibubapa kepada Ani? Andaikan X. (2) Adakah X (yang sama) ibubapa kepada Alia? Pertanyaan yang bersesuaian dalam Prolog ialah: ?-ibubapa(X,ani),ibubapa(X,alia). Jawapannya ialah: X = abu Contoh lain penggunaan Prolog ialah bagi menerangkan dunia objek dan hubungan antara objek. Sebagai contoh, bagi penerangan dunia Aliya dan Hasan seperti di bawah. Dunia Aliya dan Hasan Power_Rangers adalah patung. Snoopy adalah patung Aliya bermain dengan Snoopy. Aliya suka setiap patung yang dia main. Hasan suka apa yang Aliya suka. Diterjemah dalam Prolog patung(power_rangers). patung(snoopy). main(aliya, snoopy) suka(aliya,X):- patung(X), main(aliya,X). suka(hasan,Y):- suka(aliya,Y). 6
TS2023 - Sistem Cerdas
1.4 Fakta dan Peraturan Fakta dan peraturan merupakan dua perkara yang saling berkait dan diperlukan apabila menulis aturcara Prolog. Apakah fakta? Satu fakta mewakili satu unit informasi yang sentiasa dikatakan benar. Contohnya: Langit itu biru langit(biru). Hari sedang hujan. hari(hujan). Sim suka epal. suka(sim,epal). Sim suka buku. suka(sim,buku). Siti suka buku suka(siti,buku). Apakah pula peraturan? Satu peraturan mengungkap satu perhubungan di antara fakta-fakta dengan menggunakan implikasi logikal :-. Ia mewakili satu penegasan bersyarat (conditonal assertion). Kita boleh mewujudkan berbagai jenis hubungan atau predikat dalam aturcara. Contohnya daripada fakta di atas, kita boleh wujudkan satu hubungan kawan berdasarkan pada pernyataan: Sebarang X dan Y adalah kawan jika Wujud satu Z dengan X suka Z dan Y juga suka Z Cuba pelajar perhatikan apakah yang dimaksudkan dengan X, Y dan Z ini? Sebenarnya X, Y dan Z merupakan pembolehubah yang akan dibincangkan dengan lebih terperinci dalam Bab 2. Pembolehubah ini boleh mewakili atau mengambil sebarang nilai. Jadi, jika kita menganggap sim = X , siti = Y, maka mengikut peraturan di atas dan dengan menggunakan dua fakta: Sim suka buku Siti suka buku
suka(sim,buku). suka(siti,buku).
Pelajar akan mendapati sistem Prolog boleh membuktikan bahawa Sim dan Siti adalah kawan kerana keduanya-duanya suka kepada buku (dengan Z = buku). Jadi peraturan yang boleh dihasilkan dalam Prolog ialah: kawan(sim,siti) :- suka(sim, buku), suka(siti,buku).
1.5 Perluasan Aturcara Menggunakan Peraturan Contoh aturcara hubungan keluarga dalam bahagian 1.3 boleh diperluaskan dalam pelbagai cara. Andaikan kita ingin memasukkan maklumat tambahan jantina bagi setiap orang yang wujud
7
TS2023 - Sistem Cerdas
dalam hubungan ibubapa. Ini boleh dilakukan dengan menambah fakta berikut kepada aturcara kita: perempuan(siti). lelaki(ali). lelaki(abu). perempuan(rini). perempuan(ani). perempuan(alia). lelaki(mat). Hubungan yang diperkenalkan di sini ialah lelaki dan perempuan. Hubungan ini merupakan hubungan unari. Hubungan binari ialah hubungan ibubapa yang mentakrifkan hubungan di antara sepasang objek. Klausa unari yang pertama dibaca sebagai: Siti ialah perempuan. Perluasan yang pertama kepada aturcara ini ialah dengan memperkenalkan hubungan anak sebagai balikan kepada hubungan ibubapa. Kita boleh menakrifkan hubungan anak dengan cara yang sama seperti hubungan ibubapa iaitu dengan dengan memasukkan fakta tentang hubungan anak. Sebagai contoh: anak(rini,ali). Walau bagaimanapun, hubungan anak boleh ditakrifkan dengan cara yang lebih elok iaitu dengan mengguna pakai fakta dalam hubungan ibubapa. Cara alternatif ini berdasarkan pada pernyatan logikal di bawah: Untuk semua X dan Y Y adalah anak kepada X jika X adalah ibubapa kepada Y Klausa Prolog yang sepadan dengan pernyataan logikal di atas yang masih memberi makna yang sama ialah: anak(Y,X):- ibubapa(X,Y). Klausa ini juga boleh dibaca sebagai: Untuk semua X dan Y Jika X adalah ibubapa kepada Y maka Y adalah anak kepada X Klausa Prolog iaitu: anak(Y,X):- ibubapa(X,Y)
8
TS2023 - Sistem Cerdas
dikenali sebagai peraturan. Terdapat perbezaan di antara fakta dan petua. Fakta adalah seperti ibubapa(ali,rini) yang sentiasa benar. Sebaliknya, peraturan menetapkan sesuatu perkara itu benar jika syaratnya dipenuhi. Oleh itu, kita katakan bahawa peraturan mempunyai: • bahagian syarat (sebelah kanan peraturan) dan • bahagian kesimpulan (sebelah kiri peraturan). Bahagian kesimpulan juga dikenali sebagai kepala klausa dan bahagian syarat dikenali sebagai badan klausa. Sebagai contoh: anak(Y,X):- ibubapa(X,Y). kepala
badan
Jika syarat ibubapa(X,Y) benar, maka kesan logikalnya ialah anak(Y,X). Andaikan kita menanya aturcara kita samada Rini anak kepada Ali: ?-anak(rini,ali). Tidak terdapat fakta anak dalam aturcara. Oleh yang demikian, hanya terdapat satu cara untuk mempertimbangkan soalan ini ialah dengan menggunakan peraturan tentang anak. Peraturan ini perlulah sesuai untuk sebarang objek X dan Y, dengan itu ia juga sesuai untuk digunakan bagi sesuatu objek yang khusus seperti Rini dan Ali. Untuk mengimplementasikan peraturan bagi Rini dan Ali, Y perlu menggantikan Rini dan X menggantikan Ali. X = ali dan Y = rini Selepas penggantian, kita telah menghasilkan satu kes khusus daripada peraturan umum. Kes khusus ini ialah: anak(rini,ali):- ibubapa(ali,rini). Bahagian syarat telah menjadi: ibubapa(ali,rini). Sekarang Prolog cuba mencari samada bahagian syarat itu betul. Jadi, gol awal anak(rini,ali). Telah diganti dengan subgol: ibubapa(ali,rini).
9
TS2023 - Sistem Cerdas
Gol baru ini merupakan fakta dalam aturcara Prolog. Ini bermakna , bahagian kesimpulan peraturan juga benar, dan Prolog akan memberi jawapan ‘ya’. Sekarang, kita cuba tambahkan hubungan keluarga kepada aturcara. Spesifikasi untuk hubungan ibu boleh dihasilkan berdasarkan pernyataan logikal di bawah: Untuk semua X dan Y, X adalah ibu kepada Y jika X adalah ibubapa kepada Y dan X adalah perempuan. Ini boleh diterjemahkan kepda Prolog sebagai peraturan sepertii dibawah: ibu(X,Y) :- ibubapa(X,Y), perempuan(X).
X ibubapa
X anak
Y
ibubapa
perempuan
ibu Y
Rajah 1.3: Graf untuk hubungan ibubapa, anak dan ibu Nod dalam rajah ini menunjukkan objek iaitu argumen hubungan. Lengkuk di antara nod menunjukkan hubungan binari. Juga menunjukkan titik dari argumen pertama ke argumen kedua.
1.6 Makna Deklaratif dan Prosidur bagi Aturcara Dalam contoh aturcara sebelum ini, iaitu aturcara hubungan keluarga, kita dapati penyelesaian diperolehi dengan mudah tanpa perlu memahami bagaimana sebenarnya sistem mendapatkan penyelesaian tersebut. Oleh itu, bagi menangani keadaan ini, anda perlu untuk membezakan dua paras makna dalam aturcara Prolog iaitu: • makna deklaratif • makna prosidur Makna deklaratif hanya menumpukan kepada hubungan yang ditakrifkan dalam aturcara. Makna deklaratif akan menentukan apa yang aka menjadi output kepada aturcara. Sebaliknya, makna prosidur menentukan bagaimana output itu didapati iaitu bagaimana sebenarnya hubungan itu dinilai oleh sistem Prolog.
10
TS2023 - Sistem Cerdas
Prolog membenarkan pengaturcara mempertimbangkan makna deklaratif tanpa bergantung pada makna prosidur. Pendekatan deklaratif membuatkan pengaturcaraan dalam Prolog lebih mudah berbanding dengan bahasa pengaturcaraan berorientasikan prosidur seperti Pascal. Walau bagaimanapun, pendekatan deklaratif tidak selalunya mencukupi. Bagi aturcara yang besar, aspek prosidur tidak boleh secara langsung diabaikan oleh pengaturcara disebabkan oleh alasan kecekapan perlaksanaan.
1.7
Rumusan
Sehingga kini anda telah mengetahui apakah yang dimaksudkan dengan bahasa Prolog dan kegunaannya. Dua komponen yang menyokong bahasa Prolog ialah fakta dan peraturan yang juga telah disentuh secara ringkas dalam bab ini. Anda juga telah melihat beberapa bentuk kod aturcara Prolog dalam mentakrifkan aturcara hubungan keluarga sebelum anda didedahkan dengan cara mengekod dan melarikan aturcara Prolog yang dalam Bab 3, Bab 4 dan Bab 5 nanti.
Latihan 1.
Nyatakan perbezaan yang ketara di antara bahasa pengaturcaraan Prolog dengan bahasa pengaturcaraan konvensional.
2.
Berdasarkan kepada pertanyaan Prolog di bawah, apakah yang dimaksudkan dengan A dan B. ? ibubapa(A,B).
3.
Tuliskan pertanyaan dalam Prolog bagi mewakili ‘Siapakah anak kepada Rini’ dengan menggunakan hubungan ibubapa seperti yang dibincangkan dalam bahagian 1.3. Sila buat satu aturcara pokok keluarga masing-masing. Salasilah yang patut ada ialah: a. Ibu b. Bapa, c. Anak d. Nenek e. Datok f. Cucu Sila nyatakan sekali ujian sampel untuk setiap salasilah di atas.
4.
11