Haskell 中的“@”运算符是什么意思

What is the meaning of the '@' operator in Haskell

我有这个代码:

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

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

它不是运算符;它是模式语法的一部分。在 yys@(y:ys) 的情况下,如果第二个参数成功匹配 (y:ys),则匹配的整个值也将绑定到 yys

因此,如果您调用 min [1,2] [3,4],则 y 将绑定到 3ys 将绑定到 [4],而 yys[3,4].

这是一个 as-pattern [Haskell tutorial] 它用于引用整个列表 xxs、列表的头部 x 和列表的尾部 xs(当然第二个列表也一样)。

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