Friday, November 13, 2015

FUNGSIONAL PROGRAM”



FUNGSIONAL PROGRAM”


Pengertian Fungsional Programming

            Pemrograman Fungsional adalah cara pemrograman yang berdasarkan teori fungsi matematika, dimana proses komputasi diperlakukan sebagai  evaluasi fungsi-fungsi matematika.  Cara pemrograman fungsional bisa menjadikan program lebih ekpresif (menggunakan koding lebih sedikit untuk mengimplementasikan sesuatu ide) sehingga programer dapat menjadi lebih produktif.Pemrograman Fungsional sering disebut juga pemrograman yang aplikatif karena fungsi-fungsinya yang di aplikasikan kedalam argumentasi menjadi deklaratif dan non-prosedural.
Pemrograman Fungsional juga didasarkan pada konsep dasar matematika dari sebuah fungsi dan seluruh kode programnya berupa fungsi-fungsi. Karena pemrograman fungsional berdasarkan pada matematika maka akan lebih mudah untuk mendeteksi bahwa program tersebut benar atau tidak. Bahasa Pemrograman Fungsional lebih disukai untuk tujuan ilmiah dan dan akademik, bukan untuk pengembangan perangkat lunak dan komersial. Bahasa pemrograman yang memakai bahasa fungsional salah satunya adalah LISP yang dirancang oleh John McCarty pada tahun 1956 - 1958 dan mulai diimplementasikan pada tahun 1959. Dari sinilah pemrograman bahasa fungsional berkembang.
LISP mempengaruhi beberapa bahasa pemrograman lainnya. Salah satunya adalah Logo, bahasa fungsional yang ditujukan untuk mengajarkan matematika secara mudah. Ada juga FORTH, bahasa fungsional yang ditujukan untuk aplikasi sains dan teknologi yang berkecepatan tinggi dan mempunyai ukuran program yang relatif kecil. Lalu ALGOL60 yang sebenarnya adalah bahasa prosedural tapi dapat menggunakan proses rekursif. Namun, ada beberapa bahasa pemrograman fungsional yang digunakan untuk komersial pengembangan aplikasi diantaranya adalah :
1.      XSLT
2.      XML
3.      OCaml
4.      Haskell
5.      Mathematica
6.      Erlang
Pemrograman Fungsional berdasarkan konsep matematika dari sebuah fungsi meliputi :
   a)Suatu set fungsi primitif
   b) Suatu set format fungsional
   c) Aplikasi operasi
             Pemrograman Fungsional juga sering di sebut dengan Paradigma Fungsional.Paradigma fungsional memiliki 2 type pemetaan/asosiasi yaitu Domain dan Range,Domain dan Range yang dapat berupa :
     a) Type Dasar
     b) Type Data Bentukan

Konsep dasar Pemrograman Fungsional
Komputer bahasa terutama dibagi dalam kategori pada paradigma pemrograman dasar yang didukung.Dalam pengembangan produk perangkat lunak atau dalam setiap modul program berskala besar ilmiah, pilihan bahasa tergantung pada paradigma ini pemrograman yang digunakan untuk menguraikan tujuan program.Bahasa ini dapat dibagi ke dalam bahasa pemrograman prosedural, bahasa deklaratif, bahasa berorientasi objek dan bahasa Pemrograman Fungsional.

Berlawanan dengan konsep pemrograman populer yang digunakan dalam proses pengembangan perangkat lunak komersial online, Pemrograman Fungsional dissects masalah menjadi kumpulan fungsi. Alih-alih menekankan pada perubahan negara, Pemrograman Fungsional menggunakan fungsi untuk mengambil input dan menghasilkan output yang diinginkan. Asal-usul Pemrograman Fungsional dapat ditelusuri untuk Lambda Calculus, yang dikembangkan untuk bekerja dengan rekursi, fungsi aplikasi dan definisi.

