【发布时间】:2019-02-03 03:15:37
【问题描述】:
我目前正在学习 Haskell,并且遇到过几次“函数应用程序”这个词,但并没有真正理解它的含义。
有人可以尝试在 Haskell 中解释这个术语的含义,或者最终解释一下这个词的含义吗?
【问题讨论】:
标签: haskell terminology
我目前正在学习 Haskell,并且遇到过几次“函数应用程序”这个词,但并没有真正理解它的含义。
有人可以尝试在 Haskell 中解释这个术语的含义,或者最终解释一下这个词的含义吗?
【问题讨论】:
标签: haskell terminology
这里的“函数应用”与“将参数传递给函数”大致相同。例如,如果您有一个函数f :: Int -> Int 和一个x :: Int,那么f x :: Int 是一个表达式,其中表达式x 被“应用”为f * 的参数。
在 Haskell 中没有真正的内置运算符用于执行函数应用程序(除了将函数与其参数分开的空格)。 Prelude 导出了 ($) 函数,这(除了一些不寻常的怪事)只是函数应用程序:即 ($) f x 与 f x 相同(这主要用于一些句法技巧,尽管它偶尔有其他用途也)
*:有人向我指出,人们通常认为这是将函数应用于参数而不是函数的参数,我认为这对于理解应用程序的含义没有太大区别虽然
【讨论】:
f(函数)应用于x(参数)。
(+) :: Int -> Int -> Int 的函数。通过提供比函数可以接受的参数更少的参数——部分应用函数——我们可以生成一个新函数f = (42 +) :: Int -> Int。这个通过部分应用+ 定义的新函数将使任何提供的值增加42。
f 应用到x”和“将x 传递给f”
这主要是标准的英语用法。
“函数应用”只是函数的具体应用。上下文中的“应用”只是与动词“应用”相对应的名词;它意味着应用某物的行为或过程。
“应用某物”意味着使用它。 “将 A 应用于 B”意味着使用 A 对 B 做某事。因此“应用函数”意味着在某物上使用/调用该函数。在 Haskell 中,当我编写表达式 f x 时,我将 f 应用于 x。
因此“函数应用”只是应用函数的一般概念的一个术语。在特定的上下文中,它可能被用来谈论:
$ 通常被解释为“函数应用运算符”,因为 f $ x = f x 或多或少是它的定义或任何相关的。
【讨论】:
“应用”一个函数与调用它是一样的,通过提供一个参数。
-- A function
f :: a -> a
f x = x
-- Application of f
f 100
【讨论】:
另一个例子:
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。与 (,) 元组构造函数的概念相同。
【讨论】:
TupleSections 选项。 (,) 是构造函数,不是普通函数。