我有关于列表连接的问题.函数加上加号(++)与括号不同
(++ "abc") ("xyz") >>> it's xyzabc
(++) "abc" "xyz" >>> it's abcxyz
Run Code Online (Sandbox Code Playgroud)
我认为这是因为:
(++ "abc") ("xyz") >>> "xyz" ++ "abc"
(++) "abc" "xyz" >>> "abc" ++ "xyz"
Run Code Online (Sandbox Code Playgroud)
但为什么,并有任何文件谈论这个?
我继续测试"减法"功能.结果如我所料:
(subtract 10) (5) >>> -5
(subtract) 10 5 >>> -5
Run Code Online (Sandbox Code Playgroud)
由于++是一个运算符,Haskell期望它处于中缀位置.在任何一方添加parens都会告诉Haskell将其视为前缀函数.这就是为什么
(++) "abc" "xyz" -- "abc" ++ "xyz"
Run Code Online (Sandbox Code Playgroud)
它的工作方式.然而,在运算符的一侧有一个paren,就像(++ "abc")或者("abc" ++)是一个特殊的东西叫做一个部分 - 它本质上产生一个函数,可以"填补"缺少的参数
(++ "abc") -- equivalent to `\x -> x ++ "abc"`
("abc" ++) -- equivalent to `\x -> "abc" ++ x`
Run Code Online (Sandbox Code Playgroud)
那么,(++ "abc") ("xyz")相当于(\x -> x ++ "abc") ("xyz")相当于"xyz" ++ "abc".