BAB 12
Functional Programming Language
1.Pengenalan
Bahasa pemrograman yang imperative adalah bahasa yang berbasiskan von Neumann architecture, menggunakan memori yang sama untuk data dan untuk memberikan instruksi kepada program, dimana mayoritas komputer moderen menerapkan bahasa ini. Sedangkan bahasa pemrograman yang functional adalah bahasa yang berbasiskan fungsi matematika, yang merupakan gambaran struktur anggota dari suatu domain set menuju ke range set.
2.Mathematical Function
Sebuah fungsi matematika adalah pemetaan dari keanggotaan sebuah himpunan yang disebut himpunan domain ,jika untuk himpunan lain itu disebut himpunan range.
- Ekspresi Lambda
Ekspresi lambda mendeskripsikan fungsi yang tidak memiliki nama dengan menspesifikasikan parameter dari satu fungsi dengan menaruh parameter setelah ekspresi lambda.
- Functional Form
A higher-order function atau functional form adalah fungsi yang menggunakan fungsi – fungsi lain yang lebih simpel sebagai parameter atau sebagai hasil atau keduanya. Biasa juga disebut operator dan functional.
- Function Composition
Komposisi fungsi adalah mekanisme untuk menggabungkan fungsi – fungsi simpel untuk membentuk fungsi yang lebih kompleks. Dengan menggunakan dua fungsi sebagai parameter dan menghasilkan fungsi yang nilainya berasal dari parameter pertama yang diimplementasikan ke parameter yang kedua.
- Apply-to-all
Suatu functional form yang menggunakan sebuah fungsi sebagai parameter dan menghasilkan daftar nilai yang didapat dari penerapan fungsi tersebut kepada setiap element di dalam parameter.
3.Bahasa Pemograman Functional Pertama : LISP
- LISP Data Types and Structures
LISP memiliki tipe data yang terdiri dari atom dan daftar, yang disimpan sebagai satu daftar yang saling berhubungan. Bentuk dari LISP biasa berupa kumpulan sublist dan atom. LISP sebenarnya merupakan bahasa yang tidak bisa diketik.
- LISP Interpretation
Dalam notasi lambda diamana sebuah daftar (A, B, C), jika diinterpretasikan sebagai data maka hanya akan menjadi sebuah daftar sederhana yang memiliki tiga atom yaitu A, B dan C. Sedangkan jika diinterpretasikan sebagai aplikasi dari sebuah fungsi maka A merupakan sebuah fungsi yang diimplementasikan ke dua parameter B dan C.
- Primitive Functions & Lambda Expressions
- Primitive Arithmetic Functions : + , – , *, /, ABS, SQRT, REMAINDER, MIN, MAX
Contoh : (+ 5 2) menghasilkan 7 - Lambda Expressions, bentuknya berdarsarkan dari notasi lambda.
Contoh : (LAMBDA (x) (* x x), dimana x adalah variabel yang terikat. - Lambda expressions bisa diaplikasikan kepada parameter.
Contoh : ((LAMBDA (x) (* x x)) 7) - Ekspresi lambda bisa memiliki berapapun parameter.
Contoh : (LAMBDA (a b x) (+ (* a x x) (* b x))) - Special Form Function: DEFINE
DEFINE memiliki dua bentuk :
- Untuk mengikat simbol kedalam suatu ekspresi
Contoh : (DEFINE 141593) - Untuk mengikat nama kedalam suatu ekspresi lambda
Contoh : (DEFINE (square x) (* x x))
- Output Functions
Output functions biasanya tidak dibutuhkan karena intrerpreter selalu menampilkan hasil dari sebuah fungsi yang telah dievaluasi pada bagian teratas.
Scheme memiliki PRINTF yang memiliki fungsi yang sama dengan echo pada PHP.
- Numeric Predicate Functions
- #T (or #t) adalah benar dan #F (or #f) adalah salah (terkadang () juga digunakan sebagai salah).
- =, <>, >, <, >=, <=
- EVEN?, ODD?, ZERO?, NEGATIVE?
- Fungsi NOT(!) membalikan logika dari sebuah ekspresi Boolean
Control Flow adalah susunan dari pernyataan, instruksi dan pemanggilan fungsi dari sebuah program yang imperative yang akan dijalankan.
- List Functions
QUOTE – mengambil satu parameter dan mengembalikan parameter tersebut tanpa dievaluasi. QUOTE dibutuhkan karena interpreter dari Scheme yang bernama EVAL selalu mengevaluasi parameter sampai ke fungsi dari aplikasi sebelum mengaplikasikan sebuah fungsi. QUOTE digunakan untuk menghindari evaluasi dari parameter ketika sedang tidak cocok.
(QUOTE (A B)) sama dengan ‘(A B).LIST adalah sebuah fungsi untuk membuat sebuah list dari berapapun jumlah parameter.(LIST ‘apple ‘orange ‘grape) returns ( apple orang grape)
- Predicate Function
EQ? menggunakan dua ekspresi sebagai parameter (biasanya dua atom), dan akan menghasilkan #T (Benar) jika kedua parameter memiliki penunjuk nilai yang sama, selain dari itu maka akan memberikan hasil #F (Salah).
Jika (EQ? ‘A ‘A) maka #T.
Jika (EQ? ‘A ‘B) maka #F.
EQV? sama seperti EQ? tetapi EQV? bisa digunakan untuk simbol dan atom. EQV? merupakan perbandingan nilai dan bukan penunjuk nilai.
Jika (EQV? 3 3) maka #T
Jika (EQV? ‘A 3) maka #F
LIST? menggunakan satu parameter dan menghasilkan #T (Benar) jika parameter tersebut adalah sebuah daftar, selain dari itu maka #F (Salah).
Jika (LIST? ‘(apple orang grape)) maka #T
NULL? menggunakan satu parameter dan menghasilkan #T (Benar) jike parameter tersebut adalah daftar yang kosong, selain dari itu maka #F (Salah).
Jika (NULL? ‘(())) maka #F
Example Scheme Function
- member menggunakan atom dan daftar yang simpel kemudian menghasilkan #T (Benar) jika atom tersebut ada pada daftar, selain dari itu maka #F (Salah).
- equalsimp menggunakan dua daftar yang simpel sebagai parameter dan menghasilkan #T (Benar) jika keduanya sama, selain dari itu maka #F (Salah).
- equal menggunakan dua daftar umum sebagai parameter dan menghasilkan #T jika kedua daftar tersebut sama, selain dari itu maka #F (Salah).
- append menggunakan dua daftar sebagai parameter dan menghasilkan parameter pertama dengan anggota dari parameter kedua yang ditambahkan pada bagia akhir.
- Tail Recursion in Scheme
Sebuah fungsi adalah ekor dari rekursif apabila pemanggilan rekursifnya adalah operasi terakhir dalam fungsi tersebut. Semua fungsi yang merupakan ekor rekursif dengan otomatis dapat di ubah oleh compiler menjadi iteration untuk membuatnya lebih cepat dan merupakan salah satu keharusan pada Scheme.
- Functions That Build Code
Sangat mungkin di Scheme untuk menetapkan fungsi yang membuat kode Scheme dan meminta interpretasinya karena interpreter merupakan fungsi yang tersedia bagi user yang merupakan EVAL.
- Adding a List of Numbers
Parameter merupakan daftar angka yang akan ditambahkan, dimana adder memasukan sebuah operator + dan mengevaluasi hasil dari daftar tersebut.
Membandingkan bahasa Functional and Imperative :
- Bahasa Imperative:
-Eksekusi yang effisien
-Semantic yang komplex
-Syntax yang komplex
-Concurrency adalah design dari programmer
- Functional Languages:
-Semantic yang simpel
-Syntax yang simpel
-Eksekusi yang kurang effisien
-Program secara otomatis bisa dibuat bersama
Oleh Kelompok 12
Referensi :
Bab 12 :
- http://arcana70.blogspot.co.id/2014/06/kbp-pert-12.html
- Robert W. Sebesta – Concept of Programming Languages (Tenth Edition), Chapter 15
- https://www.tutorialspoint.com/lisp/lisp_data_types.htm
- https://binusmaya.binus.ac.id/newStudent/#/class/resources.COMP6060/007420/1610/LEC/9239