Pemrograman Fungsional menghambat fungsi-fungsi yang dapat mengubah keadaan internal atau membuat perubahan terlihat nilai fungsi itu kembali. Ini "fungsi murni" kebal terhadap perubahan karena efek runtime dan dengan demikian hanya menghasilkan output yang diperlukan ketat di nominal dengan masukan yang diberikan.

Fungsional Pemrograman memiliki manfaat sebagai berikut:

Dalam Pemrograman Fungsional, lebih mudah untuk matematis membuktikan bahwa suatu program benar.
Pemrograman Fungsional istirahat masalah dalam modul.Oleh karena itu relatif mudah untuk menulis fungsi yang lebih kecil bukan menggunakan satu besar.Hal ini akhirnya mengurangi kesalahan dan meningkatkan keterbacaan.
proses Debugging dalam program fungsional sederhana karena fungsi ditentukan dengan baik dan lebih kecil.
Sangat mudah untuk melakukan tes untuk program fungsional sebagai fungsi independen dari sistem negara.
program fungsional yang portabel. Fungsi yang sama dapat digunakan dalam tujuan yang berbeda bila digunakan dalam koleksi yang berbeda.

Bahasa pemrograman fungsional lebih disukai untuk tujuan ilmiah dan akademik lebih dalam proyek untuk perangkat lunak komersial dan pengembangan aplikasi. Namun demikian, beberapa bahasa pemrograman fungsional seperti XSLT (XML), Ocaml, Haskell, Mathematica, dll Erlang bekerja di aplikasi industri dan komersial. Juga, SQL (Structured Query Language) dan Spreadsheets menggunakan konsep-konsep tertentu Pemrograman Fungsional.
Fungsi fungsional murni (atau ekspresi) tidak memiliki memori atau I / O efek samping (kecuali jika hasil perhitungan itu sendiri adalah dihitung sebagai efek samping). Ini berarti bahwa fungsi murni memiliki beberapa sifat yang berguna, banyak yang dapat digunakan untuk mengoptimalkan kode:

* Jika hasil dari ekspresi murni tidak digunakan, dapat dihilangkan tanpa mempengaruhi ekspresi lain.
* Jika fungsi murni disebut dengan parameter yang tidak menimbulkan efek samping, hasilnya konstan sehubungan dengan daftar parameter (kadang-kadang disebut referensial transparansi), yaitu jika fungsi murni lagi dipanggil dengan parameter yang sama, hasil yang sama akan dikembalikan (hal ini dapat menghidupkan cache optimisations seperti memoization).
* Jika tidak ada data yang ketergantungan antara dua ekspresi murni, kemudian pesanan mereka dapat dibalikkan, atau mereka dapat dilakukan secara paralel dan mereka tidak dapat mengganggu satu sama lain (dalam istilah lain, evaluasi dari setiap ekspresi murni adalah thread-safe).
* Jika seluruh bahasa yang tidak memungkinkan efek samping, maka setiap strategi evaluasi dapat digunakan; kompiler ini memberikan kebebasan untuk menyusun ulang atau menggabungkan evaluasi ekspresi dalam program (misalnya, menggunakan deforestasi).

Sementara sebagian besar kompiler untuk bahasa pemrograman yang murni mendeteksi fungsi, dan Common-subexpression melakukan penghapusan untuk pemanggilan fungsi murni, mereka tidak selalu dapat melakukan hal ini untuk pre-compiled perpustakaan, yang biasanya tidak mengungkapkan informasi ini, sehingga dapat mencegah optimisations yang melibatkan fungsi-fungsi eksternal. Beberapa compiler, seperti gcc, menambahkan kata kunci untuk seorang programmer untuk secara eksplisit menandai fungsi eksternal sebagai murni, untuk mengaktifkan optimisations tersebut.Fortran 95 memungkinkan difungsikan "murni".
Rekursi
Artikel utama: Rekursi (ilmu komputer)

