Haskell中的这个表达式是什么?我如何解释它?

Haskell中的这个表达式是什么?我如何解释它?,haskell,xmonad,Haskell,Xmonad,我正在学习basic Haskell以便配置Xmonad,我遇到了以下代码片段: newKeys x = myKeys x `M.union` keys def x 现在我明白了backticks中的M.union是什么意思了。我是这样解释的: newKeys(x) = M.union(myKeys(x),???) 我不知道如何使用键def x。它是否像键(def(x))?或键(def,x)?或者是def某种其他关键字?它是键(def,x) 这是函数应用程序的基本Haskell语法:首先是

我正在学习basic Haskell以便配置Xmonad,我遇到了以下代码片段:

newKeys x  = myKeys x `M.union` keys def x
现在我明白了backticks中的
M.union
是什么意思了。我是这样解释的:

newKeys(x) = M.union(myKeys(x),???)
我不知道如何使用
键def x
。它是否像
键(def(x))
?或
键(def,x)
?或者是
def
某种其他关键字?

它是
键(def,x)

这是函数应用程序的基本Haskell语法:首先是函数本身,然后是由空格分隔的参数。例如:

f x y = x + y
z = f 5 6 
-- z = 11
但是,如果没有更大的上下文,则不清楚什么是
def

回应您的评论:否,
def
不能是以
x
为参数的函数,然后将其结果传递给
键。这是因为函数应用程序是左关联的,这基本上意味着在任何由空格分隔的东西中,只有第一个是应用的函数,其余的是它的参数。为了表示
键(def(x))
,必须编写
键(def x)

如果你想成为超级技术人员,那么正确的思考方式是所有函数都只有一个参数。当我们声明一个包含两个参数的函数时,例如fxy=x+y
,我们真正的意思是它是一个参数的函数,它返回另一个函数,然后我们可以将剩余的参数传递给它。换句话说,
f6
意味着
(f5)6

这是Haskell(以及任何ML分支)语法的核心内容之一。它非常重要,它有自己的名字——“Curry”(以数学家哈斯克尔·库里的名字命名)。

它是
键(def,x)

这是函数应用程序的基本Haskell语法:首先是函数本身,然后是由空格分隔的参数。例如:

f x y = x + y
z = f 5 6 
-- z = 11
但是,如果没有更大的上下文,则不清楚什么是
def

回应您的评论:否,
def
不能是以
x
为参数的函数,然后将其结果传递给
键。这是因为函数应用程序是左关联的,这基本上意味着在任何由空格分隔的东西中,只有第一个是应用的函数,其余的是它的参数。为了表示
键(def(x))
,必须编写
键(def x)

如果你想成为超级技术人员,那么正确的思考方式是所有函数都只有一个参数。当我们声明一个包含两个参数的函数时,例如fxy=x+y
,我们真正的意思是它是一个参数的函数,它返回另一个函数,然后我们可以将剩余的参数传递给它。换句话说,
f6
意味着
(f5)6


这是Haskell(以及任何ML分支)语法的核心内容之一。它有自己的名字“Curry”(以数学家哈斯克尔·库里的名字命名)是非常重要的。

它是
键(def,x)
,但是不清楚没有上下文的
def
是什么。@FyodorSoikin好的,酷。如果你可以发布一个回答,说明你如何知道它不是键(def(x)),我会投票并接受。如果你对上下文好奇,这里是链接。我只是想不依赖上下文来回答这个问题,这样我就能更好地理解语言。这是
键(def,x)
,但不清楚没有上下文的
def
是什么。@FyodorSoikin好的,酷。如果你可以发布一个回答,说明你如何知道它不是键(def(x)),我会投票并接受。如果你对上下文好奇,这里是链接。我只是想不依赖上下文来回答这个问题,这样我就能更好地理解语言。我理解这一点,但def不能是一个以x为参数的函数,使其成为键(def(x))?完美!非常感谢。哇,最后一段真的很有趣。
def
来自。我理解这一点,但def不能是一个以x为参数的函数,使其成为键(def(x))?完美!非常感谢。哇,最后一段真的很有趣。
def
来自。