Функциональное программирование считается более "математическим"?Если так, то почему? - PullRequest
4 голосов
/ 23 декабря 2010

Время от времени я слышу, как кто-то говорит что-то вроде «функциональные языки программирования более математичны». Это так? Если да, то почему и как? Является ли, например, схема более математической, чем Java или C? Или Хаскелл?

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

Спасибо!

Ответы [ 5 ]

9 голосов
/ 23 декабря 2010

Существует две распространенные (*) модели вычисления : модель Lambda Calculus (LC) и модель Тьюринга (TM).

Лямбда-исчисление подходит к вычислениям, представляя их с помощью математического формализма, в котором результаты создаются композицией функций в области типов.LC также относится к Combinatory Logic , который считается более обобщенным подходом к той же теме.

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

Эти разные модели вычислений являются основой для разных семейств языков программирования.Лямбда-исчисление породило такие языки, как ML , Scheme и Haskell .Модель Тьюринга породила C , C ++ , Pascal и другие.Как обобщение, большинство языков функционального программирования имеют теоретическую основу в лямбда-исчислении.

Из-за природы лямбда-исчисления возможны определенные доказательства поведения систем, построенных на его принципах.Фактически доказуемость (т. Е. правильность ) является важной концепцией в LC и делает возможными определенные виды рассуждений и выводов о системах LC.LC также связана (и опирается на) теорию типов и теорию категорий.

В отличие от этого, модели Тьюринга в меньшей степени полагаются на теорию типов, а больше на структурирование вычислений как серии переходов состояний в базовой модели.Модели вычислений Тьюринга более сложны в утверждениях и не поддаются тем же видам математических доказательств и манипуляций, что и программы на основе LC.Однако это не означает, что такой анализ невозможен - некоторые важные аспекты моделей TM используются при изучении виртуализации и статического анализа программ.

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

(*) Существуют и другие модели вычислений, но они менее актуальны для этого обсуждения.

8 голосов
/ 23 декабря 2010

Чистые функциональные языки программирования являются примерами функционального исчисления , и поэтому в теории программы, написанные на функциональном языке, могут быть обоснованы в математическом смысле. В идеале вы хотели бы иметь возможность «доказать», что программа верна.

На практике такое рассуждение очень сложно, за исключением тривиальных случаев, но все же возможно в некоторой степени. Вы могли бы доказать некоторые свойства программы, например, вы могли бы доказать, что при всех числовых входах в программу выходные данные всегда ограничены в определенном диапазоне.

В нефункциональных языках с изменяемым состоянием и побочными эффектами попытки рассуждать о программе и «доказать» правильность практически невозможны, по крайней мере, на данный момент. С нефункциональными программами вы можете продумывать программу и убеждать себя, что ее части верны, и вы можете запускать модульные тесты, которые проверяют определенные входные данные, но обычно невозможно создать строгие математические доказательства поведения программы. *

4 голосов
/ 23 декабря 2010

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

0 голосов
/ 23 декабря 2010

Математическое ощущение функциональных языков программирования происходит от нескольких различных особенностей.Наиболее очевидным является имя;«функциональный», то есть с использованием функций, которые являются фундаментальными для математики.Другая важная причина заключается в том, что функциональное программирование включает в себя определение набора вещей, которые всегда будут истинными, которые благодаря своим взаимодействиям достигают желаемых вычислений - это похоже на то, как выполняются математические доказательства.

0 голосов
/ 23 декабря 2010

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

По сравнению с императивным программированием, оно не предписывает, как именночто-то сделать, но что нужно сделать.Это отражает топологию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...