MAD…..Math_C

We are NOT MAD! but we are Member At Discrete Math C….

  • Calendar

    November 2009
    S S R K J S M
     1
    2345678
    9101112131415
    16171819202122
    23242526272829
    30  
  • Arsip

Operators and Arithmetics ch.2

Posted by madmathc pada November 13, 2009

setujugan

Bismillahirrahmanirrahim..

4.1 Operator-Operator

Penggunaan notasi untuk predikat secara standar menggunakan sebuah fungsi yang diikuti oleh sebuah angka dari argumen dalam tanda kurung, misalnya cinta(momon,nida). Cara lain menetapkan predikat dengan dua argumen dari sebuah predikat kembar dapat di konversi menjadi sebuah infix operator (Operator sisipan). Cara demikian akan mempermudah functor atau nama dari predikat untuk dituliskan diantara dua argumen tanpa tanda kurung, misalnya: momon cinta nida. Dengan demikian cara tersebut lebih memudahkan functor dibaca sebelum argumen tanpa tanda kurung, misal heli_anjing momon ketimbang menggunakan heli_anjing(momon). Cara lain, sebuah predikat dengan satu argumen (unary predicate) dapat di konversikan menjadi sebuah postfix operator (Operator dibelakang operand). Ini memungkinkan functor untuk ditulis setelah argumen, misal momon heli_anjing .

Notasi operator dapat pula digunakan dengan rules untuk mempermudah pembacaan. Sebagai contoh rule adalah cinta(momon,X):-is_wanita(X),memiliki(X,Y),isa_kucing(Y). Lebih mudah dimengerti jika rules ditulis sebagai momon cinta X:- X is_wanita, X memiliki Y, Y isa_kucing. Notasi tanda kurung  functor dan argumen  misal: cinta(momon,X) maka masih dapat digunakan dengan operator-operator jika lebih memilih hal tersebut.Notasi ‘Mixed’ atau campuran juga diperbolehkan, misal: cinta/2, is_wanita/1, memiliki/2 and isa_kucing/1 adalah semua operator yang sama dengan (momon,X):-is_wanita(X),X memiliki Y,isa_kucing(Y). Ada pula yang menetapkan predikat dengan satu atau dua dapat di konversikan menjadi sebuah operator dengan memasukkan hasil dengan predikat op pada sistem prompt. Predikat tersebut memakai tiga argumen, sebagai contoh  ?-op(150,xfy,cinta).

Argumen pertama adalah ‘operator precedence’, atau operator yang lebih didahulukan yang merupakanbilangan integer positif. Jarak dari angka-angka digunakan tergantung  dari implementasi khusus. Angka yang lebih kecil akan didahulukan. Nilai dari Operator precedence digunakan untuk  menentukan operator manakah yang akan digunakan pada saat tertentu akan digunakan lebih dari satu kali.

Sebuah predikat juga dapat di konversikan kedalam sebuah operator dengan menempatkan baris seperti

?-op(150,xfy,cinta).

Dalam aplikasi Prolog file akan dimasukkan menggunakan consult atau reconsult.  Sebagai catatan bahwa prompt (dua karakter ?-) harus dimasukkan. Ketika sebuah hasil digunakan  dengan cara tersebut, keseluruhan baris dikenal sebagai directive atau instruksi. Dalam kasus ini directive harus ditempatkan pada file sebelum klausa pertama yang menggunakan operator cinta. Termasuk didalamnya relational operators untuk membandingkan nilai numerik, termasuk  menunjukkan kurang dari dan menunjukkan lebih besar dari. Sebagai contoh term yang benar:

X>4

Y<Z

A=B

Notasi tanda kurung dapat pula digunakan dengan predikat pembangun ditetapkan sebagai operator contoh >(X,4) daripada X>4.

4.2. Arithmetic (Aritmatika)

