Haskell中的图形函数

jas*_*son 0 haskell graph

我有这样的数据类型:

data Node a = Node
    { label :: a,
        adjacent :: [(a,Int)] } deriving Show
Run Code Online (Sandbox Code Playgroud)

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

giveLabel Node a [(c,b)] = a; 
Run Code Online (Sandbox Code Playgroud)

但我不断收到错误.你能告诉我怎么改变我的功能吗?谢谢

drq*_*ver 7

giveLabel (Node a [(c,b)]) = a
Run Code Online (Sandbox Code Playgroud)

是你想要的语法-定义函数使用优先级相同的规则要求他们,并根据这些规则,你定义的函数giveLabel有三个参数(Node,a,和[c,b]); 这是非法的,因为在这种背景下Node缺少论据.

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

giveLabel (Node a xs) = a
Run Code Online (Sandbox Code Playgroud)

......哪里xs会绑定到整个邻居列表; 但实际上,因为你甚至不关心这一点,你可以写:

giveLabel (Node a _) = a
Run Code Online (Sandbox Code Playgroud)

... _对于您不打算使用的参数,模式匹配的有用方法.