Operators• Sampai sekarang notasi digunakan sebagai predikat dan standart nama predikat diikuti oleh beberapa argumen dalam tanda kurung. Contoh : likes(john,mary).
• Sebagai alternatif, banyak pengguna yang mendefiisikan predikat dengan dua argumen (binary predicate) yang dapat dikonversikan ke dalam infix operator. Nama predikat ditulis diantara dua argumen tanpa tanda kurung. Contoh : john likes mary
• Beberapa pengguna mendsefinisikan predikat dengan sebuah argumen yang dapat dikonversikan kedalam prefix operator. Nama predikat ditulis sebelum argumen tanpa tanda kurung.
Contoh : isa_dog fred
Sebagai pengganti
isa_dog (fred)
• Sebagai alternatif , unary predicate dapat dikonversikan kedalam postfix operator. Nama predikat ditulis setelah argumen. Contoh : fred isa_dog
• Notasi operator dapat digunakan dengan peraturan untuk membantu memudahkan membaca. Beberapa peraturannya adalah :
o likes(john,X):-is_female(X),owns(X,Y),isa_cat(Y).
Lebih mudah dibaca jika ditulis :
john likes X:- X is_female, X owns Y, Y isa_cat.
• Standart notasi nama predikat dan argumen dalam kurung, seprti likes(john,X) dapat digunakan dengan operator jika lebih disukai.
• Perpaduan notasi juga diizinkan
Contoh : jika likes/2, is_female/1, owns/2 and isa_cat/1 semuanya adalah operator
Maka likes(john,X):-is_female(X),X owns Y,isa_cat(Y)adalah bentuk yang valid dari peraturan yang sebelumnya.
• Beberapa pengguna mendefinisiakan predikat dengan satu atau dua argumen yang dapat dikonversikan kedalam operator dengan menggunakan predikat op pada sistem prompt. Predikat ini memerlukan tiga argumen.
Contoh : ?-op(150,xfy,likes).
o Argumen pertama adalah ‘operator precedence’, yaitu integer mulai 0 keatas.
Jarak angka yang digunakan tergantung implementasi khusus.Lebih rendah dari angka, lebih tinggi dari precedece.
Operator precedence value digunakan untuk menentukan operator yang akan digunakan ketika lebih dari satu digunakan dalam sebuah istilah.
Yang paling penting digunakan adalah operator untuk aritmatika.
o Argumen kedua merupakan argumen yang biasa digunakan dari ketiga argumen, yaitu:
xfy => predikat binary dan dikonversikan ke infix operator
fy => predikat unary dan dikonversikan ke prefix operator
xf => predikat unary dan dikonversiakan ke postfix operator
o Argumen ketiga merupakan spesifikasi nama dari predikat yang dikonversikan kedalam operator.
• Predikat dapat juga dikonversikan kedalam operator dengan mengubah seperti:
o ?-op(150,xfy,likes).
• Dalam program prolog file akan diproses menggunakan consult atau reconsult. Prompt (karakter ?-) harus ada. Directive harus ditempatkan di file sebelum clausa pertama yaitu operator likes.
• Beberapa pembangun predikat telah didefinisikan sebagai operator, seperti : relational operator untuk membandingkan data numeric, yaitu <‘kurang dari’ dan > ‘lebih dari’.
Contoh : X>4
Y
(X,4)sebagai pengganti X>4
Arithmetic
• Penggunaan predikat is/2 yang didefinisikan sebagai infix operator dan ditulis diantara dua argumen. Penggunaan yang umum adalah argumen pertama merupakan bound variabel.
Contoh : X is -6.5
X adalah bound angka -6.5
• Argumen kedua dapat berupa angka atau tanda aritmatik.
Contoh : X is 6*Y+Z-3.2+P-Q/4
Eksekusi akan berhasil dan variabel yang membentuk argumen pertama akan menjadi bound dari hasil operasi aritmatika. Jika tidak akan terjadi error.
• ?- X is 10.5+4.7*2.
X = 19.9
?- Y is 10,Z is Y+1.
Y = 10 ,
Z = 11
o Simbol-simbol seperti + - * / dalam operasi aritmatika termasuk infix operator yang diketahui sebagai operator aritmatika. Namun mereka bukan operator tetapi fungsi yang menghasikan data numerik.
• Angka, variabel dan operator, operasi aritmatika dapat tergolong fungsi aritmatik, yang ditulis dengan argumen di dalam tanda kurung (tidak sebagai operator).
Contoh : untuk mencari akar dari 36 =>
?-X is sqrt(36).
X = 6
• Operator aritmatika tidak hanya dapat digunakan sebagai binary infix operator untuk mendeskripsikan selisih dari dua data numerik (X-6), tetapi juga sebagai unary prefix operator untuk mendeskirpsikan bentuk negatif dari data numerik.
Contoh : -X is 10, Y is –X-2.
X = 10, Y = -12
• Operator aritmatik dan fungsi aritmatik
X+Y the sum of X and Y
X-Y the difference of X and Y
X*Y the product of X and Y
X/Y the quotient of X and Y
X//Y the 'integer quotient' of X and Y (the result is truncated to the
nearest integer between it and zero)
X^Y X to the power of Y
-X the negative of X
abs(X) the absolute value of X
sin(X) the sine of X (for X measured in degrees)
cos(X) the cosine of X (for X measured in degrees)
max(X,Y) the larger of X and Y
sqrt(X) the square root of X
Contoh :
?- X is 30,Y is 5,Z is X+Y+X*Y+sin(X).
X = 30 ,
Y = 5 ,
Z = 185.5
o Meskipun predikat is biasa digunakan dalam pendeskripsian, argumen pertama juga dapat berupa angka atau variabel bound dengan nilai numerik. Sehingga nilai numerik dari dua argumen terhitung. Program akan berhasil jika sama dan gagal jika tidak sama.
Contoh : ?- X is 7,X is 6+1.
X = 7
?- 10 is 7+13-11+9.
no
?- 18 is 7+13-11+9.
yes
Unification
The previous description can be simplified by saying that the second argument of
the is/2 operator is evaluated and this value is then unified with the first argument.
This illustrates the flexibility of the concept of unification.
(a) Jika argumen pertama unbound variabel, maka merupakan bound nilai dari argumen kedua dan tujuan berhasil.
(b) Jika argumen pertama angka, atau variabel bound dengan nilai numerik akan dibandingkan dengan nilai argumen kedua. Jika sama, maka berhasil dan jika tidak akan gagal.
X is X+1 maka akan selalu gagal, jika X bukan bound.
?-X is 10,X is X+1
No
• Untuk meningkatkan hasil diperlukan perbedaan approach
/* Incorrect version */
increase(N):-N is N+1.
?- increase(4).
no
/*Correct version */
increase(N,M):-M is N+1.
?- increase(4,X).
X = 5
Operator Precedence in Arithmetic Expressions
• Jika ada lebih dari satu operator dalam operasi aritmatika
Contoh : A+B*C-D
o Pertama mengeksekusi B dan C
o Derajad kepentingannya : * dan /, + dan –
o Jika ada tanda kurung maka didahulukan
Relational Operators
• Merupakan infix operator, yaitu =:= =\= >>= < =< • Untuk membandingkan nilai dua operasi aritmatik • Akan berhasil jika nilai dari operasi pertama sama, kirang dari atau kurang dari dan sama dengan operasi kedua. • Kedua argumen haarus angka, variabel bound atau operasi aritmatik. Contoh : ?- 88+15-3=:=110-5*2. yes ?- 100=\=99. Yes
Equality operators
Ada 3 tipe operasi relasi untuk menidentifikasi persamaan dan pertidaksamaan yg sesuia dengan prlog. Tpe pertama membandingkan nilai aritmetika
E1=:=E2 succeeds if the arithmetic expressions E1 and E2 evaluate to the same
value.
Contoh
?- 6+4=:=6*3-8.
yes
?- sqrt(36)+4=:=5*11-45.
Yes
Arithmetic Expression Inequality =\=
E1=\=E2 succeeds if the arithmetic expressions E1 and E2 do not evaluate to the
same value
?- 10=\=8+3.
yes
Operasi logika
Menghubungkan 2 operator yang disebut goal.
-operator not
Menandakan negasi dari goal tersebut.
Goal yang telah dinegasi akan sukses jika goal asli gagal dan gagal jika goal asli sukses.
Contoh dengan klausa tunggal
?- not dog(fido).
no
?- dog(fred).
no
?- not dog(fred).
yes
-operator disjungsi( ;/2)
Untuk menerangkan operator infix yang mengambil 2 argument, dan keduanya merupakan goal.
Goal 1;goal2 sukses jika keduanya goal 1 atau goal 2 sukses.
Contoh :
?- 6<3;7 is 5+2.
yes