我有这样的数据类型:
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)
但我不断收到错误.你能告诉我怎么改变我的功能吗?谢谢
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)
... _对于您不打算使用的参数,模式匹配的有用方法.
| 归档时间: |
|
| 查看次数: |
201 次 |
| 最近记录: |