почему все учебники по функциональному программированию такие математические?

20

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

Справочная информация: я пишу программное обеспечение в течение 12 лет. Я понимаю некоторые понятия, такие как замыкания, функции первоклассных граждан и генерики. У меня могут быть проблемы с функциями более высокого порядка на некотором продвинутом уровне, но я хотел бы верить, что у меня есть базовые знания. Монады кусают меня в задницу, и на данный момент я не прошел через это (я уверен, что в конечном итоге, потому что я настойчив).

Чарльз Ламберт
источник
только немного, я не пробовал другие 3 языка, которые вы предложили
Чарльз Ламберт
F # проще всего начать, если вы знаете C #. Не требует больших знаний математики.
CND
6
Попробуйте SICP - он не выходит за рамки математики средней школы.
SK-logic
@Charles Lambert - посмотрите OfficeSpace, и вы получите вторую часть комментария Иова.
Джетти
@Charles Lambert: «Узнай, что Хаскель за великое благо не слишком математику»: D
Матье М.

Ответы:

21

Они используют математику, потому что функциональное программирование очень хорошо в моделировании математических конструкций и тесно связано с математическими понятиями, в частности, с лямбда-исчислением. Кроме того, поскольку ввод / вывод, как правило, является довольно сложным и сложным предметом для многих языков функциональной парадигмы, математика с помощью REPL различных языков сначала становится хорошим способом обучения языку.

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

«Императивные языки» такие же математические, но все они основаны на арифметике, поскольку они ближе к машине, которую можно добавить только в любом случае. Функциональные языки с более высокой абстракцией больше склоняются к математике. Общее использование в академических кругах также не помогает, так как они привыкают и таким образом преподаются людьми, которые много знают математику и обучают людей, которые, как ожидают, изучат много математики. Таким образом, можно, так сказать, «замять это», но это вряд ли с учетом этих факторов.

http://learnyouahaskell.com/ - Вероятно, это одно из самых приятных введений в функциональное программирование, я дважды проверил, и там нет ничего, кроме базовой алгебры и теории графов.

Мировой инженер
источник
Learnyousomeerlang.com также вариант, если вы хотите что-то еще, кроме Haskell.
Трэвис
11

Есть множество причин, и все они связаны между собой:

  • Большинство функциональных языков программирования были разработаны в академическом контексте, где CS тесно связана с математикой, поэтому люди, которые их проектировали, имеют сильные знания по математике (и склонны полагать, что то же самое относится к своей аудитории)
  • Функциональное программирование - это парадигма, особенно подходящая для решения сложных математических задач.
  • Теория FP, лямбда-исчисление (в основном, абстрактная теория функций), является разделом математики, и языки FP имеют тенденцию использовать понятия и терминологию из лямбда-исчисления.

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

tdammers
источник
3
+1 для развитых в академических кругах: люди, создающие функциональные языки, основывают его на математических свойствах, так что это протекает ...
Матье М.
@Matthieu M: использование языка программирования на основе математических свойств помогает писать правильное программное обеспечение и сокращает время разработки. Например, я определенно трачу меньше времени на отладку своего кода на Haskell, чем на C ++. Сокращение времени разработки (и затрат) является огромным практическим преимуществом, которое может оправдать усилия по изучению математики. Как указал tdammers, есть несколько дополнительных концепций, которые необходимо изучить, но после того, как вы поймете несколько основных идей, FP так же интуитивен, как и императивное программирование.
Джорджио
Я также согласен с тем, что и императивные языки могут быть описаны с использованием математических понятий. Фактически, математическое описание императивной программы обычно намного сложнее, чем математическое описание функциональной программы. ИМО объясняет, почему императивные языки с большей вероятностью содержат ошибки: сложнее полностью понять императивный код. По крайней мере, это мой личный опыт работы с несколькими годами функционального программирования и еще многими годами императивного программирования.
Джорджио
@ Джорджио: есть разница между «просачиванием в язык» (каким-то образом) и «просачиванием в учебник». Я почти уверен, что вы могли бы написать учебник по функциональному программированию без особой математики. Конечно, будут ли они лучше или нет, зависит от споров и, вероятно, субъективно.
Матье М.
@MatthieuM .: Большое спасибо за разъяснение того, что вы имели в виду под утечкой (просочилась в учебник): ваш комментарий теперь имеет для меня гораздо больше смысла. Я согласен с вами, что учебник по FP должен содержать как можно меньше математики. Я как-то неверно истолковал ваш комментарий: работая в промышленности и в академических кругах, я немного сверхчувствителен к тому, что «в академических кругах они делают много математических упражнений, которые бесполезны в реальном мире». +1 за ваш комментарий и ответ tdammer.
Джорджио
5

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

Трудно учиться, только если вы не привыкли думать о компьютерном программировании как о математической основе.

Рудольф Олах
источник
4
Фундаментальные вычисления - это сочетание логики и арифметики. Это не математика. Вы не можете выразить инструкцию ветвления в математической формуле - поэтому она не может быть основана на математике. Толпа функционального программирования хотела бы, чтобы она основывалась на математике, поэтому они разрабатывают языки программирования, которые ведут себя так, как будто не существует инструкций ветвления.
Джеймс Андерсон
9
@ Джеймс Андерсон, ты говоришь, что логика и арифметика не математика? И я видел тонны математических формул, которые содержат инструкции ветвления (обычно выраженные в виде переключателя).
Питер Тейлор
4
Арифметическое подмножество математики, которая имеет дело с простым вычислением. Логика - это надмножество математики, которая является основой всей рациональной мысли. Между прочим, функциональное программирование - это очень хорошая идея для решения задач, которые можно выразить математически; не так жарко, когда вы пытаетесь следовать нелогичному беспорядку произвольных правил, таких как GAP (общепринятые методы бухгалтерского учета)
Джеймс Андерсон
6
@ ian31, как бы вы определили слово " принципиально "? Вы знаете, гражданское строительство также основано на физике и математике, в то время как практически это все о создании вещей для людей, чтобы использовать и наслаждаться. И, в любом случае, прежде чем даже начать думать о программировании решения какой-то реальной проблемы, вы должны перевести эту проблему в некоторый математический формализм. Это просто не сработает. Программирование это все о формализмах.
SK-logic
6
@ ian31, языки программирования - это формализмы. Их поведение строго определено и предсказуемо. Таким образом, кодирование любой конкретной модели (даже если она неопределенная) превращает ее в своего рода формализм. Математика хорошо вписывается в эту расплывчатую область, несмотря на то, что в целом она воспринимается как сияющий кристально чистый мир четко определенных строгих моделей.
SK-logic
1

Я думаю, что «Маленький интриган» - это отличное введение в функциональное программирование, и оно совсем не математическое. Он не попадает в монады, так что он может быть слишком базовым для вашего вкуса, но делает вывод Y-комбинатора ближе к концу.

Я недавно прошел через это после того, как 12 лет назад не занимался никаким функциональным программированием, и это было отличным занятием, я определенно чувствую себя готовым заняться более продвинутыми вещами после проработки большинства проблем в книге с использованием Racket.

Пол Санвальд
источник