Senin, 04 Januari 2010

Fungtional Programing

BAB I
PENDAHULUAN
A. LATAR BELAKANG.
Bahasa pemrograman merupakan implementasi dari algoritma yang dibuat oleh pemrogram dalam memberikan perintah kepada komputer untuk menyelesaikan masalah tertentu. Sampai saat ini banyak bahasa program yang dikembangkan seiring dengan kebutuhan akan kemudahan dalam pemrograman.
Pada kesempatan ini akan dibahas paradigma pemrograman fungsional. Paradigma fungsional memandang penyelesaian masalah sebagai komposisi dan aplikasi fungsi yang memetakan masalah ke jawaban
Paradigma fungsional tidak lagi mempermasalahkan memorisasi dan struktur data, tidak ada pemilahan anatara data dan program, tidak ada lagi pengertian tentang variable. Jadi dalam paradigma fungsional dasar pemecahan permasalahan adalah transformasi. Contoh kasus adalah dalam permainan menyebrangkan kanibal dan misionaris.

B. PERMASALAHAN
Berdasarkan latar belakang yang telah diuraikan diatas maka permasalahan yang dapat diambil adalah bagaimana spesifikasi maupun implementasi dari paradigma pemrograman fungsional.

C. PEMBATASAN MASALAH
Untuk mengidentifikasi permasalahan dan menghindari terjadinya pelebaran masalah, maka kami membatasi pembahasan mengenai pemograman functional dengan menggunakan bahasa haskel.

BAB II
PARADIGMA PEMROGRAMAN FUNGSIONAL
Berlainan sekali dengan paradigma prosedural, program fungsional harus diolah lebih dari program prosedural (oleh pemroses bahasanya), karena itu salah satu keberatan adalah kinerja dan efisiensinya. Karena itu, dalam bahasa pemrograman fungsional, program adalah fungsi hasil komposisi dari fungsi-fungsi lain, apakah fungsi itu dasar atau hasil komposisi dari fungsi dasar. Bahasa pemrograman fungsional memperoleh hasil dengan cara mengaplikasikan fungsi terhadap argumen atau parameternya,yang juga dapat berupa fungsi.
Bahasa pemrograman fungsional menonjol dalam kemampuan struktur datanya. Karena bahasa ini tidak dibatasi oleh variabel yang berasosiasi dengan lokasi memori, maka sebuah struktur data cukup ditangani sebagai sebuah nilai.





