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将绑定到3,ys绑定到[4],yys绑定到[3,4]

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

模式只有在所有子模式都匹配时才会触发,所以在本例中,如果两个列表都是非空的。它经常被用作优化,因为现在您可以在函数体中使用第一个或第二个参数xxsyys

最新更新