Iterasi (looping) dalam bahasa fungsional biasanya dicapai melalui rekursi. Fungsi rekursif memanggil diri mereka sendiri, memungkinkan suatu operasi harus dilakukan berulang-ulang. Rekursi mungkin memerlukan setumpuk mempertahankan, tapi ekor rekursi dapat diakui dan dioptimalkan oleh kompilator ke kode yang sama digunakan untuk mengimplementasikan iterasi dalam bahasa imperatif. Skema memerlukan standar bahasa pemrograman implementasi untuk mengenali dan mengoptimalkan rekursi ekor. Optimasi rekursi ekor dapat dilaksanakan dengan mengubah program tersebut menjadi kelanjutan gaya lewat selama kompilasi, di antara pendekatan-pendekatan lain.

Pola umum rekursi dapat diperhitungkan dengan menggunakan fungsi tatanan yang lebih tinggi, catamorphisms dan anamorphisms (atau "lipatan" dan "tersingkap") menjadi contoh yang paling jelas. Seperti lebih tinggi memainkan peran fungsi analog dengan built-in kontrol struktur seperti loop dalam bahasa-bahasa imperatif.

Sebagian besar tujuan umum bahasa pemrograman fungsional memungkinkan tak terbatas Turing rekursi dan lengkap, yang membuat masalah terputus-putus diputuskan, dapat menyebabkan unsoundness dari equational penalaran, dan biasanya memerlukan pengenalan inkonsistensi kedalam logika bahasa yang diungkapkan oleh sistem tipe. Beberapa tujuan khusus bahasa seperti Coq hanya memperbolehkan beralasan rekursi dan sangat normalisasi (nonterminating perhitungan hanya dapat dinyatakan dengan nilai yang tak terhingga disebut aliran codata).Akibatnya, bahasa-bahasa ini gagal menjadi Turing lengkap dan mengekspresikan fungsi-fungsi tertentu di dalamnya adalah mustahil, tapi mereka masih bisa mengekspresikan berbagai perhitungan kelas yang menarik sambil menghindari masalah-masalah yang diperkenalkan oleh rekursi tidak dibatasi. Terbatas pada pemrograman fungsional beralasan rekursi dengan beberapa kendala lain yang disebut total pemrograman fungsional. Lihat Turner 2004 untuk lebih banyak diskusi. [25]
Ketat ketat versus non-evaluasi

Artikel utama: Evaluasi strategi

Bahasa fungsional dapat dikategorikan dengan apakah mereka menggunakan ketat (bersemangat) atau non-ketat (malas) evaluasi, konsep-konsep yang merujuk kepada bagaimana argumen fungsi diproses ketika ekspresi sedang dievaluasi. Perbedaan teknis dalam ungkapan semantik denotational mengandung kegagalan atau perhitungan berbeda. Dalam evaluasi yang ketat, evaluasi setiap istilah yang mengandung subterm yang gagal itu sendiri akan gagal. Sebagai contoh, ekspresi

print panjang ([2 +1, 3 * 2, 1 / 0, 5-4])

akan gagal dalam evaluasi ketat karena pembagian dengan nol pada elemen ketiga dari daftar. Bawah nonstrict evaluasi, fungsi panjang akan mengembalikan nilai 4, karena evaluasi itu tidak akan berusaha untuk mengevaluasi istilah yang membentuk daftar. Singkatnya, evaluasi yang ketat selalu penuh fungsi mengevaluasi argumen sebelum memohon fungsi.Non-evaluasi ketat tidak mengevaluasi argumen berfungsi kecuali nilai-nilai mereka diminta untuk mengevaluasi fungsi panggil itu sendiri.

Strategi pelaksanaan yang biasa untuk non-evaluasi yang ketat dalam bahasa fungsional adalah pengurangan grafik.Non-ketat evaluasi digunakan secara default dalam beberapa bahasa fungsional murni, termasuk Miranda, Bersih dan Haskell.