1. Jenis pradigma fungsional
Paradigma fungsional memiliki banyak macam bahasa pemrograman, antara lain: Haskell, Lisp. Haskell merupakan paradigma fungsional yang malas dan murni. Hal ini disebabkan karena dalam haskell tidak mengevaluasi ekspresi-ekspresi yang digunakannya yang sebenarnya memang tidak diperlukan untuk menentukan jawaban bagi suatu masalah. Selain itu bahasa ini tidak memperbolehkan adanya efek samping (Efek samping adalah sesuatuyang mempengaruhi bagian di program. Misalnya suatu fungsi yang mencetak sesuatu ke layar yang mempengaruhi nilai dari variabel global. Tentu saja, suatu bahasa pemrograman yang tanpa efek samping akan menjadi sangat tidak berguna; Haskell menggunakan sebuah system monads untuk mengisolasi semua komputasi kotor dari program dan menampilkannya dengan cara yang aman.
Lisp adalah bahasa ekspresi, karena baik program maupun data dinyatakan sebagai ekspresi. Selain itu Lisp juga lebih mengarah dalam pemanfaatan artificial intelligence .
Bahasa pemrograman Haskell merupakan bahasa pemrograman yang sangat sederhana dan mudah dipelajari. Hal ini tidak lain disebabkan karena Haskell merupakan bahasa pemrograman fungsional murni. Oleh karena itu Haskell dapat:
1. Meningkatkan produktifitas programmer (Ericsson banyak memanfaatkan hasil percobaan Haskell dalam software telephony)
2. Lebih singkat, lebih jelas dan kode-kodenya mudah dibaca
3. Errornya semakin sedikit dan reabilitynya lebih tinggi
4. Membuat jarak antara programmer dengan bahasa itu lebih pendek
5. Waktu untuk membuat program menjadi lebih singkat
Selain itu, dalam Haskell tidak ada varibel yang berubah, tidak ada efek samping dari penggunaan sebuah fungsi, tidak ada perulangan, dan tidak ada program order.
Lisp telah tersebar luas dan merupakan salah satu bahasa pilihan untuk aplikasi seperti
artificial intelligence.Bahasa fungsional pada umumnya, dan LISP pada khususnya, memainkan perananpenting dalam definisi bahasa. Sebuah definisi bahasa harus ditulis ke dalam notasinotasi,
disebut meta-bahasa(meta-language) atau bahasa yang didefinisikan (defininglanguage), dan bahasa yang didefinisikan cenderung menjadi fungsional. Dalam kenyataannya, implementasi LISP pertama dimulai, ketika LISP digunakan untuk
mendefinisikan dirinya sendiri.

2. Keuntungan dari paradigma fungsional
- Singkat
Karena program cenderung lebih ringkas dibandingkan program terstruktur.
- Mudah dimengerti
Program fungsional seringkali lebih mudah untuk dimengerti, contohnya quicksort, tidak terlalu diperlukan pengetahuan mengenai quicksort.
- Tidak ada tumpukan memori
Tidak ada kemungkinan memperlakukan integer sebagai pointer, atau dilanjutkan dengan pointer null.
- Manajemen memori yang terintegrasi
Kebanyakan program rumit perlu mengalokasikan memori dinamis dari tumpukan (heap). Setiap bahasa fungsional memudahkan pemrogram dari beban manajemen penyimpanan tersebut. Penyimpanan dialokasikandan diinisialisaikan secara implisit, dan diselamatkan secara otomatis oleh kolektor sampah.


3. Operator
Dalam paradigma fungsional, operator yang berlaku masih sama dengan paradigma procedural. Berikut adalah jenis operator yang berlaku;
a. aritmatika (+,-,/,*)
b. logika (and.or,not,xor)
c. boolean
d. untai
e. himpunan
f. relasi
4. Tipe data
a. Tipe Polimorfis
Tipe yang dalam beberapa cara terukur di atas semua tipe. Ekspresi tipe polimorfis menguraikan keluarga dari tipe-tipe. Sebagai contoh, ( )[a] adalah keluarga dari tipe di mana untuk setiap tipe a berisi tipe list dari a. List dari integer (seperti [1,2,3]), list dari karakter ([‘a’,’b’,’c’]), sekalipun list dari list integer, dll, adalah anggota dari keluarga ini. (Sebagai catatan [2,’b’] bukan contohyang valid karena tidak ada tipe tunggal yang berisi 2 dan ‘b’).
b. Tipe User-Defined
Kita dapat menentukan tipe data sendiri dalam Haskell menggunakan deklarasi data. Tipe penting yang sudah dikenal oleh Haskell adalah nilai kebenaran:
data Bool = False | True
Tipe yang didefinisikan di sini adalah Bool yang mempunyai dua nilai, yaitu True dan False. Tipe Bool adalah sebuah contoh dari tipe konstruktor, dan True dan False adalah data konstruktor (atau konstruktor saja). Dengan cara yang sama kita dapat mendefinisikan tipe warna:
data Color = Red | Green | Blue | Indigo | Violet
Bool dan Color dalam contoh di atas merupakan tipe enumerasi. Berikut contoh dari tipe dengan hanya satu data konstruktor:
data Point a = Pt a a
Karena merupakan konstruktor tunggal, tipe seperti Point sering disebut tipe tuple, karena merupakan produk kartesian (dalam hal ini biner) dari tipe lain. Berlawanan dengan itu, tipe multi-konstruktor seperti Booldan Color disebut union dari tipe sum.

c. Tipe Rekursif
Tipe dapat juga rekursif, seperti tipe dalam pohon biner:
data Tree a = Leaf a | Branch (Tree a) (Tree a)
Di sini didefinisikan tipe polimorfis pohon biner yang mana elemen-elemennya adalah node Leaf berisi nilai dari tipe a, atau node internal (“branch”) berisi dua sub-tree (rekursif). Saat membaca deklarasi data seperti ini, ingat bahwa Tree adalah tipe konstruktor, di mana Branch dan Leaf adalah data konstruktor. Di samping menciptakan koneksi antara konstruktor-konstruktor ini, deklarasi di atas mendefinisikan tipe berikut untuk Branch dan Leaf:
Branch :: Tree a -> Tree a -> Tree a
Leaf :: a -> Tree a
Dengan contoh di atas telah didefinisikan suatu tipe yang cukup kaya untuk mendefinisikan beberapa fungsi (rekursif) yang menggunakannya. Sebagai contoh akan didefinisikan sebuah fungsi fringe yang mengembalikan sebuah list dari semua elemen dalam daun dari sebuah pohon dari kiri ke kanan.

d. Tipe Sinonim
Untuk kenyamanan, Haskell menyediakan cara untuk mendefinisikan tipe sinonim, yaitu nama untuk tipe yang sering dipakai. Tipe sinonim dibuat menggunakan deklarasi type. Berikut beberapa contoh:
type String = [Char]
type Person = (Name,Address)
type Name = String
data Address = None | Addr String
Tipe sinonim tidak mendefinisikan tipe baru, tetapi memberi nama baru kepada tipe-tipe yang sudah ada. Sebagai contoh tipe Person -> Name setara dengan (String,Address) -> String. Nama yang baru seringkali lebih pendek dari tipe sinonimnya, tetapi itu bukan satu-satunya tujuan dari tipe sinonim: tipe sinonim meningkatkan kemudahan membaca sebuah program dengan menjadi lebih mnemonik. Bahkan tipe polimorfis sekalipun dapat diberi nama baru:
type AssocList a b = [(a,b)]
Ini merupakan “tipe asosiasi” yang mengasosiasikan nilai dari tipe a dengan nilai dari tipe b.

5. Notasi

a) Program adalah model solusi persoalan informatik, berisi kumpulan informasi penting yang mewakili persoalan.
b) Dalam konteks fungsional, program digambarkan dalam : himpunan nilai type,
dengan nilainya adalah konstanta.
c) Fungsi di sini merupakan asosiasi antara 2 type yaitu domain dan range.
d) Domain range dapat berupa : type dasar dan type terkomposisi (bentukan).
e) Penulisan suatu program fungsional, dipakai bahasa ekspresi ada tiga macam bentuk komposisi ekspresi adalah ekspresi fungsional dasar, konditional dan rekursif.
f) Pemrograman fungsional didasari atas analisa top down. Analisa top down dalam
pemrograman fungsional: Problema, Spesifikasi dan Dekomposisi .
g) Fungsi pada analisa topdown adalah strukturisasi teks. Sebuah fungsi mewakili
sebuah tingkatan abstraksi.

