Связано ли функциональное программирование с математикой, потому что большая часть функционального программирования изображена математическими понятиями? НЕОБХОДИМО ли иметь сильную математическую базу для изучения и понимания функционального программирования для программиста с обязательным опытом работы?
math
scala
functional-programming
prasonscala
источник
источник
Ответы:
Все программирование связано с математикой. Действительно, многие университеты все еще помещают свои программы по информатике в компетенцию математического факультета.
Что касается изучения функционального программирования, вам не нужно иметь прочную базу по математике, чтобы изучить его. Сейчас я выучил три разных функциональных языка с достаточным уровнем знаний (Haskell, Erlang, Clojure), и мои собственные математические навыки крайне слабы. Сообщество Haskell может, действительно, стать немного раздражающим в своем математико-ориентированном способе говорить о вещах, но Erlang и Clojure оба являются очень прагматичными функциональными языками программирования, которые не так сложно подобрать, потому что учебная информация написана, по-видимому, для программистов, не фанатов математики. Это , как говорится, несмотря на мой гандикап в математике я сделал подобрать Haskell, так что это не невозможно.
Реальная трудность, с которой я столкнулся, выбирая декларативные языки программирования в целом (функциональность которых является подмножеством), заключается в том, чтобы отказаться от этого стремления к контролю; сказать компьютеру, что делать. Требуется некоторое привыкание.
источник
Да. По сути, функциональная программа представляет собой набор таких утверждений:
// 1_ и 2_ являются "фиктивными аргументами" f (1_): = sin (1_) g (1_, 2_): = 1_ + 2_ и т. Д.
x = f ()
у = г (х)
z = h (x, h2 (y))
и т.д...
Вы пишете, что программа должна делать в форме уравнений, определяющих новые значения (примечание: не переменные) как функции ранее определенных значений. Вы также определяете функции как отношения. Это действительно очень похоже на способ написания математических теорем.
источник
IMO Mathematica, как пример языка, на котором вы можете использовать функциональное программирование, не требует сильных знаний математики. На самом деле, я не думаю, что сталкивался с чем-то вроде функционального программирования во время своего базового математического образования. Я начал программировать на Mathematica в стиле C, и обнаружил функциональное программирование только спустя годы. Я не думаю , что основные функциональные конструкции программирования , такие как
Map
,Apply
,NestList
и т.д. требуют математики фона на всех.источник
на самом деле, нет. Функциональное программирование - это всего лишь методология, но оно основано на лямбда-исчислении и тому подобном.
Замыкания - это (маленькая) попытка ввести концепции функционального программирования в процедурные языки. вместо этого
for(int i =0 ; i < num; i++) doStuff(arr[i]);
вы можете вместо этого предположить, что элементы массива по своей сути могут иметь «материал, сделанный с ними», такarr.each do |el| doStuff(el) end
источник
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.
Короткий ответ: да, потому что все с определенной степенью формализации (например, языки программирования) тесно связано с математикой, для различной степени математики.
Но использование языка программирования строго не требует знакомства с математикой, например, с теоретическими основами языков. Вам не нужно знать, что такое контекстно-свободный язык и какие законы и свойства есть у такого языка, чтобы использовать его. Точно так же вам не нужно быть германистом или романистом, чтобы говорить по-немецки или по-французски.
«Математическая» нотация не является общим свойством функциональных языков. Scala и все языки на основе Lisp имеют очень разные синтаксисы по сравнению с Haskell.
источник