LOGIC PROGRAMMING
PROLOG adalah kependekan
dari PROgramming in LOGic,
yang berarti pemrograman logika. Pemrograman Prolog menggunakan bahasa
deklaratif, dimana pemrogram memberi fakta
dan aturan untuk
selanjutnya diselesaikan oleh Prolog secara deduktif sehingga menghasilkan
suatu kesimpulan. Hal ini berbeda dengan bahasa prosedural seperti Pascal,
Fortran, C, atau yang sejenis, dimana pemrogram memberi perintah atau penugasan
untuk memecahkan persoalan langkah demi langkah, sehingga sering disebut sebagai
programming with assignment. Disamping itu, berbeda dengan pemrograman
fungsional, pemrograman logika ini menggunakan relasi, bukan fungsi sehingga
sangat sesuai untuk implementasi sistem pakar.
LOGIKA PREDIKAT
Logika predikat (kalkulus predikat) merupakan
bagian dari komputasi logika yang juga mencakup aljabar Boole (logika
proposisional), dimana fakta dan aturan dinyatakan melalui predikat seperti:
Kalimat pertama menunjukkan adanya fakta bahwa Joko
adalah seorang lelaki, dan kalimat kedua menyatakan bahwa Joko menikah dengan
Tuti. Kalimat ketiga dan keempat menunjukkan suatu aturan atau kaidah yang umum
berlaku, bahwa untuk setiap pasang orang x dan y, jika x menikah dengan y dan x
adalah lelaki, maka dapat dipastikan
bahwa y adalah bukan seorang lelaki. Sedangkan kalimat terakhir manyatakan
bahwa untuk setiap y, ada x sehingga jika y adalah orang maka y mempunyai seorang ibu x (x ibu dari
y).
Simbol predikat yang digunakan dalam
kalimat-kalimat tersebut adalah lelaki, menikah, orang,
dan ibu yang sering disebut sebagai relasi, sedangkan Joko dan
Tuti disebut sebagai simbol konstanta.
BAHASA DEKLARATIF
Seperti yang dijelaskan sebelumnya bahwa pokok
perbedaan Prolog dari bahasa lain adalah karena bersifat deskriptif atau
deklaratif, sedang bahasa lain umumnya bersifat prosedural atau imperatif.
Sebagai bukti bahwa Prolog merupakan bahasa
deklaratif adalah dalam menyatakan fakta dan aturan seperti berikut:
1.
Jika ingin menyatakan
bahwa Prawiro adalah bapak dari Joko, maka dalam Prolog dituliskan sebagai:
bapak(prawiro, joko).
2.
Jika ingin menerangkan
suatu kaidah bahwa A adalah kakek dari Z maka harus dibuat dahulu logika dalam
bahasa Indonesia sehingga menjadi suatu aturan seperti berikut:
A adalah kakek dari Z jika A adalah bapak dari X dan X adalah bapak Z
Atau
A adalah kakek dari Z jika A adalah bapak dari X dan X adalah ibu Z
Aturan tersebut ditulis dalam Prolog sebagai:
kakek(A,Z) :- bapak(A,X), bapak(X,Z).
kakek(A,Z) :- bapak(A,X), ibu(X,Z).
DASAR PEMROGRAMAN PROLOG
Pada bagian ini akan diuraikan dasar-dasar
pemrograman Prolog, aturan umum penulisan program, bagaimana melakukan dialog
dengan Prolog, dan beberapa pengertian dasar yang berkaitan dengan program
Prolog.
Fakta
Fakta adalah suatu kenyataan atau kebenaran yang
diketahui, dan menyatakan hubungan
(relasi) antara dua atau lebih obyek. Fakta dapat
pula menunjukkan sifat suatu obyek.
Contoh sederhana adalah: bapak(prawiro, joko).
merah(darah).
asin(garam).
Aturan
Aturan merupakan logika yang dirumuskan dalam
bentuk relasi sebab-akibat dan hubungan implikasi.
Misalnya dapat dibuat aturan bahwa jika A
adalah bapak dari X
dan
X
adalah bapak atau ibu dari Z
maka dapat dipastikan bahwa A
adalah kakek dari Z.
Contoh untuk ini adalah:
kakek(A,Z) :- bapak(A,X), bapak(X,Z).
kakek(A,Z) :- bapak(A,X), ibu(X,Z).
Klausa (clause)
Aturan yang ditulis ini berupa klausa (clause)
dan terdiri dari kepala (kakek) dan tubuh yang dipisahkan oleh tanda
: - (bapak dan ibu).
Klausa adalah suatu frase (ungkapan)
Power Domain (Daerah Tenaga)
Teori Set menyediakan suatu notasi elegan untuk uraian
perhitungan.
Keluarga bahasa Pascal menyediakan set
gabungan dan simpangan dan keanggotaan set.
Set dari semua subsets dari sebuah set adalah set tenaga dan
digambarkan:
PS =
{ s | s is a subset of S }
P = {
s | s is a subset}
Subtype dan subrange
adalah : contoh dari pembangun set
tenaga.
Fungsi
adalah : bahasa yang menyediakan suatu sistem
kesimpulan jenis mengijinkan para programmer untuk membuat deklarasi jenis
tegas/eksplisit.
Contoh : fungsi persegi dapat diwakili sebagai subset daerah
produk Nat x Nat.
sqr
= {(0,0),(1,1),(2,4),(3,9),...}
Penyamarataan
membantu untuk menyederhanakan daftar tanpa batas ini untuk:
sqr
= {(x,x*x)| x didalam Nat}
Daerah Batasan Pengulangan
adalah : daerah yang definisinya menjadi bentuk : D:... D...
Definisi disebut berulang karena nama daerah “berulang” pada sisi
kanan dari definisi. Daerah batasan pengulangan tergantung pada abstrak karena
nama daerah adalah suatu bagian penting dari definisi daerah.
Lebih dari satu set boleh mencukupi suatu definisi berulang.
Bagaimanapun, mungkin saja ditunjukkan bahwa suatu definisi berulang selalu
mempunyai solusi terkecil.
Solusi terkecil adalah suatu subset solusi yang lain.
Solusi terkecil daerah batasan pengulangan yang digambarkan
didapat melewati suatu urutan perkiraan (D0, D1,...) ke daerah dgn daerah yg menjadi
batas dr urutan perkiraan (D= limi--> infty Di).
Batas adalah solusi yang terkecil pada definisi daerah berulang
Jenis Sistem
Prosentase besar kesalahan didalam program adalah dalam kaitan
dengan aplikasi operasi ke object jenis yang bertentangan. Jenis sistem telah
dikembangkan untuk membantu programmer didalam pendeteksian kesalahan.
Sistem
jenis adalah :
satu set aturan untuk penjelasan jenis
dan menghubungkan suatu jenis dengan ungkapan didalam bahasa.
Suatu sistem jenis menolak suatu ungkapan jika tidak menghubungkan
suatu jenis dengan ungkapan. Jenis pemeriksaan boleh berjalan pada waktu
kompilasdsi atau waktu berjalan atau kedua-duanya.
Jika kesalahan diharapkan untuk dideteksi pada waktu kompilasi
maka suatu sistem pengecekan jenis statis diperlukan. Satu pendekatan ke
pemeriksaan jenis statis adalah untuk memerlukan programmer untuk menetapkan
jenis masing-masing obyek didalam program.
Ini mengizinkan kompilator untuk melaksanakan jenis pemeriksa
sebelum pelaksanaan program dan ini adalah pendekatan yang diambil oleh bahasa
seperti Pascal, Ada, C++, dan Java.
Jika
pendeteksian kesalahan diharapkan untuk ditunda sampai waktu pelaksanaan, maka
pemeriksaan jenis dinamis diperlukan.
Didalam pemeriksa jenis dinamis, masing-masing nilai data berlabel
dengan jenis informasi sehingga lingkungan waktu berjalan dapat memeriksa
kecocokan jenis dan mungkin melaksanakan konversi jenis jika perlu.
Contoh dari bahasa jenis dinamis :
Bahasa program Lisp, Scheme dan Small-Talk
Bahasa pemrograman Miranda dan Haskell adalah jenis statis dan
menyediakan sistem kesimpulan jenis kuat sehingga seorang programmer tidak
perlu mendeklarasikan jenis apapun. Bahasa juga mengijinkan para programmer
untuk menyediakan spesifikasi jenis eksplisit.
Suatu pemeriksa jenis harus mampu :
• menentukan jika
suatu program adalah jenis yang baik dan
• jika
program adalah jenis yang baik, tentukan jenis ungkapan manapun di dalam
program.
Jenis Deklarasi
Bahkan bahasa yang menyediakan suatu sistem kesimpulan jenis
mengijinkan para programmer untuk membuat deklarasi jenis tegas/eksplisit.
Sekalipun kompiler dapat dengan tepat menyimpulkan jenis, pembaca manusia
mungkin harus meneliti beberapa halaman kode untuk menentukan jenis suatu
fungsi.
Kesalahan kecil oleh programmer dapat menyebabkan kompiler
mengeluarkan pemberitahuan kesalahan atau untuk menyimpulkan suatu jenis yang
berbeda dibanding yang diharapkan. Karena pertimbangan ini adalah praktek
pemrograman yang baik dengan tegas menyatakan jenis atas semua kecuali kasus
yang paling nyata.
Polymorphisme
Suatu sistem jenis adalah monomorphic jika masing-masing
konstanta, variabel, parameter, dan hasil fungsi mempunyai suatu jenis unik.
Jenis pemeriksa suatu sistem monomorphic adalah secara langsung. Tetapi sistem
jenis monomorphic semata-mata adalah tidak memuaskan untuk penulisan perangkat
lunak yang bisa dipakai kembali.
Sistem yang sepenuhnya Monomorphic jarang. Kebanyakan bahasa
pemrograman berisi beberapa operator atau prosedur yang mengijinkan argumentasi
lebih dari satu jenis.
Definisi N.2:
• Monomorphisme:
tiap-tiap konstanta, variabel, parameter, fungsi & operator mempunyai suatu
jenis unik.
• Pemuatan
lebih mengacu pada penggunaan dari syntaksis unggal pengenal untuk mengacu
pada beberapa operasi berbeda yang dibedakan oleh jenis dan jumlah argumentasi
pada operasi.
• Polymorphisme:
suatu operator, fungsi atau prosedur yang mempunyai suatu keluarga jenis yang
terkait dan beroperasi secara seragam atas argumentasinya dengan mengabaikan
jenis.
• Suatu
operasi polymorphic adalah yang dapat berlaku untuk jenis yang berbeda
tetapi berhubungan dengan argumentasi.
Suatu sistem jenis adalah polymorphic jika abstrak beroperasi
secara seragam pada argumentasi suatu keluarga jenis terkait. Polymorphisme jenis ini kadang-kadang disebut
polymorphisme parametric.
Jenis Kelengkapan
Prinsip Jenis Kelengkapan. Tidak ada operasi yang dapat berlaku
semaunya terbatas yang berhubungan dengan nilai jenis.
EmoticonEmoticon