Bahasa pemrograman fungsional telah dianggap kurang efisien dalam penggunaan CPU dan memori dari bahasa imperatif seperti C dan Pascal. [35] Untuk bahasa-bahasa fungsional murni, yang terburuk adalah logaritmik penurunan jumlah sel-sel memori yang digunakan, karena bisa berubah memori dapat diwakili oleh sebuah struktur data fungsional murni dengan logaritma waktu akses (seperti pohon seimbang). [rujukan?] Namun demikian, slowdowns terjadi sangat jarang dalam prakteknya.Untuk program yang melakukan perhitungan numerik yang intensif, seperti bahasa-bahasa fungsional dan Bersih OCaml biasanya serupa dalam hal kecepatan untuk C. [36] Untuk program yang menangani matriks besar dan multidimensi database, array bahasa fungsional (seperti J dan K) yang dirancang dengan kecepatan optimasi.

Lebih lanjut, kekekalan data dapat, dalam banyak kasus, menyebabkan efisiensi pelaksanaan dalam membiarkan compiler untuk membuat asumsi yang tidak aman dalam bahasa imperatif, sangat jauh meningkatkan peluang untuk inlining.[Rujukan?]

Malas evaluasi dapat juga mempercepat program, bahkan asimtotik, sedangkan hal itu mungkin lambat turun di sebagian besar oleh faktor konstan (Namun, hal itu mungkin memperkenalkan kebocoran memori bila digunakan dengan tidak semestinya) [rujukan?].
Coding gaya

Program imperatif cenderung untuk menekankan serangkaian langkah-langkah yang diambil oleh sebuah program dalam melaksanakan suatu tindakan, sementara program fungsional cenderung menekankan komposisi dan susunan fungsi, seringkali tanpa menentukan langkah-langkah eksplisit. Contoh sederhana dari dua solusi untuk tujuan program yang sama (menggunakan multi-paradigma yang sama bahasa Python) menggambarkan hal ini.

# Keharusan gaya
target = [] # membuat daftar kosong
untuk item dalam source_list: # iterate atas setiap hal dalam sumber
trans1 = G (item) # mengubah item dengan G () function
trans2 = F (trans1) # kedua mengubah dengan F () function
target.append (trans2) # menambahkan item ke target berubah

Sebuah versi fungsi memiliki rasa yang berbeda untuk itu:

# Fungsional gaya
# FP-bahasa berorientasi sering punya standar menenangkan ()
compose2 = lambda A, B: lambda x: A (B (x)) # Tentukan bagaimana menerapkan dua generik transformasi
target = peta (compose2 (F, G), source_list) # Oleskan dua fungsi spesifik F dan G untuk setiap item dalam sumber

Berbeda dengan gaya imperatif yang menjelaskan langkah-langkah yang terlibat dalam membangun sasaran, gaya fungsional menggambarkan hubungan matematis antara source_list dan sasaran. Kode python, dalam praktiknya, sering ditulis dengan daftar pemahaman, suatu bentuk sintaksis gula untuk untuk loop dengan implisit append:

target = [F (G (item)) untuk item dalam source_list]

Penggunaan di industri

Pemrograman fungsional memiliki reputasi untuk menjadi murni kepentingan akademis [rujukan?]. Namun, beberapa bahasa pemrograman fungsional menonjol telah digunakan dalam aplikasi komersial atau industri.Sebagai contoh, bahasa pemrograman Erlang, yang dikembangkan oleh perusahaan Swedia Ericsson pada akhir tahun 1980-an, pada awalnya digunakan untuk menerapkan toleransi kegagalan sistem telekomunikasi. [7] Sejak itu menjadi populer untuk membangun berbagai aplikasi di perusahaan-perusahaan seperti T-Mobile, Nortel, dan Facebook. [6] [8] [37] The Skema dialek Lisp digunakan sebagai dasar untuk beberapa aplikasi pada komputer Apple Macintosh awal [2] [3], dan memiliki lebih baru-baru ini telah diterapkan untuk masalah seperti perangkat lunak simulasi pelatihan [4] dan kontrol teleskop. [5] OCaml, yang diperkenalkan pada pertengahan tahun 1990-an, telah melihat penggunaan komersial di bidang-bidang seperti analisis keuangan [9], sopir verifikasi, pemrograman robot industri, dan analisis statis dari perangkat lunak tertanam. [10] Haskell, walaupun pada awalnya dimaksudkan sebagai sebuah bahasa, [12] juga telah diterapkan oleh berbagai perusahaan, dalam bidang-bidang seperti sistem dirgantara, desain hardware, dan web programming. [11] [12]

