我有一个关于列表串联的问题。函数 plus 加 (++) 的工作方式与括号不同
(++ "abc") ("xyz") >>> it's xyzabc
(++) "abc" "xyz" >>> it's abcxyz
<小时/>
我认为这是因为:
(++ "abc") ("xyz") >>> "xyz" ++ "abc"
(++) "abc" "xyz" >>> "abc" ++ "xyz"
但是为什么,有任何文件谈论这个吗?
我继续用“减法”功能进行测试。结果正如我所料:
(subtract 10) (5) >>> -5
(subtract) 10 5 >>> -5
最佳答案
由于 ++
是一个运算符,Haskell 希望它位于中缀位置。在任一侧添加括号将告诉 Haskell 将其视为前缀函数。这就是为什么
(++) "abc" "xyz" -- "abc" ++ "xyz"
按照它的方式工作。但是,仅在运算符的一侧有括号,例如 (++ "abc")
或 ("abc"++)
是一种特殊的东西,称为 section -它本质上产生一个函数来“填充”缺失的参数
(++ "abc") -- equivalent to `\x -> x ++ "abc"`
("abc" ++) -- equivalent to `\x -> "abc" ++ x`
那么,(++ "abc") ("xyz")
等价于 (\x -> x++ "abc") ("xyz")
相当于 "xyz"++ "abc"
。
关于haskell - 不理解连接运算符 (++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40908292/