【问题标题】:The term "function application" in HaskellHaskell 中的术语“函数应用程序”
【发布时间】:2019-02-03 03:15:37
【问题描述】:

我目前正在学习 Haskell,并且遇到过几次“函数应用程序”这个词,但并没有真正理解它的含义。

有人可以尝试在 Haskell 中解释这个术语的含义,或者最终解释一下这个词的含义吗?

【问题讨论】:

    标签: haskell terminology


    【解决方案1】:

    这里的“函数应用”与“将参数传递给函数”大致相同。例如,如果您有一个函数f :: Int -> Int 和一个x :: Int,那么f x :: Int 是一个表达式,其中表达式x 被“应用”为f * 的参数。

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


    *:有人向我指出,人们通常认为这是将函数应用于参数而不是函数的参数,我认为这对于理解应用程序的含义没有太大区别虽然

    【讨论】:

    • 我会说反过来:f(函数)应用于x(参数)。
    • @melpomene 啊,抱歉,我不确定在英语中哪种解释更有意义。
    • 为了获得更多乐趣@Mr.Eivind 可能还想知道术语“部分函数应用程序”。考虑一个接受多个参数(+) :: Int -> Int -> Int 的函数。通过提供比函数可以接受的参数更少的参数——部分应用函数——我们可以生成一个新函数f = (42 +) :: Int -> Int。这个通过部分应用+ 定义的新函数将使任何提供的值增加42。
    • "function application" 来自数学,而"x is applied to f" 只是不正确的用法(就像您不将皮肤涂抹在乳液上一样),所以我建议只是改变答案。要添加的另一件好事可能是清楚地指出,在谈论“函数应用程序”时,我们正在谈论特定的句法构造(即函数应用程序是GHC的解析器理解)而不是例如程序评估的属性。
    • 是的,我喜欢“将f 应用到x”和“将x 传递给f
    【解决方案2】:

    这主要是标准的英语用法。

    “函数应用”只是函数的具体应用。上下文中的“应用”只是与动词“应用”相对应的名词;它意味着应用某物的行为或过程。

    “应用某物”意味着使用它。 “将 A 应用于 B”意味着使用 A 对 B 做某事。因此“应用函数”意味着在某物上使用/调用该函数。在 Haskell 中,当我编写表达式 f x 时,我将 f 应用于 x

    因此“函数应用”只是应用函数的一般概念的一个术语。在特定的上下文中,它可能被用来谈论:

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

    或任何相关的。

    【讨论】:

      【解决方案3】:

      “应用”一个函数与调用它是一样的,通过提供一个参数。

      -- A function
      f :: a -> a
      f x = x
      
      -- Application of f
      f 100
      

      【讨论】:

      • 我真的很喜欢这个答案,简短而甜蜜,没有浪费一个字符
      【解决方案4】:

      另一个例子:

      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。与 (,) 元组构造函数的概念相同。

      【讨论】:

      • 最后三个需要启用TupleSections 选项。 (,) 是构造函数,不是普通函数。
      猜你喜欢
      • 1970-01-01
      • 2016-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多