Bahasa pemrograman fungsional lainnya yang telah melihat digunakan dalam industri meliputi Scala [38], F # [39] [40], Lisp [41], Standard ML [42] [43], dan Clojure. [44]

TIGA KOMPONEN PRIMER BAHASA FUNGSIONAL
·               Objek Data
            Menggunakan mekanisme struktur data tingkat tinggi.Contohnya : Array atau List.
·               Fungsi Built-in
              Untuk memanipulasi objek data dasar yang menyediakan sejumlah fungsi untuk  
membuat serta mengakses list.
·               Functional Forms
 Untuk membuat fungsi baru yang mengizinkan programmer mendefinisikan sebuah  
operasi baru dari kombinasi yang ada.

LAMBDA KALKULUS PADA PEMROGRAMAN FUNGSIONAL
Lambda Kalkulus bisa disebut sebagai asal muasal bahasa pemrograman fungsional yang dikembangkan untuk bekerja dengan aplikasi rekursif fungsi dan definisi. 
o      Ada 3 Elemen Pada Lambda Kalkulus Yaitu :
1.            Lambang Primitif
2.            Aplikasi Fungsi
3.            Fungsi Ciptaan
Lambda Kalkulus Murni juga tidak memiliki fungsi tetap dan konstanta.


 LAMBDA KALKULUS KE BAHASA PEMROGRAMAN FUNGSIONAL
·               Perbaiki Strategy Pengurangan
β-pengurangan dalam kalkulus λ-dapat terjadi di mana saja dan dalam urutan apapun. ini dapat mempengaruhi penghentian dan efisiensi algoritma program. Sebuah tetap strategi pengurangan memungkinkan programmer untuk alasan tentang pemberhentian dan algoritmik kompleksitas.
·         Tambahkan tipe data primitif (integer, string), operasi primitif (aritmatika, logis), dan struktur data primitif (daftar, catatan). Semua ini dapat dikodekan dalam kalkulus λ-, namun pengkodean tidak wajar dan tidak efisien. Gagasan ini sangat akrab bagi programmer untuk layak dukungan bahasa.
·         Mengembangkan model eksekusi efisien.
Berulang ulang oleh aturan β adalah cara yang sangat tidak efisien untuk mengeksekusi program pada komputer.

Jenis Jenis Pemrograman Fungsional 
           Salah satu jenis Pemrograman Fungsional adalah LISP. LISP adalah singkatan dari kata List Processing,LISP di kembangkan di MIT oleh John McCarthy(sekarang menjadi Stanford University)untuk IBM704 (pure LISP).LISP merupakan salah satu bahasa pemrogaraman tertua yang populer.LISP awal nya di rancang untuk memproses List dengan memanipulasi symbol,LISP juga mempunyai kemampuan komputasi Numerik namun awal nya di rancang untuk komputasi non numerik.
 
Keunggulan dan Kelemahan dari LISP :
       -Keunggulan
             a) Model Komputasi yang atraktif
             b) Alat belajar Pemrograman yang baik
             c) Efisien
       -Kelemahan
             a) Popularitas rendah
             b) Tidak banyak tools yang mendukung
             c) Library pengembangan tidak banyak

 -Ekspresi Fungsional
            Program Fungsional di realisasikan berupa Ekspresi Fungsional.Pengertian Ekspresi sendiri adalah sebuah teks yang terdiri dari nama ,simbol,operator/fungsi,( ),yang dapat menghasilkan suatu nilai berkat evaluasi dari ekspresi.Hasil Evaluasi sendiri dapat berupa nilai numerik atau Boolean.
 Fungsi paling dasar adalah Operator.Berikut adalah contoh contoh dari operator :
             - Operator Aritmatika : (+,-,*,/,mod,div)contoh ekspresi aritmatika penggunaan nya sbb:
                                    (2+2)*2  hasil evaluasi nya adalah 8.
             -Operator  Relasional  : <,>,=,<=,>=,≠
             -Operator Boolean      : and,or contoh ekspresi boolean penggunaan nya sbb :
                                    (3<5)and(4>=6) hasil evaluasi nya adalah False.

