Anda di halaman 1dari 3

Functional Programming (LISP)

Modul : Fungsi dalam LISP II


Fungsi Matematika: Adalah suatu fungsi yang sifatnya seperti predikat yaitu untuk
menentukan suatu keluaran dari sebuah nilai hanya saja nilai keluaran yang dihasilkan adalah
hasil dari suatu pengoperasian aritmatika.
Contoh :
MAX dipakai untuk mencari elemen tertinggi dalam inputan. MAX tidak dapat dipakai
untuk list ataupun char. Dan MIN dipakai untuk mencari elemen terendah dalam inputan.
Contoh:
(max 1 2 3) hasilnya 3.
(min 1 2 3) hasilnya 1.

EVAL dipakai untuk mengevaluasi pernyataan.


Contoh :
Bila kita menulis '(+ 3 2) maka hasilnya bukanlah 5 melainkan (+ 3 2) karena
adanya tanda ' membuat CLISP mengira (+ 3 2) adalah sebuah list. Karena itu kita dapat
menuliskan (eval '(+ 3 2)) dan hasilnya adalah 5. EVAL akan error bila menginputkan list
tanpa operator seperti (eval '(a 1 2)).

FLOOR dipakai untuk memisahkan suatu bilangan dengan bilangan desimalnya.


Contoh :
(floor 2.89) hasilnya 0.89

CEILING dipakai untuk menghitung nilai untuk membuat genap suatu bilangan.
Digenapkan pada bilangan diatasnya. TRUNCATE untuk menghitung nilai untuk
membuat genap sutau bilangan pada bilangan dibawahnya. Sedangkan ROUND untuk
menghitung suatu nilai bilangan yang digenapkan. Dengan syarat n > 0.5 dibulatkan
diatasnya, n< 0.5 dibulatkan dibawahnya .
Contoh :
(ceiling 3.5) hasilnya -0.5, digenapkan bilangan 4
(truncate 3.5) hasilnya 0.5, digenapkan bilangan 3
(round 3.6) hasilnya -0.4 digenapkan diatsnya sebab n > 0.5

EXPT dipakai mengembalikan pangkat dari e dengan basis b logaritma asli


Contoh :
(EXPT 10 2) hasilnya 100

ABS : Untuk memberi nilai positif pada semua bilangan yang diinput.
Contoh :
(abs -8) hasilnya 8

SIGNUM: mengembalikan -1, nol atau 1 tergantung bil tersebut positif, nol atau negatif.
Contoh :
(signum 16) hasilnya 1
(signum -16) hasilnya -1

SQRT dipakai untuk mencari akar 2 dari bilangan yang diinput.


Contoh :
(sqrt 4) hasilnya 2

ISQRT number : untuk mencari lebih besar atau kurang dari positif akar dari suatu
bilangan.
Contoh :
(isqrt 40) hasilnya 6
(isqrt 10) hasilnya 3

Fungsi Dalam LISP


> Fungsi MAP
(define (map f x)
(cond ((null? x) z)
(else (cons (f (car x))(map f (cdr x))))))
Contoh :
(map square '(1 2 3 4 5))
=> (1 4 9 16 25)
(map (lambda(x) (* x x)) '(1 2 3 4 5))
=> (1 4 9 16 25)
Fungsi Remove-if
(define (remove-if f x)
(cond ((null? x) nil)
((f (car x)) (remove-if f (cdr x)))
(else (cons (car x) (remove-if f (cdr x)))))

Latihan
(remove-if odd? '(0 1 2 3 4 5))
(remove-if even? '(0 1 2 3 4 5))

=> hasil (0 2 4)
=> hasil (1 3 5)

Fungsi Reduce Akumulasi hasil :


(*(1 2 3 4) 1) => 24
(+(1 2 3 4) 0) =>10
Diperlukan fungsi reduce dengan tiga parameter:
- f: fungsi misal + atau *
- list dari bilangan-bilangan yang akan dijumlah/dikali
- v : nilai awal 0 untuk + dan 1 untuk *
(define (reduce f x v)
(cond ((null? x) v)
(else (f (car x) (reduce f (cdr x) v)))))
0 (reduce f nil v)
0 ((reduce f (cons a y) v)
0 (reduce + '(1 2 3 4 5) 0)
0 (reduce * '(1 2 3 4 5) 1)
0 (map list '(a b c) '(1 2 3))
0 (reduce append (map list '(a b c) '(1 2 3) nil)

SOAL
1

List sederhana
- Buat fungsi untuk menghitung sum elemen list
L = (4, 5, 2, 9)
Total(L) = 4 + 5 + 2 + 9 = 20

=> v
=> (f a (reduce f y v))
=> 15
=> 120
=>((a 1)(b 2)(c 3))
=> (a 1 b 2 c 3)

Anda mungkin juga menyukai