Сильно ли функциональное программирование связано с математикой?


21

Связано ли функциональное программирование с математикой, потому что большая часть функционального программирования изображена математическими понятиями? НЕОБХОДИМО ли иметь сильную математическую базу для изучения и понимания функционального программирования для программиста с обязательным опытом работы?


1
Правильно ли помечен этот вопрос с помощью mathematica или математика?

Здесь и здесь два очень похожих вопроса. Я не думаю, что у вас должна быть «сильная основа» в математике, но вам нужно довольно хорошее понимание ее принципов с некоторой точки зрения. Геометрия мне больше всего помогает с отображением памяти, но я редко думаю о числах как о таких. Математика (может быть) ОЧЕНЬ полезна, хотя.
Гарет Клаборн

Ответы:


28

Все программирование связано с математикой. Действительно, многие университеты все еще помещают свои программы по информатике в компетенцию математического факультета.

Что касается изучения функционального программирования, вам не нужно иметь прочную базу по математике, чтобы изучить его. Сейчас я выучил три разных функциональных языка с достаточным уровнем знаний (Haskell, Erlang, Clojure), и мои собственные математические навыки крайне слабы. Сообщество Haskell может, действительно, стать немного раздражающим в своем математико-ориентированном способе говорить о вещах, но Erlang и Clojure оба являются очень прагматичными функциональными языками программирования, которые не так сложно подобрать, потому что учебная информация написана, по-видимому, для программистов, не фанатов математики. Это , как говорится, несмотря на мой гандикап в математике я сделал подобрать Haskell, так что это не невозможно.

Реальная трудность, с которой я столкнулся, выбирая декларативные языки программирования в целом (функциональность которых является подмножеством), заключается в том, чтобы отказаться от этого стремления к контролю; сказать компьютеру, что делать. Требуется некоторое привыкание.


Хорошие слова +1.
Мудассир

4
когда вы хорошо изучите SQL, декларативное программирование не так сложно.

7

Да. По сути, функциональная программа представляет собой набор таких утверждений:

// 1_ и 2_ являются "фиктивными аргументами" f (1_): = sin (1_) g (1_, 2_): = 1_ + 2_ и т. Д.

x = f ()

у = г (х)

z = h (x, h2 (y))

и т.д...

Вы пишете, что программа должна делать в форме уравнений, определяющих новые значения (примечание: не переменные) как функции ранее определенных значений. Вы также определяете функции как отношения. Это действительно очень похоже на способ написания математических теорем.


Я могу понять математические функции лучше, чем странный синтаксис haskell и других. У вас есть какая-нибудь ссылка, которая связывает математические шаги с синтаксисом любого функционального языка.
RainDoctor

Этот ответ точен. FP станет понятным, когда вы поймете (и усвоите), что пишете математические функции, а не пошаговые процедуры. Большинство людей сначала изучают процедурное программирование, и этот багаж огромен. Я думаю, что «функции» в процедурных языках должны называться «процедурами».
Какаджи

2

IMO Mathematica, как пример языка, на котором вы можете использовать функциональное программирование, не требует сильных знаний математики. На самом деле, я не думаю, что сталкивался с чем-то вроде функционального программирования во время своего базового математического образования. Я начал программировать на Mathematica в стиле C, и обнаружил функциональное программирование только спустя годы. Я не думаю , что основные функциональные конструкции программирования , такие как Map, Apply, NestListи т.д. требуют математики фона на всех.


1

на самом деле, нет. Функциональное программирование - это всего лишь методология, но оно основано на лямбда-исчислении и тому подобном.

Замыкания - это (маленькая) попытка ввести концепции функционального программирования в процедурные языки. вместо этого for(int i =0 ; i < num; i++) doStuff(arr[i]);вы можете вместо этого предположить, что элементы массива по своей сути могут иметь «материал, сделанный с ними», такarr.each do |el| doStuff(el) end


10
Вы только иллюстрируете анонимную функцию, а не замыкание. Википедия: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

Короткий ответ: да, потому что все с определенной степенью формализации (например, языки программирования) тесно связано с математикой, для различной степени математики.

Но использование языка программирования строго не требует знакомства с математикой, например, с теоретическими основами языков. Вам не нужно знать, что такое контекстно-свободный язык и какие законы и свойства есть у такого языка, чтобы использовать его. Точно так же вам не нужно быть германистом или романистом, чтобы говорить по-немецки или по-французски.

«Математическая» нотация не является общим свойством функциональных языков. Scala и все языки на основе Lisp имеют очень разные синтаксисы по сравнению с Haskell.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.