Главная страница

Applied Math Text 1


Скачать 13.86 Kb.
НазваниеApplied Math Text 1
Анкорapplied math
Дата17.05.2022
Размер13.86 Kb.
Формат файлаdocx
Имя файлаApplied Math Text 1.docx
ТипДокументы
#533918

Applied Math Text 1

Функциональное программирование существенно отличается от императивного программирования тем, что вычисления для функциональных программ включают вычисление математических функций. Императивное программирование, напротив, предполагает выполнение последовательных (или итеративных) команд, которые изменяют состояние системы. Оператор присваивания изменяет значение переменной. То есть переменная x может представлять 2 в какой-то момент выполнения программы, и после инструкции присваивания Pascal x: = 3 (т.е. х присваивается 3) значение x изменяется и теперь равно 3. Другими словами, для императивной программы значение переменной x может изменяться во время выполнения программы.

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

В функциональных языках программирования используются функции высшего порядка, рекурсия, ленивое и нетерпеливое вычисление, монады и системы вывода типов Хиндли-Милнера. Эти языки в основном использовались в академических кругах, но были и некоторые промышленные применения, включая использование Erlang для параллельных приложений в промышленности. Корни функциональных языков программирования уходят в лямбда-исчисление, разработанное Черчем в 1930-х годах. Лямбда-исчисление обеспечивает абстрактную основу для описания математических функций и их вычисления. Чёрч использовал лямбда-исчисление, чтобы доказать, что не существует решения проблемы решения для арифметики первого порядка в 1936 году. То есть он доказал, что не существует общего алгоритма, который решает, является ли данное утверждение в арифметике первого порядка истинным или ложным.

Любую вычислимую функцию можно выразить и оценить с помощью лямбда-исчисления или машин Тьюринга. Вопрос о том, эквивалентны ли два выражения в лямбда-исчислении, не может быть решен с помощью общего алгоритма, и этот результат был доказан до проблемы разрешимости. В лямбда-исчислении используются правила преобразования, одним из которых является подстановка переменных. Первоначальное исчисление, разработанное Черчем, было нетипичным; однако в последние годы были разработаны типизированные лямбда-исчисления. Лямбда-исчисление повлияло на языки функционального программирования, такие как Lisp, ML и Haskell.

Функциональное программирование использует понятие функций высшего порядка. Вышестоящие функции принимают другие функции в качестве аргументов и могут возвращать функции в качестве результатов. Производная функция d/dxf (x) = f'(x) является функцией более высокого порядка. Он принимает функцию в качестве аргумента и возвращает функцию в качестве результата. Производная функции Sin (x) равна Cos (x). Функции высшего порядка позволяют каррирование, которое является техникой, разработанной Шонфинкелем. Он позволяет применять функцию с несколькими аргументами к каждому из ее аргументов по одному, причем каждое приложение возвращает новую функцию (более высокого порядка), которая принимает следующий аргумент.

Джон Маккарти разработал LISP в Массачусетском технологическом институте в конце 1950-х годов, и этот язык включает в себя многие функции, имеющиеся в современных языках функционального программирования. Функциональный язык программирования Scheme построен на идеях LISP, упрощен и улучшен на основе языка.


написать администратору сайта