-Ekspresi Rekursif
            Definisi entitas (type, fungsi) disebut rekursif jika definisi tersebut mengandung
terminologi dirinya sendiri.Ekspresi rekursif direalisasikan dengan membuat fungsi rekursif dan didasari
analisis rekurens.

  -Analisa Rekurens
          Teks program rekursif terdiri dari dua bagian:
                   -Basis (Basis-0 atau Basis-1), yang menyebabkan fungsi berhenti
                   -Bagian rekurens : mengandung call terhadapfungsi tersebut (aplikasi dari fungsi),
dengan  parameter bernilai mengecil (menuju Basis).

  -Type Rekursif
                 - Jika teks yang mendefinisikan tipe mengandung referensi terhadap diri sendiri, 
maka disebut type rekursif.
                 - Tipe dibentuk dengan komponen yang merupakan tipe itu sendiri.

  -Type Bentukan 
          Type adalah himpunan nilai dan sekumpulan operator yang terdefinisi terhadap type           tersebut.
Ada 2 jenis type yaitu
       a)Tipe dasar : Tipe ini biasa nya sudah tersedia seperti Interger,boolean,real,character
       b)Tipe Bentukan : sedangkan tipe ini di buat sendiri.
            Himpunan Nilai di tentukan oleh domain nilai komponen nya,sedangkan operator harus di buat definisi,spesifikasi,dan realisasi nya sendiri tergantung pada operasi yang berlaku pada type bentukan.

   -Mendefinisikan Type
           Dalam Konteks fungsional mendefinisikan type adalah mendefinisikan :
                  -Nama dan Struktur type
                  -Selektor untuk menentukan komponen-komponen type
                   -Konstruktor untuk membentuk type
                   -Predikat untuk menentukan karekteristik dan pemeriksaan besaran.

Tiga (3) komponen primer bahasa functional :
  • 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.
  • Kumpulan functional forms, untuk membuat fungsi baru, yang mengizinkan
programmer mendefinisikan operasi baru dari kombinasi fungsi yg ada. 
Contoh bahasa pemrograman fungsional : LISP dan ML (Meta Language)
LISP
- bahasa untuk komputasi simbolik, nilai  direpresentasikan dengan ekspresi simbolik.
- banyak digunakan di wilayah kecerdasan buatan  (robotika, sistem cerdas)
- biasa dieksekusi dibawah kendali interpreter
- Ekspresi terdiri dari atom atau list.
Atom → string dan karakter (huruf, angka)
Contoh :  A 68000 
List   → urutan dari atom atau list, dipisahkan dengan spasi, ditutup dengan
tanda    kurung
Contoh :  (PLUS A B)
((DAGING AYAM) (SAWI KANGKUNG BAYAM) AIR)).

Pemrograman funsional mempunyai bebrapa ekspresi  dasar yaitu:
1.     Operator aritmatika
 * / + - yang mempunyai arti sama seperti symbol aritmatika biasa.
“mod” mempunyai arti mengahasilakan nilai sisa hasil bagi, cotohnya (5 mod 2) maka hasinya akan  ( 1 ). Biasanya digunakan untuk hasil yag berupa bilangan numerik



2.    Operator relasional
<, >, =, ≤, ≥ , ≠ yang mempunyai arti sama seperti symbol aritmatika biasa. Biasanya digunakan untuk membandingkan suatu nilai sehingga mengahsilakan nilai Boolean yaitu “ true dan false “.

3.   Operator Boolean
and, or, not  yang mempunyai arti sesuai dari aljabar boolean .


