Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 你在做什么!什么意思?_Haskell_Pattern Matching_Symbols - Fatal编程技术网

Haskell 你在做什么!什么意思?

Haskell 你在做什么!什么意思?,haskell,pattern-matching,symbols,Haskell,Pattern Matching,Symbols,我只知道@here被称为“AsPattern”。但是它在这里是如何工作的呢? 有人能给我分析一下吗 你是怎么做到的!在哈斯克尔工作。 我现在不能举一个例子。但是我很确定它确实发生在haskell编程中。在haskell中,您可以使用As模式为参数指定一个替代名称,您可以通过该名称引用它。就你而言 suffixes :: [a] -> [[a]] suffixes xs@(_:xs') = xs : suffixes xs' suffixes _ = [] 允许您使

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

你是怎么做到的!在哈斯克尔工作。
我现在不能举一个例子。但是我很确定它确实发生在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')