Термин «функция приложения» в Haskell - PullRequest
0 голосов
/ 28 августа 2018

В настоящее время я изучаю Haskell, и пару раз встречал термин «применение функции», не понимая, что именно он подразумевает.

Может ли кто-нибудь попытаться объяснить значение этого термина в Хаскеле или, в конце концов, вообще?

Ответы [ 4 ]

0 голосов
/ 29 августа 2018

В основном это стандартное использование английского языка.

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

«Применять что-то» означает использовать это. «Применить A к B» означает сделать что-то для B, используя A. Таким образом, «применить функцию» означает использовать / вызывать функцию для чего-либо. В Хаскеле, когда я пишу выражение f x, я применяю f к x.

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

  1. Общее представление о применении функций в целом
  2. Синтаксис, используемый для выражения «применить эту функцию к этому аргументу» на языке программирования (например, «приложение функции - по смежности в Haskell», или «приложение функции в Python использует C-подобный синтаксис»)
  3. Определенный бит кода, который применяет функцию
  4. В Haskell $ часто объясняется как «оператор приложения функции», поскольку f $ x = f x более или менее является его определением

Или что-нибудь связанное.

0 голосов
/ 28 августа 2018

«Применение» функции аналогично ее вызову путем предоставления аргумента.

-- A function
f :: a -> a
f x = x

-- Application of f
f 100
0 голосов
/ 28 августа 2018

Другие примеры:

data C = A Int Int | B String

f1 :: Int -> Int -> C
f1 = A

f2 :: Int -> C
f2 = A 4

f3 = (4,) 

f4 = (,5)

f5 = (,)

Я позволю вам поиграть с типами последних.

так, A и B также являются функциями, B ожидает String и возвращает новый тип, C. То же самое с (,) конструктором кортежей.

0 голосов
/ 28 августа 2018

«Применение функции» здесь означает более или менее то же самое, что и «передача аргумента функции». Например, если у вас есть функция f :: Int -> Int и x :: Int, тогда f x :: Int - это выражение, где выражение x «применяется» в качестве аргумента для f *.

В Haskell нет реального встроенного оператора для выполнения функции приложения (кроме пробела, отделяющего функцию от ее аргумента). Prelude экспортирует функцию ($), которая (за исключением некоторых необычных особенностей) является просто приложением функции: то есть ($) f x - это то же самое, что и f x (это в основном используется для некоторых синтаксических приемов, хотя иногда оно используется и для других целей). а также)


*: Мне было отмечено, что люди обычно думают об этом с точки зрения применения функции к аргументу, а не к аргументу функции, я не думаю, что это имеет большое значение для понимания смысла применения здесь хотя

...