Pemrograman fungsional merupakan paradigma pemrograman yang memperlakukan perhitungan sebagai evaluasi fungsi matematika dan menghindari perubahan data. Sebuah program fungsional terdiri dari Ungkapan E (mewakili kedua algoritma dan input ). Pemrograman fungsional ditandai dengan nilai-nilai, fungsi dan bentuk fungsional.
Banyak bahasa pemrograman mendukung pemrograman fungsional dan imperatif tetapi sintaks dan fasilitas bahasa biasanya dioptimalkan untuk hanya satu dari salah satu program, dan faktor-faktor sosial seperti konvensi coding dan perpustakaan sering kali memaksa programmer menuju salah satu program.
Bahasa pemrograman fungsional merupakan hasil abstraksi generalisasi dan pemetaan tipe data.
Bahasa pemrograman fungsional yang penting untuk alasan berikut:
• Fungsional program didistribusikan dengan tugas membebaskan programmer dari
modus perintah berpikir sekuensial kaku yang diperlukan untuk tugas perintah.
• Pemrograman fungsional berguna untuk pengembangan spesifikasi eksekusi dan
implementasi prototipe.
• Pemrograman fungsional memiliki area aplikasi penting. Pemrograman kecerdasan
buatan yang dilakukan dalam bahasa pemrograman fungsional dan teknik AI untuk
bermigrasi ke aplikasi dunia nyata.
• Pemprograman fungsional mendorong pemikiran pada tingkat yang lebih tinggi dari
abstraksi dengan menyediakan fungsi tatanan lebih tinggi yang dimodifikasi dan
menggabungkan program yang telah ada.
Bahasa pemrograman fungsional berdasarkan Lambda - kalkulus. Lambda Kalkulus berkembang dari sebuah upaya Alonzo Church dan Stephen Kleene pada awal 1930-an untuk meresmikan gagasan komputabilitas (juga dikenal sebagai constructibility dan calculability efektif).
Perhitungan semantik operasional dalam kalkulus lambda adalah dengan menulis pengurangan ekspresi lambda untuk bentuk normal. Untuk lambda kalkulus, ekspresi lambda dikurangi dengan substitusi. Artinya, kasus dari parameter dalam program diganti dengan argumen. Berdasarkan Lamda Kalkulus skema merupakan keturunan LISP, meskipun memiliki fitur penting, pada bagian ini kita mengabaikan fitur ini dan berkonsentrasi pada kalkulus seperti fitur lambda Skema. Skema memiliki dua jenis benda, atom dan daftar. Atom diwakili oleh string atau karakter. Sedangkan daftar diwakili oleh urutan dari atom atau dipisahkan dengan karakter dan tertutup dalam tanda kurung.
Lambda kalkulus adalah pengaruh langsung pada bahasa pemrograman LISP( List Prosessing ), panggilan dengan parameter nama melewati mekanisme Algol-60, dan substitusi tekstual dilakukan oleh generator makro. Eksplisit penggunaan dan sistematis lambda kalkulus dalam ilmu komputer dimulai pada awal tahun 1960 oleh Peter Landin, Christopher Strachy dan lainnya yang memulai teori semantik formal untuk sebuah bahasa pemrograman yang disebut semantik denotational. Semantik Denotational, disebut operasional`\ dinamis ', karena ia melihat fungsi sebagai urutan operasi. Tujuan dari bahasa semantik denotational yaitu, untuk memberikan nilai ekspresi masing - masing didalam suatu program. Kita dapat mengekspresikan semantik dari kalkulus lambda sebagai fungsi matematika, Eval, atau dari ekspresi ke nilai.
Desain perangkat keras baru yang muncul untuk mendukung pelaksanaan langsung dari lambda kalkulus atau combinators mendukung eksekusi paralel dari program fungsional, menghilangkan beban (sisi-effects, sinkronisasi, komunikasi) untuk mengontrol paralelisme dari programmer. LISP (list processing) dirancang oleh John McCarthy pada tahun 1958. Pemakaian LISP diminati diberbagai bidang seperti mekanisasi pembuktian teorema, pemodelan kecerdasan manusia dan pengolahan bahasa alami. Dalam setiap bidang ini, list processing dipandang sebagai kebutuhan mendasar.
Haskell Berbeda dengan LISP dan Scheme, Haskell merupakan bahasa pemprograman fungsional modern. Haskell merupakan bahasa modern yang dirancang oleh ahli logika Haskell B. Curry dan komite internasional. Tujuan desain haskell adalah untuk memiliki bahasa Haskell fungsional yang menggabungkan ide - ide baru, baik dalam mencari bahasa fungsional atau untuk pengajaran, penelitian dan aplikasi. Haskell memiliki instalasi overhead yang digabungkan dengan sistem tipe polimorfis, murni fungsional I / O, array, abstraksi data dan dapat menyembunyikan informasi.