Programming Language Concept Session 12
- Desain bahasa imperative didasari secara langsung pada arsitektur von Neumann
- Desain bahasa fungsional didasari pada fungsi matematika
Mathematical Function
- Mathematical function merupakan anggota pemeraan dari satu himpunan, dikenal dengan himpunan domain, ke himpuan lain, dikenal dengan himpunan range
- Ekspresi lambda menjelaskan parameter dan pemetaan fungsi dalam bentuk berikut:
l(x) x * x * x
Untuk fungsi cube(x) = x * x * x
- Ekspresi lambda menggambarkan fungsi tanpa nama
- Ekspresi lambda diterapkan ke parameter dengan meletakkan parameter tersebut setelah ekspresi, contoh:
(l(x) x * x * x)(2)
Yang menghasilkan nilai 8
- Higher-order function, atau functional form, merupakan bentuk yang mengambil antara fungsi sebagai parameter atau menghasilkan suatu fungsi sebagai hasilnya
- Funtional form yang mengambil dua fungsi sebagai parameter dan menghasilkan suatu fungsi yang nilainya merupakan actual parameter function pertama yang dipakai ke aplikasi kedua, disebut function composition, seperti:
Bentuk: h º f ° g (° merupakan operator komposisi)
Yang aritnya h (x) º f ( g ( x))
Untuk f (x) º x + 2 dan g (x) º 3 * x,
h º f ° g menghasilkan (3 * x)+ 2
- Apply-to-all merupakan functional form yang mengambil satu fungsi sebagai parameter dan menghasilkan suatu daftar nilai yang didapat dengan menerapkan fungsi yang didapat tadi ke tiap elemen dari daftar parameter, seperti:
Form: a
For h(x) º x * x
a(h, (2, 3, 4)) yields (4, 9, 16)
LISP Sebagai Bahasa Pemrograman Fungsional Pertama
- Tipe data objek: awalnya hanya atom dan list
- Bentuk list: kumpulan sublist berkurung dan atau atom
(A B (C D) E)
- Awalnya, LISP merupakan typeless language
- List LISP disimpan secara internal sebagai single-linked list
- Notasi lambda digunakan untuk menjelaskan fungsi dan definisinya. Aplikasi fungsi dan data memiliki bentuk yang sama,
contoh:
– Jika list (A B C) diintepretasikan sebagai data, maka menjadi daftar tiga atom sederhana , A, B, dan C
– Jika diintepretasikan sebagai aplikasi fungsi, artinya fungsi bernama A diterapkan ke dua parameter, B dan C
Scheme
Fungsi Primitif dan Ekspresi LAMBDA
- Fungsi aritmatika primitive: +, -, *, /, ABS, SQRT, REMAINDER, MIN, MAX
- Bentuk ekspresi lambda didasari dari notasi :
(LAMBDA (x) (* x x)
x disebut variable pengikat
- Ekspresi lambda dapat diterapkan ke parameter, contoh:
((LAMBDA (x) (* x x)) 7)
- Ekspresi LAMBDA dapat memiliki jumlah parameter berapapun
DEFINE
- Terdapat dua bentuk:
Untuk mengikat suatu simbol ke ekspresi, contoh:
(DEFINE pi 3.141593)
Untuk mengikat name ke ekspresi lambda
(DEFINE (square x) (* x x))
- Proses evaluasi: parameter pertama tidak dievaluasi, parameter kedua dievaluasi dan diikat ke parameter pertama
Numeric Predicate Function
Function Meaning
= Equal
<> Not equal
> Greater than
< Less than
>= Greater than or equal to
<= Less than or equal to
EVEN? Is it an even number?
ODD? Is it an odd number?
ZERO? Is it zero?
- Di Scheme, nila dua Boolean adalah #T dan #F
List Function
- QUOTE – mengambil satu parameter; mengembalikan parameter tersebut tanpa evaluasi
- QUOTE dibutuhkan karena intrepeter Scheme, bernama EVAL, selalu mengevaluasi parameter ke aplikasi fungsi sebelum menerapkan fungsi tersebut. QUOTE digunakan untuk menghindari evaluasi parameter ketika tak dibutuhkan
- QUOTE dapat disingkat dengan operator prefix apostrophe:
‘(A B) ekuivalen dengan (QUOTE (A B))
- Contoh:
(CAR ′((A B) C D)) mengembalikan (A B)
(CAR ′A) error
(CDR ′((A B) C D)) mengembalikan (C D)
(CDR ′A) error
(CDR ′(A)) mengembalikam ()
(CONS ′() ′(A B)) mengembalikan (() A B)
(CONS ′(A B) ′(C D)) mengembalikan ((A B) C D)
(CONS ′A ′B) mengembalikan (A . B) (a dotted pair)
- LIST merupakan fungsi untuk membangun suatu daftar dari parameter angka berapapun
(LIST ′apple ′orange ′grape) mengembalikan (apple orange grape)
Membandingkan Bahasa Fungsional dan Imperative
- Bahasa Imperatif:
– Eksekusi efesien
– Semantic kompleks
– Syntax kompleks
– Concurreny didesain programmer - Bahasa Fungsional:
– Semantic sederhana
– Syntax sederhana
– Eksekusi tak lebih efesien dari imperative
– Program dapat dibuat otomatis menjadi concurrent
Sumber:
- Concept of Programming Languages 10th. Ed / Robert W. Sebesta (Chapter 15)
- Functional Programming Languages / Binus Powerpoint Presentation