suffixes :: [a] -> [[a]]
suffixes xs@(_:xs') = xs : suffixes xs'
suffixes _ = []
我只知道@这里被称为“AsPattern”。但它在这里如何运作呢? 有人能给我一个分析吗?
怎么样!在哈斯克尔工作。 我现在不能举一个例子。但我很确定它确实发生在haskell编程中。
答案 0 :(得分:8)
@符号允许您进行模式匹配并引用与模式匹配的整个值。在您的示例中,您可以将整个列表参数称为xs(使用@符号),将列表尾部称为xs'(使用模式匹配)。
!符号可用于强制严格评估值而不是懒惰(使用爆炸模式或严格注释)。
答案 1 :(得分:3)
在Haskell中,您可以使用As Pattern为参数提供一个替代名称,您可以通过该名称引用它。在你的情况下,
{{1}}
允许您使用xs作为参数的替代名称(_:xs')。否则,您将无法执行此操作,因为_匹配任何参数,但否则无法使用。
答案 2 :(得分:3)
@
符号用于将xs
绑定到您使用的模式(_:xs')
,因此xs'
绑定到列表的尾部并xs
1}}被绑定到列表尾部的头部。!
用于向量的O(1)常量时间索引。请参阅此处的文档:https://hackage.haskell.org/package/vector-0.9.1/docs/Data-Vector.html
答案 3 :(得分:2)
!可以是关键字it may be a strictness annotation or bang pattern。
! can also be a function name默认为中缀应用程序(也称为运算符),其中包含许多库示例,包括数组索引。
@ is a keyword for an as pattern (aka. view pattern)。它也可以是part of a function name like it is for several HUnit assertions。
Interesting uses of bang patterns and view patterns在哈斯克尔学院进行了描述。