我有这样的数据类型:
data Node a = Node
{ label :: a,
adjacent :: [(a,Int)] } deriving Show
示例:( Node 'a' [ ( 'b' , 3 ) , ( 'c' ,2 ) ] )
我想从此结构中获取标签,我编写了这个函数(以及我认为可能有效的其他几种组合):
giveLabel Node a [(c,b)] = a;
但我不断收到错误。你能告诉我应该如何改变我的功能吗?谢谢
giveLabel (Node a [(c,b)]) = a
是您想要的语法吗 - 定义函数使用与调用它们相同的优先级规则,并且根据这些规则,您定义了一个giveLabel具有三个参数(Node、a和[c,b])的函数;这是非法的,因为在这种情况下Node缺少论据。
即使这可能不是你想要的 - 模式 [(c,b)] 只匹配只有一个项目的列表。由于你不关心邻居列表,你可以写:
giveLabel (Node a xs) = a
... wherexs将绑定到整个邻居列表;但实际上,由于您甚至不关心这一点,您可以写:
giveLabel (Node a _) = a
...where_是针对您不会使用的参数进行模式匹配的有用方法。