Renungan Fungsional dengan Bahasa Julia — Bagian I
Menjelajahi pemrograman fungsional dengan Julia

Julia dianggap sebagai bahasa Tujuan Umum, yang diketik secara dinamis yang mendukung berbagai paradigma pemrograman. Tegasnya, meskipun Julia bukan Bahasa Pemrograman Fungsional (FP), ia mendukungnya.
Jadi, apa itu Bahasa Pemrograman Fungsional “Murni”? Mereka adalah bahasa yang dirancang memiliki fungsi matematika yang menggunakan ekspresi bersyarat dan rekursi untuk melakukan perhitungan. Mereka menggunakan data yang tidak dapat diubah, evaluasi malas, dan konstruksi lain untuk "menegakkan" cara pemrograman FP. Bahasa-bahasa ini bisa sangat singkat dan beropini. Contoh bagus dari kelas Bahasa ini adalah Haskell.
Julia, bagaimanapun, dengan senang hati memberikan kekuatan kepada programmer, alih-alih menempatkan batasan dan hambatan untuk memaksa kepatuhan pada paradigma ini atau itu.
Apakah Julia bahasa yang baik untuk memprogram dengan cara Fungsional? Saya percaya itu. Jadi mengapa Julia pandai Pemrograman Fungsional? Untuk banyak alasan, termasuk metaprogramming, objek kelas satu, sistem tipe yang kuat, banyak pengiriman dan banyak alasan lainnya.
FP semakin populer akhir-akhir ini. Status Objek yang Dapat Diubah adalah kode spageti baru dan konkurensi hanya menambah kerumitan. FP mendukung pemrograman Paralel dan konkurensi, menghasilkan lebih sedikit bug dan kode bersih. FP pada dasarnya memiliki konsep dan ide matematika yang kuat dari bidang Matematika yang muncul yang dikenal sebagai Teori Kategori.
Mari selami dan mulai membangun beberapa konsep.
Pemrograman Fungsional dalam Tindakan
Katakanlah saya tertarik untuk mengetahui kubus dari beberapa angka, saya dapat menulis:
3 * 3 * 3
2 * 2 * 2
cube(x) = *(x,x,x)
cube(x) = x * x * x
Sekarang saya tertarik menghitung beberapa deret. Kita akan mulai dengan merancang sebuah fungsi untuk menghitung jumlah bilangan bulat dari a sampai b:
Sekarang, tidak berlebihan untuk berasumsi bahwa, pada titik tertentu, saya juga akan tertarik untuk menghitung jumlah kubus bilangan bulat dalam rentang tertentu. Dalam hal ini, fungsi saya dapat terlihat seperti berikut:
Tidak sulit menemukan pola kode yang ada pada dua definisi fungsi di atas. Petunjuk lainnya adalah jenis penjumlahan yang tersirat dalam nama fungsi itu sendiri. Yang kita butuhkan adalah level abstraksi lain, sehingga kita dapat menghitung penjumlahan dari setiap deret. Kita perlu membuat jenis penjumlahan eksplisit dan meneruskannya sebagai argumen ke fungsi alih-alih hardcoding pada badan fungsi.
Dengan definisi fungsi di atas, kita membuat tipe fungsi untuk dijumlahkan secara eksplisit dalam argumen. Saya telah memberi anotasi pada parameter "f" untuk memperjelas bahwa ini adalah fungsi dan bukan nilai lain.
Sekarang, Jika saya ingin jumlah kubus dari 1 sampai 10, saya dapat memanggil seperti itu:
Atau jika saya ingin jumlah bilangan bulat dari 1 sampai 10, saya dapat menulis:
Menjelajahi Fungsi Julia
Di Julia, fungsi adalah objek kelas satu dan dapat diteruskan sebagai argumen ke fungsi lain. Ini membuka pintu ke solusi yang lebih elegan dengan tingkat abstraksi yang lebih dalam.
Kita dapat terus membangun abstraksi di atas abstraksi. Kami juga dapat menyalurkan fungsi bersama dalam rantai. Julia dikatakan sebagai bahasa yang sangat mudah disusun. Di sinilah sedikit pengetahuan Teori Kategori dapat membantu Anda menjadi programmer yang lebih baik. Pemrograman Fungsional memiliki akar yang dalam di dasar matematika.
Contoh di atas menunjukkan cara yang setara untuk menggabungkan dan menyusun fungsi secara bersamaan.
Contoh di atas menunjukkan bagaimana meneruskan fungsi sebagai argumen dapat membantu kita mencapai level abstraksi yang lebih dalam dalam kode kita. Tetapi seseorang tidak perlu berhenti di situ. Kita dapat membuat fungsi yang nilai kembaliannya adalah fungsi itu sendiri. Ambil kode berikut sebagai contoh. Pertimbangkan fungsi f yang mengembalikan nilai rata-rata antara x dan f(x) . Kami akan memanggil fungsi ini average_damp .
julia> average_damp(square)
#7 (generic function with 1 method)
Untuk mendapatkan nilai lembab rata-rata dari fungsi kuadrat di x=10 , kita memanggil dengan:
julia> average_damp(square)(10)
55.0

julia> dx = 0.00001;
julia> deriv(cube)(5)
75.00014999664018
Berikut ini adalah contoh dari fungsi tersebut:
julia> withdraw(20)
80
julia>
julia> withdraw(20)
60
julia> withdraw(20)
40
julia> withdraw(20)
20
julia> withdraw(20)
0.0
julia>
Bagaimanapun, lebih banyak yang akan datang lain kali …
Referensi: "Struktur dan Interpretasi Program Komputer", Abelson dan Sussman