@和!是什么意思?

4
 suffixes :: [a] -> [[a]]
 suffixes xs@(_:xs') = xs : suffixes xs'
 suffixes _          = []

我只知道在这里使用@被称为"AsPattern"。但它是如何工作的呢?有人能给我分析一下吗?

还有在Haskell中!是如何工作的?我现在无法给出示例,但我非常确定它会出现在Haskell编程中。


你可以在Hoogle上搜索符号 https://www.haskell.org/hoogle/?hoogle=! - rem
4个回答

8

符号 @ 允许您进行模式匹配并引用您正在匹配的整个值。在您的示例中,您可以使用 @ 符号将整个列表参数引用为 xs,并将列表的尾部引用为 xs'(使用模式匹配)。

符号 ! 可以用于强制对一个值进行严格求值,而不是延迟求值(使用惊叹号模式或严格性注释)。


2
!符号也用于严格性注释,这与惊叹号模式是不同的。 - jub0bs
@jubobs 感谢澄清。 - bwroga

3
在Haskell中,您可以使用“As模式”为参数提供替代名称,以便您可以通过该名称引用它。在您的情况下,
xs@(_:xs')

允许您将xs作为参数(_:xs')的替代名称使用。否则,您将无法这样做,因为_匹配任何参数,但在其他情况下无法使用。


3

1
“!”符号除了向量索引外,还可以用于其他上下文。” - jub0bs

2

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