Functional Programming C++
description
Transcript of Functional Programming C++
Functional Programming (LISP)
Modul : Struktur
1. Mengenal Functional Programming
Program yang strukturnya serba fungsi, artinya setiap persoalan diselesaikan dengan
menggunakan fungsi.
Mulai dikembangkan tahun 1960an, dimotivasi oleh peneliti bidang artificial
intelligence, symbolic computation, theorem proving, rule-based system, dan NLP.
Bahasa fungsional pertama adalah Lisp (McCarthy, 1960).
Memodelkan masalah komputasi sebagai suatu fungsi matematika, yang mempunyai
input (domain) dan hasil atau output (range)
2. Karakteristik dari functional programming murni (pure functional programming) :
Nilai dari suatu ekspresi hanya tergantung pada nilai-nilai dari sub-sub ekspresinya
(sangat rekursif)
Tidak ada efek samping di dalam ekspresi
Programming tanpa assignment
Implicit storage management
built-in operation on data storage allocation
automatic deallocation
garbage collection
Function are first class citizens
fungsi dapat merupakan nilai dari suatu ekspresi
fungsi dapat di-pass sebagai sebuah argument
fungsi dapat dipakai dalam struktur data
Menggunakan Interpreter bukan compiler
Untyped, berbeda dengan imperative programming yang strongly typed.
3. KERUGIAN
Terlalu banyak simbol ()
Lambat untuk perhitungan numerik
Tidak mempunyai tipe (type)
4. KEUNTUNGAN
Baik untuk symbolic processing (Artificial Intelligence)
Contoh Pemrograman Fungsional: LISP (List Programming)
5. KOMPONEN-KOMPONEN UTAMA SCHEMA
Schema : inti dari Lisp
Lisp menggunakan Prefix Notation.
Ekspresi dalam Lisp (Schema) secara umum ditulis :
> ( E1 E2 .....E3) => call by value
Quote digunakan untuk membuat ekspresi sebagai data/simbol.
Sintaks :
( quote <item>) atau ‘<item>
Contoh:
(define pi 3.14159)
( quote pi)
(define f *) fungsi f, penggunaannya (f 2 3) 6
(define f '*) f sebagai simbol, beda dengan f di atas
Huruf besar dan kecil dianggap sama Contoh : pi= PI = Pi= pi
Operator yang digunakan dalam LISP
Operator Aritmatika (+, -, *, / , mod, expt) Operator Rasional (=, /=, <, >, <=, >=) Operator Boolean (true, false)
6. LATIHAN
Ubahlah notasi infix berikut kedalam notasi prefix (LISP).
(1 + 2) > (8 - 3)
Penyelesaian
( > (+1 2) (- 8 3) )
7. TUGAS
Ubahlah notasi infix berikut kedalam notasi prefix (LISP).
a. 2 * (3 + 1) - 2
b. 1 * 2 + 10 – 60 / 5
c. ((2 + 2) < 3) and (~(8 > 9) or (2 <= 6))