Pemrograman fungsional adalah paradigma pemrograman di mana dasar komputasi adalah evaluasi ekspresi. Beberapa karakteristiknya adalah penggunaan fungsi tingkat tinggi, transparansi referensial, dan evaluasi malas. Keuntungan dari gaya pemrograman termasuk program yang mudah dibaca, sangat handal dan dapat dipecah menjadi komponen-komponen. Kekurangannya adalah bahwa komputasi mungkin lambat dan gaya serta sintaksnya benar-benar berbeda dari gaya pemrograman umum lainnya. Gaya pemrograman fungsional lebih sering dianut oleh para akademisi daripada oleh para profesional ilmu komputer.
Seperti namanya, fungsi adalah bagian mendasar dari paradigma pemrograman ini. Fungsi dapat bersarang di dalam fungsi lain, yang disebut fungsi tingkat tinggi, dan setiap fungsi tingkat tinggi dapat dipecah menjadi fungsi blok penyusun yang mudah dipahami dan di-debug. Contoh beberapa fungsi tingkat tinggi adalah Map dan Nest. Fungsi Peta mengambil fungsi F dan daftar variabel, misalnya (x, y, z) dan memberikan hasilnya dalam daftar: Peta [F, (x, y, z)] = (F(x), F (y), F(z)). Nest mengambil fungsi F, variabel x, dan jumlah iterasi: Nest[ F, x, 3] = F(F(F(x))).
Pemrograman fungsional murni mengambil input dan mengembalikan output tanpa pernah mengubah status variabel. Dengan kata lain, suatu fungsi dengan input yang sama akan selalu memberikan hasil yang sama terlepas dari apa yang telah terjadi sebelumnya dalam program. Ini disebut transparansi referensial. Karena fungsi matematika transparan secara referensial, pemrograman fungsional intuitif bagi banyak matematikawan, insinyur, dan ilmuwan.
Transparansi referensial fungsi berarti bahwa urutan evaluasi fungsi tidak penting. Oleh karena itu fungsi tidak perlu dievaluasi sampai hasilnya diperlukan, yang disebut evaluasi malas. Ini sangat kontras dengan pemrograman imperatif, di mana sebuah program dimulai dengan perintah pertama dan berjalan melalui daftar sampai perintah terakhir. Evaluasi malas melompati bagian program yang tidak mengikuti secara logis atau berlebihan, yang secara otomatis mengoptimalkan program dan dapat mengurangi waktu komputasi.
Pemrograman fungsional memiliki banyak keunggulan dibandingkan paradigma pemrograman lainnya. Fungsi dengan input dan output yang jelas mudah dibaca dan dipahami. Setelah suatu fungsi di-debug secara menyeluruh, itu dapat digunakan dengan andal di aplikasi lain. Mesin multicore mungkin dapat menghitung fungsi yang dievaluasi secara independen secara paralel, secara drastis meningkatkan kinerja program.
Sayangnya, tidak semua program cocok untuk komputasi paralel, dan program fungsional komputasi mungkin agak lambat. Program fungsional sangat bergantung pada rekursi, yang seringkali kurang efisien dibandingkan dengan menggunakan loop tradisional atau metode iterasi. Faktanya, pemrograman fungsional bisa sangat canggung dan sulit dipelajari karena tidak menyerupai paradigma lain yang lebih umum seperti pemrograman berorientasi objek.
Akademisi cenderung menyukai pemrograman fungsional karena menyediakan cara yang jelas dan dapat dimengerti untuk memprogram masalah dunia nyata yang kompleks. Beberapa bahasa murni adalah Haskell dan Erlang. Mathematica berspesialisasi dalam matematika simbolik, R berspesialisasi dalam statistik dan J berspesialisasi dalam analisis keuangan. Bahasa multiparadigma seperti Scala dan F# mendukung pemrograman fungsional dan gaya pemrograman lainnya.