haskell - 不理解连接运算符 (++)

标签 haskell

我有一个关于列表串联的问题。函数 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/

相关文章:

haskell - 错误: Couldn't match expected type Eval [a]' against inferred type()

haskell - "applicative"是什么意思?

scala - Scala中的参数化数据类型

haskell - Splice 是否支持 Unicode?

haskell - 帮助 cabal 安装包阴影错误

Haskell 约束族

parsing - 使普通的一元函数与等效的一元转换器一起工作

haskell - Haskell相互递归的澄清

haskell - 你能 "partially"派生一个 Typeclass 吗?

haskell - HTF 不测试 TH 生成的 Prop