TS2023 – Sistem Cerdas
BAB 2 SINTAK DAN SEMANTIK PROLOG Pengenalan Setelah anda mendapat gambaran umum tentang bahasa pengaturcaraan Prolog dalam bab sebelum ini, seterusnya kita akan beralih kepada sintak dan semantik yang disediakan oleh Prolog. Sintak merujuk kepada objek data yang disediakan oleh Prolog dan bagaimana operasi padanan dilaksanakan terhadap objek data ini. Semantik pula memberi penghuraian dari segi makna deklaratif dan makna prosidur bagi sesuatu aturcara Prolog Secara ringkasnya, bab ini memberi penekanan yang sistematik terhadap konsep asas Prolog dari segi sintak dan semantik, juga memperkenalkan objek data berstruktur. Topik-topik merangkumi: • Objek data mudah (atom, nombor, pemboleh ubah) • Objek berstruktur • Padanan sebagai operasi asas bagi objek
Objektif Di akhir bab ini anda dapat: 1. Mengetahui pengkelasan objek data dalam Prolog. 2. Mengetahui operasi padanan yang dilaksanakan terhadap objek data. 3. Membezakan semantik aturcara Prolog dari aspek deklaratif dan prosidur.
2.1 Objek Data Rajah 2.1 menunjukkan pengkelasan objek data dalam Prolog. Prolog mengenali sesuatu jenis objek dalam program melalui bentuk sintatik. Oleh itu, terdapat perbezaan format sintatik untuk setiap jenis objek data yang disediakan oleh sistem Prolog.
13
TS2023 – Sistem Cerdas
objek data
objek mudah
pemalar
atom
struktur
pembolehubah
nombor Rajah 2.1: Objek data dalam Prolog
2.1.1 Atom dan Nombor Satu atom adalah unit terkecil yang diberi maklumat dalam aturcar Prolog. Atom boleh dibina dalam tiga cara iaitu: 1. Rentetan abjad, digit dan aksara baris bawah (underscore) dan atom mesti bermula dengan huruf kecil. Atom ini dikenali sebagai konstan. Contohnya: ahmad fatima a123 a_123 sains_komputer kecerdasan_buatan 2.
Rentetan untuk aksara istimewa. Contohnya: ==== < = = = => .:. <-> Perhatian hendaklah diberikan apabila menggunakan aksara ini kerana terdapat sesetengah akasara istimewa yang telah ditekrifkan terlebih dahulu dalam bahasa pengaturcaraan Prolog seperti tanda ‘:-‘. 3. Rentetan untuk aksara yang dikurungi oleh satu quotes. Selalunya diguna sekiranya ingin memulakan satu atom dengan satu huruf besar. Contohnya: 'AHMAD' 'Universiti Kebangsaan Malaysia'
'Malaysia' 'Kecerdasan_Buatan'
Nombor yang diguna dalam Prolog terdiri daripada nombor integer, dan nombor nyata. Sintak bagi nombor integer adalah seperti contoh berikut: 1
123
-123
0
Tidak semua nombor integer boleh diwakilkan dalam komputer. Oleh yang demikianjulat nombor integr dihadkan di antara nombor yang paling kecil dan nombor yang paling besar 14
TS2023 – Sistem Cerdas
bergantung pada jenis implementasi Prolog. Pada kebiasaannya, julat yang dibenarkan ialah – 16383 dan 16383. Nombor nyata juga bergantung pada implementasi Prolog. Sintak bagi nombor nyata adalah seperti contoh berikut: 1.0
0.1
-10.9 100.991
0.00
Nombor nyata tidak diguna secara meluas dalam pengaturcaraan Prolog kerana Prolog merupakan satu bahasa pengaturcaraan untuk masalah simbolik dan pengiraan bukan numerik. Untuk pengiraan simbolik, nombor integer biasanya diguna sebagai contoh untuk mengira bilangan item dalam senarai tetapi masih terdapat keperluan yang minimum dalam penggunaan nombor nyata.
2.1.2 Pembolehubah Satu pembolehubah mewakili satu elemen tidak spesifik dalam dunia. Ia tidak mempunyai satu nilai yang jelas dan mengambil sebarang nilai yang diperlukan. Pembolehubah adalah rentetan yang terdiri dari abjad, digit dan aksara baris bawah. Pembolehubah mesti bermula dengan huruf besar. Contohnya: Ahmad Fatima A123 A_123 Sains_komputer _saya Sekiranya satu pembolehubah muncul dalam klausa sekali sahaja (tidak perlu khuatir sama ada nilainya digunakan atau tidak), ia tidak perlu diberi nama. Pemboleubah tersebut diberi nama sebagai 'pemboleubah hantu' atau anonymous variable dan ia ditulis sebagai satu aksara baris bawah sahaja. Sebagai contoh, pertimbangkan peraturan di bawah: ada_anak(X) :- ibubapa(X,Y) {X mempunyai anak sekiranya X adalah ibubapa Y} Peraturan ini menyatakan bahawa: Untuk semua X, X mempunyai anak jika X adalah ibubapa kepada Y. Kita telah mentakrifkan satu cirri untuk hubungan ada_anak iaitu ia tidak bergantung kepada nama anak. Oleh yang demikian, adalah lebih baik untuk menggunakan pembolehubah hantu. Klausa di atas boleh ditulis semula sebagai: ada_anak(X) :- ibubapa(X,_) {Tidak perlu tahu nama anak } Setiap kali aksara baris bawah diguna dalam klausa, ia mewakili pembolehubah hantu yang baru. Sebagai contoh, kita boleh katakana bahawa seseorang itu mempunyai anak jika terdapat dua objek dan satu objek itu merupakan ibubapa kepada objek yang lagi satu. Klausa ini boleh ditulis sebagai:
15
TS2023 – Sistem Cerdas
seseorang_ada_anak(X) :- ibubapa(_,_). Adalah setara jika ditulis sebagai: seseorang_ada_anak(X) :- ibubapa(X,Y). Skop leksikal bagi satu pembolehubah adalah satu klausa. Sebagai contoh, sekiranya pembolehubah X15 muncul dalam dua klausa, maka ia menunjukkan dua pembolehubah yang berbeza. Tetapi, setiap kemunculan X15 dalam satu klausa yang sama, bermakna pembolehubah itu mempunyai satu maksud yang sama.
2.2 Objek Berstruktur Struktur adalah objek yang mengandungi satu atau lebih komponen. Komponen struktur bagi sesuatu objek juga boleh terdiri daripada struktur. Sebagai contoh tarikh boleh digambarkan sebagai satu struktur yang terdiri daripada tiga komponen: hari, bulan dan tahun. Walaupun digubah dalam bentuk komponen, struktur masih juga dirujuk oleh aturcara Prolog sebagai satu objek. Untuk menggabungkan kesemua komponen kepada satu objek, kita perlu menggunakan functor iaitu satu simbol yang mempunyai sintaks yang sama seperti atom. Functor yang sesuai bagi contoh di atas ialah tarikh. Dengan itu tarikh 20 November 1966 boleh ditulis sebagai: tarikh(20, november,1966). Struktur tarikh boleh digambarkan seperti Rajah 2.2 dan Rajah 2.3 di bawah. tarikh
20
november
1966
Rajah 2.2: Tarikh sebagai contoh objek berstruktur dalam bentuk pohon tarikh(20,november,1966)
functor
argumen
Rajah 2.3: Tarikh sebagai contoh objek berstruktur dalam Prolog
16
TS2023 – Sistem Cerdas
Komponen dalam struktur tarikh terdiri daripada dua integer dan satu atom. Komponen juga boleh terdiri daripada pembolehubah dan struktur lain. Sebarang hari dalam bulan November boleh diwakilkan dalam struktur sebagai: tarikh(Hari, november, 1966). Perhatikan Hari adalah pembolehubah dan boleh digantikan dengan sebarang objek semasa pelaksanaan aturcara Prolog. Kaedah penstrukturan sata ini ringkas dan berkesan. Ini merupakan salah satu sebab mengapa Prolog diguna dalam masalah yang melibatkan manipulasi simbolik. Secara sintaknya, semua objek data dalam Prolog dikenali sebagai terms. Contohnya november dan tarikh(20,november,1966). Kesemua objek berstruktur boleh digambarkan dalam bentuk pohon (rujuk Rajah 2.2). Akar bagi pohon adalah functor, dan anak kepada akar adalah komponen. Jika komponen juga merupakan satu struktur, maka akan terdapat subpohon bagi keseluruhan objek berstruktur tersebut. Struktur yang berbeza boleh menggunakan nama functor yang sama. Sistem Prolog dapat mengenalpasti perbezaan di antara struktur ini mengikut bilangan komponen dan seterusnya menterjemahkan nama functor ini sebagai nama yang berbeza. Ini adalah kerana setiap functor ditakrifkan oleh dua perkara iaitu: (1) nama iaitu sintaknya adalah atom (2) ariti iaitu bilangan argumen Berikut adalah contoh dua struktur yang mempunyai nama functor yang sama tetapi berbeza dari segi bilangan argumen. Sistem Prolog akan menterjemahkan struktur ini sebagai dua struktur yang berbeza kerana bilangan argumen untuk struktur yang pertama ialah tiga dan bilangan argumen untuk struktur yang kedua ialah dua. ibubapa(aliya,johan,suhaila). ibubapa(johan, suhaila). Kedua-dua struktur dikatakan serupa sekiranya mengandungi nama functor dan bilangan ariti yang sama.
2.3 Padanan Dalam seksyen yang lepas, kita telah lihat bagaimana terms diguna untuk mewakili objek data. Operasi penting bagi terms ialah padanan. Jika diberi dua terms, kita katakan kedua-duanya berlaku padanan apabila: (1) kedua-dua terms sama (2) pembolehubah bagi kedua-dua terms boleh diwakilkan kepada objek dalam keadaan di mana selepas penggantian pembolehubah kepada objek, terms menjadi sama. Sebagai contoh, terms tarikh(H,B,1966) dan tarikh(H1,November,Y1) adalah sepadan. Satu perwakilan yang membuatkan kedua-dua terms sama ialah: 17
TS2023 – Sistem Cerdas
• D diwakilkan kepada D1 • M diwakilkan kepada november • Y1 diwakilkan kepada 1966 Sebaliknya, terms tarikh(H,B,1966) dan tarikh(H1,B1,1997) tidak sepadan kerana 1996 tidak sama dengan 1997 walaupun H boleh digantikan dengan H1 dan B boleh digantikan dengan B1.Begitu juga dengan terms tarikh(X,Y,Z) dengan titik(X,Y,Z) adalah tidak sepadan kerana nama hubungan atau predikat tidak sama walaupun nama argumen iaitu X, Y, Z dan bilangan ariti sama bagi kedua-dua predikat tarikh dan titik tersebut. Padanan merupakan proses yang mengambil input dua terms dan menyemak sama ada sepadan atau tidak. Jika terms tidak sepadan, kita katakan proses padanan gagal. Jika kedua-dua input sepadan, kita katakan proses padanan ini berjaya dan pembolehubah dalam kedua-dua terms akan diwakilkan dengan nilai yang sepadan bagi membolehkan kedua-duannya terms tersebut sama. Kita pertimbangkan semula padanan dua terms tarikh dan lakukan pertanyaan dalam Prolog dengan menggunakan operator ‘=’. ?-tarikh(H,B,1966) = tarikh(20,november,T1). Prolog akan menberi jawapan: H = 20 B = november T1 =1966 Peraturan umum untuk menentukan bahawa dua terms, S dan T sepadan ialah: (1) Jika S dan T adalah konstan, maka S dan T sepadan hanya jika kedua-duanya adalah objek yang sama. (2) Jika S adalah pemboleh ubah dan T adalah sebarangan, maka kedua-duanya akan sepadan dan S diwakilkan dengan T. Jika T pula merupakan pemboleh ubah, maka T akan diwakilkan dengan S. (3) Jika S dan T adalah struktur, maka kedua-duanya akan sepadan hanya jika: (a) S dan T mempunyai nama functor yang sama dan (b) semua komponen yang bersesuaian bagi S dan T adalah sama.
18
TS2023 – Sistem Cerdas
2.4 Rumusan Sehingga kini anda telah mempelajari objek-objek mudah dalam Prolog seperti atom, pembolehubah dan nombor. Objek berstruktur pula diguna untuk mewakilkan objek yang mengandungi beberapa komponen. Di samping itu Bab 2 juga membincangkan proses padanan yang dilakukan bagi menggantikan sesuatu terms dengan terms yang lain dan memperolehi jawapan daripada pertanyaan yang dikemukakan dalam bahasa pengaturcaraan Prolog. Bab seterusnya akan mengenengahkan cara-cara memulakan pengaturcaraan dalam persekitaran Prolog.
Latihan 1.
Terangkan dengan ringkas jenis-jenis objek data.
2.
Bagi setiap objek di bawah, nyatakan jenis objek data tersebut samada atom, nombor, pemboleh ubah atau struktur. a. Aisyah b. aisyah c. ‘Aisyah’ d. _aisyah e. makan(aisyah,nasi) f. 91
3.
Bagaimanakan proses padanan dilakukan dalam aturcara Prolog.
19