Jumat, 20 April 2012

Contoh Soal LIST sederhana dan pembahasan


SOAL  :BUATLAH PROGRAM UNTUK MENGHITUNG VEKTOR

isempty (L) list -> boolean
{ isempty (L) menghasilkan  true atau benar jika list kosong, nil jika  ada elemennya }
(defun isempty (L)
                (null L)
)
Aplikasi
ð  (isempty ‘())
T
ð  (isempty ‘(1 2))
nil

pjglist (L) list -> integer
{pjglist (L) menghasilkan berapa banyak elemen dalam list, 0 jika list kosong }
(defun pjglist (L)
                (if(isempty L) 0
                (+ 1 (pjglist(cdr L)))
                )
)
Aplikasi
ð  (pjglist ‘())
0
ð  (pjglist '(7 5 2))
3

pangkat2 (a) integer - integer
{ pangkat2 (a) menghasilkan pangkat 2 dari angka yang di inputkan }
(defun pangkat2 (a)
                (* a a)
)
Aplikasi
ð  (pangkat2  2)
4
ð  (pangkat2  5)
25
sumpangkat (L1 L2) 2 list -> integer
{ sumpangkat (L1 L2) menghasilkan ∑  hasil pemangkatan jumlah elemen pada posis yang sama pada List1 dengan posisi pada list2. Dikerjakan dengan cara rekursif }
(defun sumpangkat (L1 L2)
                (if(or(isempty L1) (isempty L2)) 0
                                (+ (pangkat2 (+ (car L1) (car L2)))
                                                (sumpangkat (cdr L1) (cdr L2))
                                )
                )
)
Aplikasi
ð  (sumpangkat  ‘()  ‘(1 1))
0
ð  (sumpangkat  ‘(1 2)  ‘())
0
ð  (sumpangkat  ‘()  ‘())
0
ð  (sumpangkat  ‘(1 2)  ‘(1 1))
25

besarvektor (L1 L2) 2 list -> real
{ besarvektor (L1 L2) menghasilkan vektor dari list1 dan list2 }
(defun besarvektor (L1 L2)
                (if(= (pjglist L1) (pjglist L2))
                                (sqrt (sumpangkat L1 L2)) nil
                )
)


Aplikasi
ð  (besarvektor  ‘(1 3 2) ‘(5 1))
nil
ð  (besarvektor  ‘(1 2) (2 2))
5
ð  (besarvektor  ‘(1 3)  ‘(4 1))
6.4031243

Jika ada cammond yang kurang jelas, di bawah ini ada penjelasan serta contohnya

OPERATOR ARITMATIKA MENGHASILKAN NUMERIK

OPERATOR
FUNGSI
CONTOH
HASIL
+
Tambah
(+ 1 2)
3
-
Kurang
(- 5 2)
3
*
Kali
(* 2 3)
6
/
Bagi
(/ 9 3)
3
Expt
Pangkat
(expt 2 3)
8
Mod
Modula (sisa hasil bagi)
(mod 8 3)
2

OPERATOR RELASION MENGHASILKAN BOOLEAN

OPERATOR
FUNGSI
CONTOH
HASIL
=
Sama dengan
(= 2 2) , (= 2 3)
T , Nil
/=
Tidak sama dengan
(/= 2  3) , (/= 3 3)
T , Nil
Lebih besar
(> 4 1 ) , (> 2 5)
T , Nil
>=
Lebih besar sama dengan
(>= 3 3) , (>= 7 3) , (>= 4 5)
T , T , Nil
Lebih kecil
(< 2 7) , (< 6 3)
T , Nil
<=
Lebih kecil sama dengan
(<= 2 2) , (<= 1 3) , (<= 7 2)
T , T, Nil


OPERATOR
FUNGSI
CONTOH
HASIL
ATOM
memeriksa atom atau tidak
(atom 1) , (atom ‘a), (atom ‘(2))
T , T , nil
LISTP
untuk memeriksa list atau tidak
(listp ‘(5)) , (listp 1) , (listp ‘b)
T , nil , nil
NUMBERP
untuk memeriksa number atau tidak
(numberp 3) , (numberp -2) , (numberp ‘z)
T , T , nil
SYMBOLP
untuk memeriksa symbol atau tidak
(symbolp ‘a) , (simbolp 4)
T , nil
PLUSP
untuk memeriksa positif atau tidak
(plusp 1) , (plusp -2)
T , nil
ODDP
untuk memeriksa ganjil atau tidak
(oddp 7) , (oddp 2)
T , nil
EVENP
untuk memeriksa genap atau tidak
(evenp 4) , (evenp 3)
T , nil
INTEGERP
untuk memeriksa integer atau tidak
(integerp 5) , (integerp 5.0)
T , nil
FLOATP
Menghasilkan nilai float
(float 1 ) , (float 2.0)
1.0  , 2.0
NULL
untuk memeriksa list kosong  / tidak
‘() , ‘(1 2)
T , nil
MAX
menghasilkan nilai yang terbesar
(max 3 9)
9
MIN
menghasilkan nilai yang terkecil
(min 2 5)
2
ABS
mempositifkan nilai yang negatif artiya mengembalikan nilai positifnya
(abs - 5)
5
Car
Mengambil elemen pertama pada list
(car ‘(1 2 3)
1
Cdr
Menghasilkan list tanpa elemen pertama
(cdr ‘(1 2 3))
‘(2 3)
Reverse
Untuk membalik suatu list
(reverse ‘(1 2 3))
‘(3 2 1)

And untuk  dan
OR  untuk  atau
Not untuk  Negasi
Equal untuk mengecek sama atau tidak


If untuk pengkondisian, dalam notasi LISP (if <kondisi> <ekspresi1> <ekspresi2>)
Rekursif adalah pemanggilan fungsi di dalam fungsi itu sendiri

NOTE :
·           Untuk menulisankan karakter (symbol) harus diberi tanda petik 1 di depannya
·           Untuk menulisakan sebuah list harus diberi petk 1 kemudian diawali kurung buka dan diakhiri kurung tutup
·           Perhatikan baik-baik kurung buka dan kurung tutup
·           LISP tidak ada perbedaan dalam menuliskan huruf besar dan kecil

Tidak ada komentar:

Posting Komentar