Haskell中的术语“功能应用程序”

时间:2018-08-28 13:06:27

标签: haskell terminology

我目前正在学习Haskell,并且在没有真正理解其含义的情况下遇到过几次“功能应用程序”一词。

有人可以在Haskell或最终在一般意义上解释该术语的含义吗?

4 个答案:

答案 0 :(得分:8)

“函数应用程序”在这里仅表示与“将参数传递给函数”相同的内容。例如,如果您有一个函数f :: Int -> Int和一个x :: Int,则f x :: Int是一个表达式,其中表达式x被“应用”为f的参数*。

Haskell中没有用于执行函数应用程序的真正的内置运算符(将函数与其参数分开的空格除外)。尽管Prelude导出了($)函数,但它只是功能应用程序(除了一些不寻常的怪异):即($) f xf x相同(这主要用于某些语法)技巧,尽管偶尔也有其他用途)


*:有人向我指出,人们通常是将函数应用于自变量而不是函数自变量,我认为这对于理解此处应用的含义没有多大区别虽然

答案 1 :(得分:3)

通过提供参数,“应用”函数与调用该函数相同。

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

-- Application of f
f 100

答案 2 :(得分:2)

主要是标准英语用法。

“功能应用程序”仅是特定于功能的应用程序。在本文中,“应用”只是与动词“ apply”相对应的名词;这意味着应用某些东西的行为或过程。

“应用某些内容”意味着使用它。 “将A应用于B”意味着使用A对B进行某些操作。因此,“将函数应用于”意味着对某事物使用/调用该函数。在Haskell中,当我写表达式f x时,我正在将f应用于x

因此,“功能应用程序”仅是应用功能的一般概念的术语。在特定情况下,可以用来谈论:

  1. 广泛应用功能的广义概念
  2. 用于以编程语言表达“将该函数应用于该参数”的语法(例如“函数应用程序是Haskell中的邻接关系”,或者“ Python中的函数应用程序使用类似C的语法”)
  3. 正在应用功能的特定代码
  4. 在Haskell中,$通常被解释为“函数应用运算符”,因为f $ x = f x或多或少是其定义

或任何相关内容。

答案 3 :(得分:0)

另一个例子:

data C = A Int Int | B String

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

f2 :: Int -> C
f2 = A 4

f3 = (4,) 

f4 = (,5)

f5 = (,)

我让你玩最后几个的类型。

因此,AB也是函数,B正在等待String,并返回新类型C。与(,)元组的构造函数相同。