Disamping penggunaan non-angka (hewan atau nama), Prolog juga menyediakan fasilitas untuk melakukan perhitungan aritmatika dengan menggunakan notasi yang mirip dengannya, yang tentu saja cukup akrap dengan aljabar dasar. Dapat digunakan dengan predikat built-in is/2 yang dikenal sebagai operator infix (sisipan) dan demikian ditulis diantara dua argumen. Mengevaluasi hasil X is -6.5 akan menyebabkan X terbatas pada angka -6.5 sehingga hasil tercapai. Argumen kedua dapat pula sebagai angka atau atau perhitungan aritmatika, contoh: X is 6*Y+Z-3.2+P-Q/4 (* menunjukkan perkalian). variabel-variabel yang muncul dalam operasi aritmatika harus telah dibatasi sebagai hasil dari evaluasi hasil sebelumnya dan nilai-nilainya haruslah berwujud angka.  Jika disajikan demikian, hasil akan selalu berhasil dan wujud variabel argumen pertama akan terbatas dari nilai operasi aritmatika. Jika tidak sebuah pesan error akan muncul. Contoh:

?- X is 10.5+4.7*2.

X = 19.9

?- Y is 10,Z is Y+1.

Y = 10 ,

Z = 11

Simbol-simbol seperti + – * / dalam operasi aritmatika adalah tipe spesial dari operator sisipan (  infix operator ) yang dikenal sebagai arithmetic operators atau operator-operator aritmatika. Tidak seperti operator lain yang digunakan pada Prolog, mereka bukanlah predikat melainkan fungsi-fungsi,yang menghasilkan nilai numerik. Sama halnya dengan angka, variabel dan operator, operasi aritmatik dapat mencakup fungsi aritmatik, tertulis dengan argumen-argumen dalam tanda kurung.Misal operasi aritmatika untuk menghitung akar kuadrat dari 36 :

?- X is sqrt(36).

X = 6

Operator Aritmatika dapat pula digunakan tidak sebagai operator sisipan biner untuk menunjukkan perbedaan antara dua nilai numerik, contoh X-6, tapi juga sebagai operator awalan unary digunakan untuk menunjukkan numerik bernilai negatif, contoh:

?- X is 10,Y is -X-2.

X = 10 ,

Y = -12

Tabel dibawah  (dalam bahasa Inggris) menunjukkan beberapa operator aritmatika dan fungsi aritmatika yang tersedia dalam Prolog:

tabel aritmatik

Sebagai contoh:

?- X is 30,Y is 5,Z is X+Y+X*Y+sin(X).

X = 30 ,

Y = 5 ,

Z = 185.5

Meskipun predikat is umumnya digunakan untuk menguraikan, argumen pertama dapat pula sebagai variabel angka atau batasan dengan nilai numerik. Pada kasus tersebut jika nilai numerik dari dua argumen di kalkulasikan. Hasil tercapai jika hasil sama dengan, jika tidak maka gagal, contoh:

?- X is 7,X is 6+1.

X = 7

?- 10 is 7+13-11+9.

no

?- 18 is 7+13-11+9.

yes

Catatan bahwa hasil dari X is X+1 akan selalu gagal, apakah X dibatasi atau tidak, contoh:

?- X is 10,X is X+1.

no

Catatan bahwa hasil dari X is X+1 akan selalu gagal, apakah X dibatasi atau tidak, contoh:

?- X is 10,X is X+1.

no

Untuk menaikkan (increase) nilai sebanyak satu membutuhkan pendekatan yang berbeda, misal:

Versi yang salah : increase(N):-N is N+1. Maka hasilnya:

?- increase(4).

no

Versi yang benar : increase(N,M):-M is N+1., maka hasilnya:

?- increase(4,X).

X = 5


4.2.1.  Operator Precedence (Operator yang lebih dahulu/Presedensi) pada Operasi Aritmatika

