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
将绑定到 3
,ys
将绑定到 [4]
,而 yys
至 [3,4]
.
这是一个 as-pattern [Haskell tutorial] 它用于引用整个列表 xxs
、列表的头部 x
和列表的尾部 xs
(当然第二个列表也一样)。
只有当所有子模式都匹配时,模式才会触发,所以在这种情况下,如果 both 两个列表都是非空的。它通常用作优化,因为现在您可以在函数主体中使用第一个或第二个参数 xxs
或 yys
。
我有这个代码:
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 tutorial] 它用于引用整个列表 xxs
、列表的头部 x
和列表的尾部 xs
(当然第二个列表也一样)。
只有当所有子模式都匹配时,模式才会触发,所以在这种情况下,如果 both 两个列表都是非空的。它通常用作优化,因为现在您可以在函数主体中使用第一个或第二个参数 xxs
或 yys
。