Pages

Senin, 07 November 2011

pemrograman fungsional

1.     Pemrograman Fungsional
                                                                      
Bahasa Pemprograman dapat dibagi kedalam bahasa pemrograman procedural, bahasa deklaratif, bahasa berorientasi objek dan bahasa pemrograman fungsional.
                Pemrograman fungsional ini berdasarkan teori fungsi matematika, yaitu terdiri atas fungsi-fungsi seperti yang ada di matematika. Fungsi merupakan pembangun utama program sehingga fungsi-fungsi ini dapat melewatkan parameter dan mengembalikan nilai yang sudah di proses. Paradigma ini tidak mempersoalkan memorisasi dan struktur data, tidak ada pemilahan antara data dan program, tidak ada lagi pengertian tentang “variabel”, tidak dibatasi oleh variabel yang berasosiasi dengan lokasi memori, sehingga sebuah struktur data cukup ditangani sebagai sebuah nilai. Pemrogram tidak perlu lagi mengetahui bagaimana mesin mengeksekusi atau bagaimana informasi disimpan dalam memori, setiap fungsi adalah “kotak hitam (black box)”, yang menjadi perhatiannya hanya keadaan awal dan akhir. Dengan merakit kotak hitam ini, pemrogram akan menghasilkan program besar.


2. Bahasa Pemrograman Fungsional :

§        Disebut aplikatif karena fungsi yang diaplikasikan ke dalam argumentasi menjadi deklaratif dan non prosedural

§        Didasarkan pada konsep matematika dari sebuah fungsi dan bahasa pemrograman fungsional, meliputi :
-       Suatu set fungsi primitif
-       Suatu set format fungsional
-       Aplikasi operasi
-       Suatu set objek data dan fungsi asosiasi
-       Suatu mekanisme untuk memberikan rujukan sebuah nama terhadap suatu fungsi

§        Merupakan hasil dari fungsi meringkas dan men-generalisir type data dari peta

3. 3 Komponen Primer Bahasa Fungsional :

§        Kumpulan objek data
Menggunakan mekanisme struktur data tingkat tinggi.
Contoh : Array atau List

§        Kumpulan fungsi built-in
Untuk memanipulasi objek data dasar yang menyediakan sejumlah fungsi untuk membuat dan mengakses list.
Contoh :
LISP
- bahasa unuk komputasi simbolik, nilai direpresentasikan dengan ekspresi simbolik.
- banyak digunakan di wilayah kecerdasan buatan (robotika, sistem cerdas).
- biasa dieksekusi di bawah kendali interpreter

Ekspresi terdiri dari atom atau list.
Atom string dan karakter (huruf, angka)
           Contoh : A68000

List urutan dari atom atau list, dipisahkan dengan spasi, ditutup dengan tanda kurung.
             Contoh : (PLUS AB)
             ((daging ayam) (sawi kangkung bayam) air))
 ML (Meta Language)
-  Merupakan bahasa aplikatif dengan program-program yang ditulis menggunakan gaya C atau Pascal dan dengan konsep yang lebih advance tentang tipe data
- Mendukung polimorfisme dan abstraksi data
-  Berjalan dengan interpreter

§        Kumpulan fungsional forms
Untuk membuat fungsi baru, yang mengizinkan programmer mendefinisikan operasi baru dari kombinasi fungsi yang ada.

# Lambda Calculus
Adalah :
-
Bahasa sederhana dengan ilmu semantik sederhana, ekspresif yang menyatakan semua fungsi dapat diperhitungkan
-
Merupakan suatu bentuk formal dengan fungsi sebagai aturan
Contoh :
-       Dengan ekspresi polynomial X2 + 3X – 5
-       Dengan fungsi lebih dari 1 variabel
(+ x y) ditulis ((+ x)y) dimana fungsi (+ x) adalah fungsi yang menambahkan sesuatu ke x

Lambda Calculus murni mempunyai 3 buah elemen :

Ø     Lambang primitif
Ø     Aplikasi fungsi
Ø     Fungsi ciptaan

Lambda calculus murni tidak mempunyai fungsi tetap atau konstanta
Kalkulasi dalam lambda calculus adalah :
Menulis ulang(mengurangi) suatu lambda-expression menjadi suatu format formal.


Ilmu Semantik Operasional
                Inti denotasional Ilmu Semantik adalah : terjemahan dari program konvensional ke dalam persamaan fungsional.
                Tujuan denotasional semantik dari suatu bahasa adalah : menugaskan suatu nilai kepada setiap ekspresi dalam bahasa.
           
Ilmu semantik dapat dinyatakan dalam lambda calculus sebagai fungsi mathematical, Eval, dari ekspresi ke nilai.
Contoh : Eval[+ 3 4] = 7 menggambarkan bahwa nilai ekspresi (+ 3 4) untuk menjadi 7

Fungsi Rekursif
Perluasan syntax Lambda-calculus yang mencakup ekspresi yang telah dinamai (named expressions).

L :: ...x : L...

X = nama dari Ekspresi Lambda L
          FAC : \n.(if (= n 0) 1 (* n (FAC (- n 1))))
                   dengan syntactic sugaring :
    FAC : \n.if (n = 0) then 1 else (n * FAC (n – 1))

FAC : (\fac.(\n. (if (= n 0) (* n (fac (- n 1))))) FAC)

          H : \fac.(\n. (if (= n 0) 1 (* n (fac (- n 1)))))

                   FAC : (H FAC)

Aturan Lingkup Leksikal

          let n : E in B
adalah penyingkatan untuk (\n.B) E

          let x : 3 in (* x x)

\y. let x : 3 in (* y x) Ekuivalen \y. (* y 3)

          letrec n : E in B
adalah peyingkatan untuk let n : Y (\n.E) in B

let n : E in B                   = (\n.B) E
letrec n : E in B              = let n : Y (\n.E ) in B

Semantic Translasi dan Kombinator

Kombinator :
S = \f.(\g.(\x. f x (g x)))
K = \x. \y. x
I = \x.x
Y = \f. \x. (f (x x)) \x. (f (x x))

Tidak ada komentar:

Posting Komentar