Apakah pemrograman fungsional sangat terkait dengan matematika?


21

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?


1
Apakah pertanyaan ini ditandai dengan benar dengan Mathematica atau haruskah itu matematika?

Di sini dan di sini ada dua pertanyaan yang sangat mirip. Saya tidak berpikir Anda harus memiliki 'dasar yang kuat' dalam matematika tetapi Anda membutuhkan pemahaman yang cukup baik tentang prinsip-prinsip itu dari beberapa sudut pandang. Geometri paling membantu saya dalam pemetaan memori, tetapi saya jarang memikirkan angka sebanyak itu lagi. Matematika itu (bisa) SANGAT berguna.
Garet Claborn

Jawaban:


28

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.


Kata-kata yang bagus, +1.
Mudassir

4
ketika Anda bisa belajar pemrograman deklaratif dengan baik SQL tidak begitu sulit.

7

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.


Saya dapat memahami fungsi matematika lebih baik daripada sintaksis aneh haskell dan lainnya. Apakah Anda memiliki tautan yang menghubungkan langkah matematika dengan sintaksis bahasa fungsional apa pun.
RainDoctor

Jawaban ini tepat. FP akan mulai masuk akal begitu Anda menyadari (dan menginternalisasi) bahwa Anda sedang menulis fungsi matematika dan bukan prosedur langkah demi langkah. Kebanyakan orang pertama-tama mempelajari pemrograman prosedural dan bagasi itu sangat besar. Saya pikir "fungsi" dalam bahasa prosedural harus disebut "prosedur".
Kakaji

2

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.


1

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


10
Anda hanya mencontohkan fungsi anonim, bukan penutupan. Wikiedpia: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.

1

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.