我正在学习基本的Haskell,所以我可以配置Xmonad,我遇到了这段代码:
newKeys x = myKeys x `M.union` keys def x
Run Code Online (Sandbox Code Playgroud)
现在我明白了M.union
反引号的含义和含义.这就是我解释它的方式:
newKeys(x) = M.union(myKeys(x),???)
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么做keys def x
.是keys(def(x))
吗?还是keys(def,x)
?或者是def
某种其他关键字?
Fyo*_*kin 10
是的keys(def,x)
.
这是函数应用程序的基本Haskell语法:首先是函数本身,然后是由空格分隔的参数.例如:
f x y = x + y
z = f 5 6
-- z = 11
Run Code Online (Sandbox Code Playgroud)
但是,目前尚不清楚def
没有更大背景的情况.
响应你的评论:不,def
不能是一个x
作为参数的函数,然后传递给它的结果keys
.这是因为函数应用程序是左关联的,这基本上意味着在由空格分隔的任何事物中,只有第一个是被应用的函数,其余的是它的参数.为了表达keys(def(x))
,人们必须写keys (def x)
.
如果你想成为超级技术人员,那么思考它的正确方法是所有功能都只有一个参数.当我们声明两个参数的函数时,例如f x y = x + y
,我们真正的意思是它是一个参数的函数,它返回另一个函数,然后我们可以传递剩余的参数.换句话说,f 5 6
意味着(f 5) 6
.
这个想法是Haskell(以及任何ML offshoot)语法中的核心内容之一.它非常重要,它有自己的名字 - "currying"(在数学家Haskell Curry之后).
归档时间: |
|
查看次数: |
117 次 |
最近记录: |