suffixes :: [a] -> [[a]]
suffixes xs@(_:xs') = xs : suffixes xs'
suffixes _ = []
我只知道在这里使用@被称为"AsPattern"。但它是如何工作的呢?有人能给我分析一下吗?
还有在Haskell中!是如何工作的?我现在无法给出示例,但我非常确定它会出现在Haskell编程中。
suffixes :: [a] -> [[a]]
suffixes xs@(_:xs') = xs : suffixes xs'
suffixes _ = []
我只知道在这里使用@被称为"AsPattern"。但它是如何工作的呢?有人能给我分析一下吗?
还有在Haskell中!是如何工作的?我现在无法给出示例,但我非常确定它会出现在Haskell编程中。
符号 @ 允许您进行模式匹配并引用您正在匹配的整个值。在您的示例中,您可以使用 @ 符号将整个列表参数引用为 xs,并将列表的尾部引用为 xs'(使用模式匹配)。
符号 ! 可以用于强制对一个值进行严格求值,而不是延迟求值(使用惊叹号模式或严格性注释)。
!
符号也用于严格性注释,这与惊叹号模式是不同的。 - jub0bsxs@(_:xs')
允许您将xs作为参数(_:xs')的替代名称使用。否则,您将无法这样做,因为_匹配任何参数,但在其他情况下无法使用。
@
符号用于将xs
绑定到您使用的模式(_:xs'
),因此xs'
被绑定到列表的尾部,而xs
被绑定到头部附加到列表的尾部。 !
用于O(1)常数时间索引向量。请参阅此处的文档: https://hackage.haskell.org/package/vector-0.9.1/docs/Data-Vector.html