Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 函数是一种变量吗?_Function_Variables_Haskell - Fatal编程技术网

Function 函数是一种变量吗?

Function 函数是一种变量吗?,function,variables,haskell,Function,Variables,Haskell,我过去认为变量是数据,函数是数据映射,它们在一般意义上是不同的。然而,当阅读一些语言标准(即Haskell)时,我发现该标准似乎将它们组合在一起(参见2.4和10.5,以及) 因此,我有几个关于变量和函数的问题(除了问题标题): 它们的语言特定意义(例如在Haskell中)是否也与它们的一般意义一致? (即前者是后者的一个子集。)或者一个意思有另一个意思的补语集? (我所说的“广义”是指数学。) “变量”的定义是什么? “拥有一个类型”是否定义了一件事“成为一个变量” 我认为“功能”的概念有以下

我过去认为变量是数据,函数是数据映射,它们在一般意义上是不同的。然而,当阅读一些语言标准(即Haskell)时,我发现该标准似乎将它们组合在一起(参见2.4和10.5,以及)

因此,我有几个关于变量和函数的问题(除了问题标题):

  • 它们的语言特定意义(例如在Haskell中)是否也与它们的一般意义一致?
    (即前者是后者的一个子集。)或者一个意思有另一个意思的补语集?
    (我所说的“广义”是指数学。)
  • “变量”的定义是什么?
    “拥有一个类型”是否定义了一件事“成为一个变量”
  • 我认为“功能”的概念有以下(结构化)方面。
    它的一个子方面确实有一个类型,那么,它是否使“函数”成为变量?
    功能(具有以下方面:)
    • 函数说明符/标识符:指定要引用的函数
    • 功能/映射:指定函数的功能,即它将哪些数据映射到哪些数据。(有以下方面:)
      • 映射类型:例如,在Haskell中,函数的类型可能为(a->b)

  • 编辑

    总结

    在阅读了所有的答案(它们真的很棒)之后,我意识到我的怀疑是因为“操作符”和“函数”之间的混淆:我错误地把这两个东西混淆了。 正确的理解应该是:“运算符”只是一个表示“函数”的符号

    请允许我借用E-Lisp简介中的解释,我觉得这非常有用:

    我们可以在前面讨论的基础上阐明Lisp的另一个特性 迄今为止,一个重要的特征是:象+这样的符号本身并不是指令集 供计算机执行。相反,使用符号,可能是暂时的, 作为定位定义或指令集的一种方式。我们看到的是这个名字 通过它可以找到说明。人名也是这样。 我可以被称为“鲍勃”;然而,我不是字母‘B’、‘o’、‘B’,而是am或was, 意识与一种特定的生命形式相联系的意识。名字是 不是我,但它可以用来指代我


    如果函数的思想是返回一个变量,那么可以假定它是调用者的变量。但我怀疑规范是否会将函数视为变量的子集,因为这并没有捕获函数的全部本质

    不,函数不是变量。函数是一个值(在Haskell、Python、JavaScript、Clojure和许多其他语言中,但不是在所有语言中)。变量(或符号、标识符)可以引用或绑定到值。因此,变量/符号/标识符可以引用函数

    你的子问题:

  • 嗯,是的。例如,数学中有高阶逻辑。数学中也有常用的高阶函数,如导数、积分和求和

  • IMHO,变量的定义并不是“有一个类型”——值也有类型,尽管可能有不同的意义——而是它们表示(代表、引用、指向)其他东西的能力

    “什么是变量?”可能应该作为一个单独的问题来问,因为根据我的理解,精确的答案出人意料地复杂,并且植根于数学史

  • 不,函数有类型并不意味着它们是变量

  • 仔细阅读你的问题,我认为这里有两个独立的问题:1)什么是某物?2)不同事物之间的相似性。所以,虽然您已经确定了变量和函数之间的相似性,但这并不意味着函数“是”变量,反之亦然。我将尝试用一个Java示例来说明这一点(请记住!):假设您有一个Java程序,它有两个类,
    Variable
    Function
    ,您想知道如何在它们之间创建继承关系。我的答案是,我不认为有一个函数——两个函数都不继承另一个——但您不需要一个,因为您可以创建捕获您感兴趣的方面的接口,然后为这两个类实现这些接口

    \ x -> E
    
    还有一些变化。如果表达式
    E
    具有类型
    b
    ,并且
    E
    中对
    x
    的所有引用都具有类型
    a
    ,则整个表达式的类型为
    a->b

    相反,类似于
    take
    (.)
    的内容是一个变量。事实证明,在每种情况下,该变量的类型都是
    a->b
    ,因此该变量表示一个函数

    由于Haskell是纯函数,我们保证用它所表示的值替换变量不会改变程序的含义

    (我暂时不考虑语法形式和值之间的区别,你可以在很长一段时间内不费吹灰之力地模糊这种区别。)

    这种自由替换参考值的概念是数学中变量的典型含义,尽管不是反映它的最核心方式

    通常,一个变量是一个未知的变量,它可能受到许多因素的约束。例如,它可以参与一个方程组,并被约束为该方程组的解

    a = (True, a)  -- invalid Haskell, but a valid concept! What is "a" here?
    
    Haskell变量不能如此直接地定义:变量可以参与的递归方程类型有限制,这些限制由Haskell的类型判断给出

    但尽管我试图区分“典型”数学变量和Haskell变量,但