ADT POINT
Type adalah
himpunan nilai dan sekumpulan operator terdefinisi terhadap type tersebut.
Type Point terdiri dari <absis,ordinat> bertype
<integer,integer>. Untuk menyatakan nilai suatu point yang didefinisikan
oleh tuple
<x: integer, y: integer>, dipakai notasi : <0,0> sebagai titik
Origin, <1,2> untuk titik dengan x=2 dan y=2.
Dalam LISP, tuple
nilai suatu type bentukan dinyatakan dalam bentuk list. Karena list adalah
salah satu symbol dasar dalam LISP, tidak ada realisasi definisi type.
Selektor
direalisasikan
sebagai fungsi untuk mengakses komponen-komponen list.
Contoh :
Absis : Point = > real
Absis
(P) memberikan absis dr point P
;Realisasi Selektor
(defun Absis(P) (car P)
(defun Ordinat(P) (car (cdr P)))
Konstruktor direalisasikan
sebagai fungsi untuk membentuk list.
Contoh :
MakePoint (a,b) membentuk sebuah point dari a dan b
dengan a sebagai absis dan b sebagai ordinat.
(defun
makepoint(a b) (list a b))
Predikat direalisasikan sebagai fungsi yang menghasilkan nilai
Boolean.
Contoh :
Isorigin? :
IsOrigin?
(P) benar jika P adalah titik origin yaitu <0,0>
(defun IsOrigin? (P)
(and (= (absis P) 0)
(=
(ordinat P) 0)
)
)
Fungsi
Lain yang didefinisikan, dibuat
spesifikasinya dan harus direalisasi untuk type tersebut, yang akan berlaku
sebagai “operator” terhadap type tersebut.
Contoh :
(defun Kuadran(P)
(cond ((and (> (Absis P) 0) (> (ordinat P)
0)) 1)
((and
(< (Absis P) 0) (> (ordinat P) 0)) 2)
((and
(> (Absis P) 0) (< (ordinat P) 0)) 3)
((and
(< (Absis P) 0) (< (ordinat P) 0)) 4)
ADT Pecahan
Type
pecahan terdiri dari <pembilang,
penyebut> yang bernilai <integer,
integer>. Numerator (pembilang) dan
(denumerator) adalah penyebut. Penyebut sebuah pecahan tidak boleh nol.
Selektor Pecahan :
(defun pemb(n)
(car
n) )
“Pemb(p) memberikan numerator
pembilang n dari pecahan tsb.”
(defun peny(n)
(car
(cdr n)) )
“Peny: pecahan bertype integer
>0”
“Peny(P) memberikan denumerator
penyebut d dari pecahan tersebut.”
Konstruktor Pecahan membuat type data pecahan suatu list
bilangan, missal (1 2) è ½.
(defun
makep(x y)
(cond ((= y 0) "format penyebut tidak boleh nol")
(t (cons x (cons y
nil)))
)
)
Konstruktor Predikat
Predikat
adalah ekspresi yang akan menghasilkan true atau false bila dievaluasi.
Contoh
:
IsLtp?
: 2 pecahan => Boolean
Membandingkan
dua buah pecahan, apakah p1 lebih kecil nilainya dari p2: n1/d1 < n2/d2 jika
dan hanya jika n1d2 < n2d1.
Isltp? (P1,P2)
Pemb (P1) * Peny (P2) < Peny
(P1)* Pemb(P2)
ADT Date
Type
Date
Type
date <d : Hr, m : Bln, y : Thn>
Spesifikasi Type
(defun
Hr(h) (car h))
;h
= 1…31
(defun
Bln(b) (car b))
;b
= 1..12
(defun
Thn(th) (car th))
;thn
>0
; Definisi diatas hanyalah untuk
“menamakan” type integer dg daerah nilai
trtentu tuk mewakili hari/bulan/tahun shg dapat memeriksa apakah nilai integer
trsebut mewakili hari yg absah.
Selektor Date
(defun
day(tgl) (car tgl))
”Day(D) mmberikan hari d dari D yang terdiri dari
<d,m,y>
(defun
month(tgl) (car (cdr tgl)))
“month(D) mmberikan bulan m dari D
yang terdiri dari <d,m,y>
(defun
year(tgl) (car (car (cdr tgl))))
“year(D) memberikan tahun y dari D
yang terdiri dari <d,m,y>
Konstruktor Date
Membentuk
date dari tanggal h, bulan b dan tahun t yang berupa list.
(defun
makedate(h b th)
(cond ((= th 0) "tidak boleh
nol")
(t
(cons h (cons b (cons th nil))))
)
)
Predikat Date
Predikat direalisasikan sebagai fungsi nilai Boolean yang akan menghasilkan true atau false bila
dievaluasi.
Contoh
:
(defun
iskabisat(a)
(cond ((or (and (= (mod a 4) 0) (=
(mod a 100) 0))
(=(/ a 400) 0)))
(t nil)
)
)
; IsKabisat (a) true jika tahun
1900+a habis dibagi 4 tetapi tidak habis dibagi 100, atau habis dibagi 400.
.
0 komentar:
Posting Komentar