Haskell中的'@'运算符是什么意思?

3

我有这段代码:

  mix xxs@(x:xs) yys@(y:ys)
  | x<=y = x : mix xs yys
  | otherwise = y : mix xxs ys

但是我不知道 @ 是什么意思。


我使用你的代码时出现了“解析错误(可能是缩进不正确或括号不匹配)”。 - Will Ness
2个回答

8

这不是一个运算符,而是模式语法的一部分。对于yys@(y:ys)的情况,如果第二个参数成功匹配到(y:ys),整个匹配的值也会绑定到yys

所以,如果你调用min [1,2] [3,4],那么y将被绑定到3ys将被绑定到[4]yys将被绑定到[3,4]


4

这是一个as-pattern [Haskell 教程],它用于同时引用整个列表xxs、列表头部x和列表尾部xs(当然同样适用于第二个列表)。

只有在所有子模式匹配的情况下,该模式才会被触发,因此在这种情况下,如果两个列表都非空,则模式将被匹配。通常作为优化使用,因为现在可以在函数体中使用第一个或第二个参数xxsyys


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接