来自haskell文档: 标识符在词汇上分为两个名称空间(第1.4节):以小写字母(变量标识符)开头的名称空间和以大写字母开头的名称空间(构造函数标识符)。
因此,包含常量值的变量,即a=4和函数名add add a b = a + b都是变量标识符,对吗?我们可以说函数名是可变的吗?
来自另一个学术来源: F(Patter1).(Pattern2)=表达式 ..where模式可以是构造函数或变量,而不是定义的函数。
这就是我困惑的地方。正如我可以做的那样,在g是一个函数的情况下,我再次看到函数名是变量。是真的?那么,“未定义的函数”是什么意思呢?
发布于 2014-01-13 00:49:04
函数名可以是变量标识符,除非它是像+这样的运算符。
这是一篇关于词法 matters的声明。您不能由此推断函数名是一个变量。(因为变量不是词汇。)
情况正好相反,就像在
f . g = \a -> f (g a)其中f和g是变量,即绑定到某些未知的预先值的名称,但我们知道这些值必须是函数。
发布于 2014-01-14 11:26:50
命名函数实际上只是一个全局变量,它的“值”恰好是一个函数。例如,
id x = x还不如写成
id = ( \ x -> x )哈斯克尔没有明确区分这两种情况。甚至类型签名也是这样写的:
id :: x -> x因此,id只是一个值,它的值具有x -> x类型(即函数)。
有人说运算符不是变量,这是不正确的。
let (<+>) = \ x y -> (x+y)/(x*y) in 5 <+> 6您甚至可以做一些非常可怕的事情,比如编写一个循环,在这个循环中<+>的内容每次都会发生变化。(但为什么会有人这样做呢?)
https://stackoverflow.com/questions/21082242
复制相似问题