Haskell 中的这个表达式是什么,我该如何解释它?
What is this expression in Haskell, and how do I interpret it?
我正在学习基础知识 Haskell 这样我就可以配置 Xmonad,并且我 运行 进入了这个代码片段:
newKeys x = myKeys x `M.union` keys def x
现在我明白反引号中的 M.union
是什么意思了。以下是我的解释:
newKeys(x) = M.union(myKeys(x),???)
我不知道 keys def x
是怎么回事。像keys(def(x))
吗?还是keys(def,x)
?还是 def
某种其他关键字?
是keys(def,x)
。
这是函数应用的基本 Haskell 语法:首先是函数本身,然后是用空格分隔的参数。例如:
f x y = x + y
z = f 5 6
-- z = 11
但是,如果没有更大的上下文,则不清楚 def
是什么。
回应您的评论:不,def
不能是一个以 x
作为参数的函数,然后将其结果传递给 keys
。这是因为函数应用是左结合的,这基本上意味着在任何由空格分隔的东西中,只有第一个是被应用的函数,其余的都是它的参数。为了表达keys(def(x))
,必须写成keys (def x)
.
如果你想技术超群,那么正确的思考方式是所有的函数只有一个参数。当我们声明一个有两个参数的函数时,例如f x y = x + y
,我们真正的意思是它是一个参数的函数,returns 另一个函数,然后我们可以将剩余的参数传递给它。换句话说,f 5 6
意味着 (f 5) 6
。
这个想法是 Haskell(以及任何 ML 分支)语法中的核心内容之一。它是如此重要以至于它有自己的名字——"currying"(在数学家 Haskell Curry 之后)。
我正在学习基础知识 Haskell 这样我就可以配置 Xmonad,并且我 运行 进入了这个代码片段:
newKeys x = myKeys x `M.union` keys def x
现在我明白反引号中的 M.union
是什么意思了。以下是我的解释:
newKeys(x) = M.union(myKeys(x),???)
我不知道 keys def x
是怎么回事。像keys(def(x))
吗?还是keys(def,x)
?还是 def
某种其他关键字?
是keys(def,x)
。
这是函数应用的基本 Haskell 语法:首先是函数本身,然后是用空格分隔的参数。例如:
f x y = x + y
z = f 5 6
-- z = 11
但是,如果没有更大的上下文,则不清楚 def
是什么。
回应您的评论:不,def
不能是一个以 x
作为参数的函数,然后将其结果传递给 keys
。这是因为函数应用是左结合的,这基本上意味着在任何由空格分隔的东西中,只有第一个是被应用的函数,其余的都是它的参数。为了表达keys(def(x))
,必须写成keys (def x)
.
如果你想技术超群,那么正确的思考方式是所有的函数只有一个参数。当我们声明一个有两个参数的函数时,例如f x y = x + y
,我们真正的意思是它是一个参数的函数,returns 另一个函数,然后我们可以将剩余的参数传递给它。换句话说,f 5 6
意味着 (f 5) 6
。
这个想法是 Haskell(以及任何 ML 分支)语法中的核心内容之一。它是如此重要以至于它有自己的名字——"currying"(在数学家 Haskell Curry 之后)。