Ketika terdapat lebih dari satu operator pada operasi misal :A+B*C-D, Prolog membutuhkan sebuah pengertian untuk memutuskan perintah yang mana yang akan digunakan. Untuk operator dasar seperti + – * / ,perhitungan A+B*C-D harus ditafsirkan sebagai “perhitungan hasil dari B dan C, ditambahkan ke A kemudian dikurangi D”, tidak seperti “menambahkan A dan B, kemudian mengalikan C dan dikurangi D”. Prolog mampu mencapai hal demikian dengan memberikan masing-masing operator sebuah nilai numerik yang didahulukan (numerical precedence value), operator dengan tingkat didahulukan lebih tinggi seperti * dan / , digunakan sebelum operator dengan tingkat pendahuluan lebih rendah (lower precedence) seperti +dan -. Operator dengan  tingkat presedensi/pendahuluan yang sama misal + dan -, * dan / digunakan dari kiri ke kanan.  Efek dari memberikan operasi seperti A+B*C-D bagi yang memahami aljabar akan memandang dengan: A+(B*C)-D. Jika perintah berbeda dari dibutuhkan evaluasi, maka dapat diproses dengan tanda kurung, misal:  X is (A+B)*(C-D). Ekspresi dengan tanda kurung akan didahulukan.

4.2.2. Relational Operators (Operator-operator Hubungan)

Operator sisipan  (infix operators) =:= =\= > >= < =< adalah sebuah tipe istimewa yang dikenal sebagai relational operators atau operasi hubungan. Digunakan untuk membandingkan nilai dari dua buah ekspresi aritmatika. Hasil tercapai jika nilai dari ekspresi pertama adalah sama dengan, tidak sama dengan, lebih besar daripada, lebih besar atau sama dengan, kurang dari, atau kurang dari sama dengan nilai dari ekspresi kedua, berturut-turut. Kedua argumen harus berupa angka, dibatasi variabel atau ekspresi aritmatik. Contoh:

?- 88+15-3=:=110-5*2.

yes

?- 100=\=99.

yes


4.3 Equality Operators (Operator Persamaan)

Terdapat tiga tipe dari operator persamaan untuk mengetes persamaan dan pertidakpersamaan yang tersedia pada Prolog. Tipe pertama digunakan untuk membandingkan nilai dari ekspresi aritmatika, sedangkan yang kedua digunakan untuk membandingkan syarat (terms).

4.3.1. Ekspresi Aritmatika persamaan =:=

E1=:=E2 akan sukses jika ekspresi aritmatika dari E1 dan E2 mengevaluasi nilai yang sama, contoh:

?- 6+4=:=6*3-8.

yes

?- sqrt(36)+4=:=5*11-45.

yes

untuk mengecek apakah sebuah integer (bilangan bulat) genap atau ganjil, kita dapat menggunakan predikat checkeven/1 seperti dibawah ini:

checkeven(N):-M is N//2,N=:=2*M. , maka hasilnya:

?- checkeven(12).

yes

?- checkeven(23).

no

?- checkeven(-11).

no

?- checkeven(-30).

yes

Operator pembagian bilangan bulat // membagi argumen pertama dengan yang kedua dan mengkerucutkan hasilnya kepada bilangan bulat yang terdekat diantara bilangan tersebut dan nol. Jadi 12//2 adalah 6, 23//2 adalah 11, -11//2 adalah -5 and -30//2 adalah -15. Pembagian sebuah bilangan bulat dengan 2 menggunakan //dan mengalikannya lagi dengan 2 akan menghasilkan bilangan bulat tersebut sebagai genap, tetapi tidak sebaliknya.

4.3.2. Arithmetic Expression Inequality (Pertidaksamaan Ekspresi Aritmatika) =\=

E1=\=E2 dinilai berhasil jika ekspresi aritmatik E1 dan E2 tidak mengevaluasi nilai yang sama, contoh:

?- 10=\=8+3.

yes


4.3.3. Terms Identical (Hubungan identikal) ==

Kedua argumen dari operator sisipan (infix operators) == harus saling berhubungan, hasil dari Term1==Term2 akan tercapai jika dan hanya jika (iff) Term1 adalah identik dengan Term2. Apapun variabel yang digunakan pada terms mungkin atau belum terbatas, tetapi tidak ada variabel yang terbatas sebagai hasil dari  evaluasi hasil (goal evaluation), contoh:

?- likes(X,prolog)==likes(X,prolog).

X = _

?- likes(X,prolog)==likes(Y,prolog).

no

(dengan X dan Y adalah variabel yang berbeda)

?- X is 10,pred1(X)==pred1(10).

X = 10

?- X==0.

no

?- 6+4==3+7.

no

