我试图创建一个函数来验证节点是否存在于列表中(我正在使用图形):
buscaNodo :: [(Nodo,Peso)]->Nodo->Bool
buscaNodo _[] = False
buscaNodo ((a,b):ar) n
|(n == a)= True || (buscaNodo ar n)
|(n /= a)= False || (buscaNodo ar n)
|otherwise = False
该函数返回一个true,表示该节点存在于列表中;但如果列表中不存在haskell给我一个错误:函数buscaNodo中的非详尽模式,我需要一些帮助,我最近学习haskell并且没有自己解决问题的必要知识 . 对于我可怕的英语,我很抱歉 . 感谢你所做的一切
2 回答
问题正是因为
type Nodo = String
的定义 . 由于String
本身是Char
的列表,这意味着当你拥有模式时这相当于
你实际上匹配空字符串 . 您可能想要的是切换这些参数:
查找空列表中的任何元素(
_
)将始终返回False
.您还可以使用Haskell附带的内置函数大大简化此定义:
现在你根本不用担心任何情况 .
您的
buscaNodo
函数有两种情况 . 一个是第二个参数是空字符串 . 另一种是当第一个参数是非空列表时 .但是当第一个参数是空列表而第二个参数是非空字符串的情况呢?当第一个参数为空且第二个参数为非空时调用该函数时,两个定义都不适合 . 因此,您会得到非详尽的模式错误 .