Konstruksi Program Fungsional
a) Definisi Fungsi : Menentukan nama dan mendefinisikan domain dan range dari fungsi.
b) Spesifikasi fungsi : menentukan “arti” dari fungsi. Contoh : Fungsi bernama Pangkat3(x) artinya menghitung pangkat tiga x seperti pada umumnya.
c) Realisasi fungsi : mengasosiasikan pada nama fungsi, sebuah ekspresi fungsional dengan parameter formal yang cocok. Contoh : mengasosiasikan pada Pangkat Tiga: a*a*a atau a3 dengan a adalah nama parameter formal. Parameter formal fungsi adalah nama yang dipilih untuk
mengasosiasikan domain dan range.
d) Aplikasi fungsi : memakai fungsi dalam ekspresi, yaitu dengan menggantikan semua nama parameter formal dengan nilai. Dengan aplikasi fungsi, akan dievaluasi ekspresi fungsional. Contoh : Pangkat Tiga (2) + Pangkat Tiga(3).
Argumen pada saat dilakukan aplikasi fungsi disebut parameter actual.
e) Notasi untuk menuliskan program fungsional disebut dengan notasi fungsional, dimana terdiri dari empat bagian sesuai dengan tahapan pemrograman. Contoh: generic(template) teks program dalam notasi fungsional
BAB III
PENUTUP
KESIMPULAN
Bahasa pemrograman Haskell merupakan bahasa pemrograman yang sangat sederhana dan mudah dipelajari. Hal ini tidak lain disebabkan karena Haskell merupakan bahasa pemrograman fungsional murni. Oleh karena itu Haskell dapat:
1. Meningkatkan produktifitas programmer (Ericsson banyak memanfaatkan hasil percobaan Haskell dalam software telephony)
2. Lebih singkat, lebih jelas dan kode-kodenya mudah dibaca
3. Errornya semakin sedikit dan reabilitynya lebih tinggi
4. Membuat jarak antara programmer dengan bahasa itu lebih pendek
5. Waktu untuk membuat program menjadi lebih singkat
Selain itu, dalam Haskell tidak ada varibel yang berubah, tidak ada efek samping dari penggunaan sebuah fungsi, tidak ada perulangan, dan tidak ada program order.

Tidak ada komentar:

Posting Komentar