Program-program penting cenderung menekankan serangkaian langkah-langkah yang diambil oleh sebuah program dalam melaksanakan suatu tindakan, sementara program fungsional cenderung menekankan komposisi dan pengaturan fungsi, seringkali tanpa menentukan langkah eksplisit. Contoh sederhana menggambarkan hal ini dengan dua solusi untuk tujuan pemrograman yang sama (menghitung angka Fibonacci). Contoh penting adalah Python.

# Fibonacci numbers, imperative style
def fibonacci(iterations):
    the_sum, first, second = 0, 0, 1  # initial seed values
for i in range(iterations - 1):  # Perform the operation iterations - 1 times.
        the_sum = first + second
first = second
second = the_sum # Assign all the new values.
return first  # Return the value when done.
A functional version (in Haskell) has a different feel to it:
-- Fibonacci numbers, functional style

-- describe an infinite list based on the recurrence relation for Fibonacci numbers
fibRecurrence first second = first : fibRecurrence second (first + second)

-- describe fibonacci list as fibRecurrence with initial values 0 and 1
fibonacci = fibRecurrence 0 1

-- describe action to print the 10th element of the fibonacci list
main = print (fibonacci !! 10)
Or, more concisely:
fibonacci2 = 0:1:zipwith (+) fibonacci2 (tail fibonacci2)
contoh program function dengan Turbo Pascal  
Listing Program:
 
Description: https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7N6mPzWGaj06fqJSmx1uSTvWVP4yJs5-PG9ooMTUMQ5fiO0pkDs1Qxt5OrP4DAQdmTvuRBOf82b7Vq0f9HYxpBYh-JDsJE6vyHPQN5WVYKl2EgFiAIRDnqSI-p8G3z694Z3AeM2RzExaS/s1600/Untitled.jpg


 
Output Program:
Description: https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpGKkdTujpRPK7v_efgRzCwRH0J5a1HfXib9db04QDMSWcb47L9qXkA75YikNYRbPPgSDpYqhMu0jeQIKOv8F2p0f3GdKrs28ccC1YQpNED8RApy8j8PkBmeonXscM-2MZn7uEXSGs5Yjd/s1600/untitled1A.jpg




Logika Program:
Pada program function ini, saya mencoba untuk membuat perhitungan luas persegi panjang.program function berada di atas dari program utama. Ketika program di jalankan pengguna akan di suruh untuk memasukan lebar dan panjang dari sebuah benda yang selanjutnya akan di hitung dan di tampilkan ke dalam layar output. Adapun rumus dalam mencari luas dari sebuah persegi panjang adalah Panjang dikali Lebar.
 Referensi :

http://ukie-society.blogspot.com/2010/10/contoh-program-function-dengan-turbo.html
https://www.google.com/search?q=keunggulan+dari++functional+programing+adalah&
http://pemrogramanlanjut.blogspot.com/2010/03/functional-programming.html


Pemrograman Fungsional & Notasi Fungsional
Pemrograman fungsional didasari oleh konsep pemetaan dan fungsi pada matematika.Pemrograman fungsional menggunakan fungsi-fungsi sebagai dasar dari pemecahan masalah. Bahasa pemrograman yang memakai bahasa fungsional salah satunya adalah LISP yang dirancang oleh John McCarty pada tahun 1956 - 1958 dan mulai diimplementasikan pada tahun 1959. Dari sinilah pemrograman bahasa fungsional berkembang. LISP mempengaruhi beberapa bahasa pemrograman lainnya. Salah satunya adalah Logo, bahasa fungsional yang ditujukan untuk mengajarkan matematika secara mudah. Ada juga FORTH, bahasa fungsional yang ditujukan untuk aplikasi sains dan teknologi yang berkecepatan tinggi dan mempunyai ukuran program yang relatif kecil. Lalu ALGOL60 yang sebenarnya adalah bahasa prosedural tapi dapat menggunakan proses rekursif.

