4. Operator dan Aritmatika.
4.1. Operator
Sering ditemui kesulitan untuk membaca penulisan standar prolog. Oleh karena itu, ada cara lain untuk menuliskan predikat.Seperti pada binary predicate, yang dapat diubah menjadi infix operator.
Contoh penulisan standar ada pada,
likes(oppy,yellow).
Selain itu bisa juga ditulis menurut binary predicate ,
oppy likes yellow.
Untuk predikate yang hanya mempunyai satu argumen atau yang disebut unary predicate dapat diubah menjadi postfix operator. Predikat dapat dituliskan sebelum argumen tanpa tanda kurung.
notasi operator juga dapat digunakan untuk mempermudah membaca sebuah statement.
likes(sasa,X):- is_male(X), owns(X,Y), is_taft(Y).
akan lebih mudah untuk dibaca jika penulisannya sebagai berikut,
sasa likes X:-X is male, X owns Y, Y is taft.
Standar tanda kurung ‘functor dan argumen’ notasi, misalnya likes (sasa,X) dapat
masih dapat digunakan dengan operator jika lebih disukai. ‘Mixed’ notasi juga diperbolehkan
operator dengan memasukkan tujuan menggunakan op predikat pada sistem prompt. Ini
membutuhkan 3 argumen, misalnya
fy berarti bahwa unary predicates dan akan dikonversikan ke operator prefix
operator.
Sebuah predikat juga dapat dikonversi ke operator dengan menempatkan sebuah baris seperti
?-op (150, xfy, likes).
operator dan dengan demikian ditulis antara dua argumen.
Cara yang paling umum adalah menggunakan / 2 adalah dimana argumen pertama adalah terikat
variabel. Mengevaluasi tujuan X -6,5 akan menyebabkan X untuk terikat dengan jumlah -6,5
dan tujuan untuk sukses.
Argumen kedua dapat berupa nomor atau ekspresi aritmatika misalnya
X adalah 6 * Y + Z-3.2 + P-Q / 4 (* menandakan perkalian).
Setiap variabel yang muncul dalam sebuah ekspresi aritmatika sudah harus terikat (sebagai
mengevaluasi hasil dari tujuan sebelumnya) dan nilai-nilai mereka harus numerik.
argumen akan terikat dengan nilai ekspresi aritmetik. Jika tidak, kesalahan
pesan akan muncul.
? – X 10,5 4,7 * 2.
X = 19,9
? – Y adalah 10, Z adalah Y 1.
Y = 10,
Z = 11
operator yang dikenal sebagai operator aritmetika. Tidak seperti operator digunakan di tempat lain di Prolog
mereka tidak predikat tetapi fungsi yang mengembalikan nilai numerik.
Seperti halnya angka-angka, variabel dan operator, ekspresi aritmatika dapat mencakup
fungsi aritmatika, ditulis dengan argumen mereka dalam tanda kurung (yaitu bukan sebagai
operator). Seperti operator aritmetika ini kembali nilai-nilai numerik, misalnya menemukan
akar kuadrat dari 36:
? – X adalah sqrt (36).
X = 6
menunjukkan perbedaan dua nilai numerik, misalnya X-6, tetapi juga sebagai awalan unary
operator untuk menunjukkan negatif dari sebuah nilai numerik, misalnya
? – X adalah 10, Y-X-2.
X = 10,
Y = -12
fungsi yang tersedia dalam Prolog.
X-Y selisih dari X dan Y
X * Y hasil kali X dan Y
X / Y hasil bagi X dan Y
X / / Y ‘integer hasil bagi’ dari X dan Y (hasilnya adalah dipotong ke terdekat integer antara itu dan nol)
X ^ Y pangkat
-X negatif X
abs (X) nilai absolut X
sin (X) sinus X (untuk X diukur dalam derajat)
cos (X) kosinus X (untuk X diukur dalam derajat)
max (X, Y) yang lebih besar dari X dan Y
sqrt (X) akar kuadrat X
Ada tiga jenis operator relasional untuk pengujian kesetaraan dan ketidaksetaraan tersedia dalam Prolog.
nilai.
? – 6 +4 =: = 6 * 3-8.
yes
? – Sqrt (36) +4 =: = 5 * 11-45.
yes
didefinisikan di bawah ini.
? – Checkeven (12).
yes
? – Checkeven (23).
no
? – Checkeven (-11).
no
? – Checkeven (-30).
yes
memotong hasilnya ke integer terdekat antara itu dan nol. Jadi 12 / / 2 adalah 6, 23 / / 2 adalah
11, -11 / / 2 adalah -5 dan -30 / / 2 adalah -15. Membagi sebuah integer dengan 2 menggunakan / / dan mengalikan
itu dengan 2 lagi akan memberikan bilangan asli jika bahkan, tetapi tidak sebaliknya.
Ekspresi aritmatika Ketidaksetaraan = \ =
E1 = \ = E2 berhasil jika ekspresi aritmetika E1 dan E2 tidak mengevaluasi ke
nilai sama
? – 10 = \ = 8 3.
yes
berhasil jika dan hanya jika Term1 identik dengan Term2. Setiap variabel yang digunakan dalam istilah mungkin atau mungkin tidak sudah terikat, tetapi tidak ada variabel terikat sebagai akibat dari mengevaluasi tujuan.
X = _
? – likes (X, Prolog) == likes (Y, Prolog).
no
(X dan Y adalah variabel yang berbeda)
? – X adalah 10, pred1 (X) == pred1 (10).
X = 10
? – X == 0.
tidak
? – 6 4 == 3 +7.
no
Prefix operator bukan / 1 dapat ditempatkan sebelum tujuan untuk memberikan yang pengingkaran. Itu
tujuan menegasikan berhasil jika tujuan asli gagal dan gagal jika tujuan asli
berhasil.
Contoh berikut menggambarkan penggunaan tidak / 1. Diasumsikan bahwa
database berisi satu klausul
dog (fido).
? – not dog (fido).
no
? – dog (fred).
yes
? -not dog (fred).
yes
? – X = 0, X adalah 0.
X = 0
? – X = 0, bukan X adalah 0.
no
The pemisahan operator; / 2 (ditulis sebagai karakter titik koma) digunakan untuk mewakili
‘atau’. Ini adalah infiks operator yang membutuhkan dua argumen, yang keduanya adalah tujuan.
Tujuan1; Tujuan2 berhasil jika salah Tujuan1 atau Tujuan2 berhasil.
? – 6 <3; 7 adalah 5 +2.
yes
? – 6 * 6 =: = 36; 10 = 8 3.
yes