Haskell 你在做什么!什么意思?
我只知道@here被称为“AsPattern”。但是它在这里是如何工作的呢? 有人能给我分析一下吗 你是怎么做到的!在哈斯克尔工作。Haskell 你在做什么!什么意思?,haskell,pattern-matching,symbols,Haskell,Pattern Matching,Symbols,我只知道@here被称为“AsPattern”。但是它在这里是如何工作的呢? 有人能给我分析一下吗 你是怎么做到的!在哈斯克尔工作。 我现在不能举一个例子。但是我很确定它确实发生在haskell编程中。在haskell中,您可以使用As模式为参数指定一个替代名称,您可以通过该名称引用它。就你而言 suffixes :: [a] -> [[a]] suffixes xs@(_:xs') = xs : suffixes xs' suffixes _ = [] 允许您使
我现在不能举一个例子。但是我很确定它确实发生在haskell编程中。在haskell中,您可以使用As模式为参数指定一个替代名称,您可以通过该名称引用它。就你而言
suffixes :: [a] -> [[a]]
suffixes xs@(_:xs') = xs : suffixes xs'
suffixes _ = []
允许您使用xs作为参数(ux:xs')的替代名称。否则,您将无法执行此操作,因为uu匹配任何参数,但在其他情况下不可用。
@
符号用于将xs
绑定到您使用的模式(:xs')
,因此,xs'
被绑定到列表的尾部,xs
被绑定到列表尾部的头部。代码>用于向量的O(1)恒定时间索引。请参阅此处的文档:使用@符号可以进行模式匹配,并引用模式匹配所针对的整个值。在您的示例中,您可以将整个列表参数引用为xs(使用@符号),将列表的尾部引用为xs(使用模式匹配)
这个!符号可用于强制严格计算值,而不是延迟计算(使用bang模式或严格注释)。在这种情况下可以是关键字
默认为中缀应用程序(也称为运算符),其中有许多库示例,包括数组索引
。也可以是
在哈斯凯尔学校有描述。代码>也用于严格注释,这与bang模式不同。@jubobs感谢您的澄清。
也用于矢量索引以外的其他上下文。您可以在Hoogle上搜索符号!
xs@(_:xs')