0

我有这样的数据类型:

data Node a = Node
    { label :: a,
        adjacent :: [(a,Int)] } deriving Show

示例:( Node 'a' [ ( 'b' , 3 ) , ( 'c' ,2 ) ] ) 我想从此结构中获取标签,我编写了这个函数(以及我认为可能有效的其他几种组合):

giveLabel Node a [(c,b)] = a; 

但我不断收到错误。你能告诉我应该如何改变我的功能吗?谢谢

4

1 回答 1

7
giveLabel (Node a [(c,b)]) = a

是您想要的语法吗 - 定义函数使用与调用它们相同的优先级规则,并且根据这些规则,您定义了一个giveLabel具有三个参数(Nodea[c,b])的函数;这是非法的,因为在这种情况下Node缺少论据。

即使这可能不是你想要的 - 模式 [(c,b)] 只匹配只有一个项目的列表。由于你不关心邻居列表,你可以写:

giveLabel (Node a xs) = a

... wherexs将绑定到整个邻居列表;但实际上,由于您甚至不关心这一点,您可以写:

giveLabel (Node a _) = a

...where_是针对您不会使用的参数进行模式匹配的有用方法。

于 2013-04-10T16:11:07.510 回答