Nilai dari ekspresi aritmatik hanya dievaluasi jika digunakan dengan operator is/2. Terdapat 6+4 contoh sederhana hubungan dengan functor + dan argumen 6 dan 4. Sangat berbeda dengan hubungan 3+7.

4.3.4. Terms Not Identical (Hubungan tidak identik) \==

Term1\==Term2 akan mengetes apakah Term1 adalah tidak identik dengan Term2. Hasil akan tercapai jika Term1==Term2 tidak tercapai. Selain dari itu akan gagal.contoh:

?- pred1(X)\==pred1(Y).

X = _ ,

Y = _

(Keluaran menandakan bahwa antara X dan Y tidak dibatasi dan merupakan variabel yang berbeda.)

4.3.5. Terms Identical With Unification (Hubungan Identik Dengan Penggabungan) =

Operator hubungan persamaan = mirip dengan == dengan sebuah perbedaan yang vital dan terkadang sangat berguna. Hasil dari Term1=Term2 akan tercapai jika hubungan Term1 and Term2 menyatu, contoh:

?- pred1(X)=pred1(10).

X = 10

(Dimana variabel X terikat pada 10, yang membuat dua hubungan identikal)

?- suka(X,prolog)=suka(momon,Y).

X = john ,

Y = prolog

(Mengikat X ke atom momon and Y to the atom prolog sehingga membuat dua hubungan identikal.)

?- X=0,X=:=0.

X = 0

(X=0 menyebabkan X terikat pada 0. hasil X=:=0 tercapai, yang memberitahukan bahwa X sekarang bernilai nol.)

?- 6+4=3+7.

no

?- 6+X=6+3.

X = 3

(Mengikat X pada 3 membuat dua hubungan identikal. Keduanga 6+3, tapi bukan angka 9.)

?- suka(X,prolog)=suka(

X = Y = _

(Mengikat X dan Y membuat hubungan identikal.)

?- suka(X,prolog)=likes(Y,ada).

no

(Tidak ada penyatuan membuat atom prolog dan ada identikal.)

4.3.6. Non-Unification Between Two Terms (Non-Penggabungan Antara Dua Hubungan) \=

Hasil dari Term1\=Term2 tercapai jika  Term1=Term2 gagal, diluar itu maka akan gagal, contoh:

?- 6+4\=3+7.

yes

?- suka(X,prolog)\=suka(momon,Y).

no

(Karena mengikat X pada momon dan Y pada prolog akan membuat hubungan identikal.)

?- likes(X,prolog)\=likes(X,ada).

X = _


4.4.  Logical Operators (Operator Logika)

Membahas tentang penjelasan dari dua operator yang mengambil argumen yang disebut termsatau hubungan, dimana terms dapat diangap sebagai hasil.

4.4.1. The not Operator (Operator “Not”)

Operator awalan (prefix operator) not/1 dapat ditempatkan sebelum hasil apapun utnuk memberikan negasi terhadapnya. Hasil negasi akan tercapai jika hasil awal gagal dan akan gagal jika hasil awal tercapai. Contoh dibawah menggunakan not/1. Dengan mengasumsikan menggunakan satu klausa
anjing(helli).
?- not anjing(helli).
no
?- helli(burik).
no
?- not anjing(burik).
yes
?- X=0,X is 0.
X = 0
?- X=0,not X is 0.
No

4.4.2. The Disjunction Operator (Operator Pemisahan)

Operator pemisahan ;/2 (ditulis dengan karakter titik koma) digunakan untuk mewakili ‘or’. Sebuah operator sisipan (Infix Operator) yang menggunakan dua argumen, keduanya adalah hasil (goals). Goal1;Goal2 tercapai jika salah satu dari Goal1 atau Goal2 tercapai.Contoh:

?- 6<3;7 is 5+2.

Yes

?- 6*6=:=36;10=8+3.

yes

Sekian resume Tutorial Prolog Bab 4 : Operator And Arithmetic, mudah-mudahan dari apa yang kami kerjakan ini bermanfaat sehingga mengantar pada tujuan, khususnya bagi kami dan pada umumnya untuk pembaca sekalian.Amin  @MoMoNcha’09

Tinggalkan komentar