Что между приложением функции и вызовом функции? - PullRequest
2 голосов
/ 01 марта 2012

Я слышал используемый термин «приложение функции» (в основном, связанный с Haskell), и кажется, что он просто означает «вызов функции».Страница википедии в основном называет это математическим термином для вызова функции:

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

В чем разница между вызовом функции и приложения-функции?

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

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

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

В Haskell приложение функции, скорее всего, ссылается надля каррирования функции одним аргументом.В Haskell все, что вам нужно, это пробелы для представления приложения функции (оператор $ не делает ничего, кроме изменения приоритета / группировки, чтобы разрешить меньше скобок; в отличие от LISP).Сравните это с «нормальными» обозначениями, которые мы изучаем в базовой алгебре и используем в нефункциональном программировании, где f(a,b,c) представляет функцию f, примененную к аргументам a,b,c.Я не думаю, что вы использовали бы термин «вызов функции», если бы вы не имели дело с абстракцией, которая фактически вызывала функции;что я даже не уверен, что Haskell имеет.Например, Haskell может иметь абстракцию, которая сокращает функции путем сопоставления с образцом ... или использование "вызова функции" может быть целесообразным в Haskell.

1 голос
/ 01 марта 2012

Объяснение Barebones:

Haskell и другие функциональные языки гораздо более абстрактно математичны, чем то, для чего предназначена функция.

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

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

...