Apakah pemrograman fungsional sangat terkait dengan matematika karena banyak pemrograman fungsional digambarkan dengan konsep matematika? Apakah itu HARUS memiliki dasar matematika yang kuat untuk belajar & memahami pemrograman fungsional untuk seorang programmer dengan latar belakang imperatif?
math
scala
functional-programming
prasoncala
sumber
sumber
Jawaban:
Semua pemrograman terkait dengan matematika. Memang banyak universitas masih menempatkan program ilmu komputer mereka di bawah bidang departemen matematika.
Sedangkan untuk belajar pemrograman fungsional, Anda tidak perlu memiliki dasar yang kuat dalam matematika untuk mempelajarinya. Saya telah belajar tiga bahasa fungsional yang berbeda sekarang untuk kemahiran yang masuk akal (Haskell, Erlang, Clojure) dan keterampilan matematika saya sendiri sangat lemah. Komunitas Haskell memang bisa sedikit menjengkelkan dalam hal matematika yang berfokus pada berbicara tentang hal-hal, tetapi Erlang dan Clojure keduanya bahasa pemrograman fungsional yang sangat pragmatis yang tidak terlalu sulit untuk diambil karena informasi tutorial ditulis, sepertinya, untuk programmer, bukan matematika hard-core Geeks. Meski begitu, terlepas dari kecakapan matematika saya , saya memang menjemput Haskell, jadi itu bukan tidak mungkin.
Kesulitan nyata yang saya temukan dalam mengambil bahasa pemrograman deklaratif secara umum (yang fungsional adalah himpunan bagian) adalah melepaskan dorongan untuk memegang kendali; untuk memberi tahu komputer apa yang harus dilakukan. Butuh waktu untuk terbiasa.
sumber
Iya. Pada dasarnya, program fungsional adalah sekelompok pernyataan seperti itu:
// 1_ dan 2_ adalah "argumen dummy" f (1_): = sin (1_) g (1_, 2_): = 1_ + 2_ dll ...
x = f ()
y = g (x)
z = h (x, h2 (y))
dll ...
Anda menulis apa yang seharusnya dilakukan oleh program dalam bentuk persamaan yang mendefinisikan nilai-nilai baru (catatan: bukan variabel) sebagai fungsi dari nilai-nilai yang didefinisikan sebelumnya. Anda juga mendefinisikan fungsi sebagai hubungan. Ini benar-benar sangat mirip dengan cara teorema matematika ditulis.
sumber
IMO Mathematica, sebagai contoh bahasa di mana Anda dapat menggunakan pemrograman fungsional, tidak memerlukan latar belakang yang kuat dalam matematika. Sebenarnya, saya tidak berpikir saya menemukan sesuatu seperti pemrograman fungsional selama pendidikan matematika dasar saya. Saya mulai pemrograman Mathematica melakukan C-style, dan menemukan pemrograman fungsional hanya beberapa tahun kemudian. Saya tidak berpikir dasar konstruksi pemrograman fungsional seperti
Map
,Apply
,NestList
, dll memerlukan latar belakang matematika sama sekali.sumber
tidak juga. pemrograman fungsional hanyalah sebuah metodologi, tetapi memiliki dasar dalam kalkulus lambda dan hal-hal seperti itu.
Penutupan adalah upaya (kecil) untuk memperkenalkan konsep pemrograman fungsional ke dalam bahasa prosedural. alih-alih
for(int i =0 ; i < num; i++) doStuff(arr[i]);
, Anda dapat mengasumsikan bahwa elemen-elemen array secara inheren dapat memiliki "hal-hal yang dilakukan pada mereka"arr.each do |el| doStuff(el) end
sumber
The term closure is often mistakenly used to mean anonymous function. This is probably because most languages implementing anonymous functions allow them to form closures and programmers are usually introduced to both concepts at the same time. These are, however, distinct concepts. A closure retains a reference to the environment at the time it was created (for example, to the current value of a local variable in the enclosing scope) while a generic anonymous function need not do this.
Jawaban singkatnya adalah: Ya, karena segala sesuatu dengan tingkat formalisasi tertentu (seperti bahasa pemrograman) sangat terkait dengan matematika, untuk berbagai tingkat matematika.
Tetapi, menggunakan bahasa pemrograman tidak sepenuhnya membutuhkan keakraban dengan matematika, misalnya dasar bahasa theroetis. Anda tidak perlu tahu apa bahasa bebas konteks itu dan apa hukum dan properti bahasa seperti itu untuk menggunakannya. Demikian juga, Anda tidak harus menjadi orang Jerman atau Romawi untuk bisa berbahasa Jerman atau Prancis.
Notasi "matematika" bukan properti umum dari bahasa fungsional. Scala dan semua bahasa berbasis Lisp memiliki sintaks yang sangat berbeda dibandingkan dengan Haskell.
sumber