Sebenarnya dengan membiasakan diri menggunakan pemrograman fungsional, secara tidak langsung kita juga dapat mengasah cara kita berpikir secara logika dalam memecahkan masalah karena pemrograman fungsional tidak terikat pada bahasa pemrograman apapun seperti pada pemrograman prosedural. Akan tetapi, waktu pengerjaan menjadi lebih lama dan tidak efisien karena kita harus berpikir bagaimana caranya komputer dapat menjalankan program yang kita buat tanpa bahasa yang diketahui komputer. Salah satu contohnya adalah loop (perulangan). Pemrograman prosedural yang bergantung pada bahasa pemrograman pasti tahu apa itu loop, akan tetapi pemrograman fungsional tidak mengerti apa itu loop.Jadi kita memakai rekursif / rekurens sebagai pengganti loop. Sebagai contoh:
fac(n) : if n = 0 then 1
              else n * fac (n-1)

Fac adalah nama fungsinya dan n adalah parameter / inputannya. n = 0 sebagai basisnya atau batasannya, jadi bila n bernilai 0 maka hasilnya 1 dan program akan berhenti. Bila kita menuliskan (fac 3) dalam program yang menggunaka bahasa fungsional maka hasilnya 6. Didapat dari 3! = 3 x 2 x 1 = 6. Proses program diatas bekerja adalah sebagai berikut:
fac(3) = 3 * fac(2)
fac(2) = 2 * fac(1)
fac(1) = 1 * fac(0)
fac(0) = 1
Dan outputnya adalah 6.


Penulisan pemrograman fungsional menggunakan notasi fungsional.Seperti halnya algoritma, sebelum membuat program kita membuat semacam catatan yang kemudian diterjemahkan dalam bahasa pemrograman.Bila dalam pemrograman fungsional, kita menulisnya dengan notasi fungsional. Sebagai contoh:
 Judul
       FX2(x)
Definisi dan Spesifikasi
       FX2(x) : integer -> integer
       {FX2(x) menghitung pangkat dua dari sebuah bilangan integer.}
Realisasi
       FX2(x) : x * x
Aplikasi
       (FX2 3)

Tulisan berwarna merah di atas adalah contoh notasi fungsional. Ada 4 bagian dalam notasi fungsional, yaitu: Judul, Definisi dan Spesifikasi, Realisasi, dan Aplikasi. 
  • Pada bagian judul biasa dituliskan nama fungsinya dilanjutkan dengan inputannya / parameter. Dalam contoh di atas, nama fungsinya adalah FX2 dan parameternya adalah x, yang berarti hanya 1 inputan saja.
  • Pada bagian Definisi dan Spesifikasi dituliskan penjelasan dari fungsi tersebut serta tipe data domain (parameter /input) dan range (output). Dalam contoh di atas, tipe data input adalah integer dan outputnya juga integer. Lalu text dalam { } sebagai penjelasan dari fungsi FX2.
  • Pada bagian Realisasi, kita menuliskan isi dari fungsi tersebut. Dalam contoh di atas, FX2 adalah fungsi untuk menghitung pangkat dua dari sebuah integer, maka isinya tentu saja x * x.
  • Pada bagian aplikasi, kita menuliskan penggunaan fungsi dalam program. Perlu diperhatikan bahwa nama fungsi dan parameter harus sesuai dengan yang tertera di notasi. Dalam contoh di atas, 3 sebagai ganti dari x maka hasil yang muncul adalah 9 karena 3 * 3 = 9. Bila ditulis (FX2 ) akan muncul pesan error karena kita belum menuliskan parameternya. Demikian juga halnya dengan (FX2 1 2) error karena parameter seharusnya hanya 1 saja tapi kita menginputkan 2 parameter.

Demikian sekilas artikel tentang pemrograman fungsional dan notasi fungsional.Anda dapat mulai berlatih menggunakan pemrograman fungsional ini.Bahkan banyak programmer juga menggunakan bahasa fungsional agar pekerjaannya tidak mudah ditiru oleh programmer lainnya.
hidayat.ahad896@gmail.com

No comments:

Post a Comment