Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell错误:函数中的非穷举模式_Haskell - Fatal编程技术网

Haskell错误:函数中的非穷举模式

Haskell错误:函数中的非穷举模式,haskell,Haskell,我试图创建一个函数来验证列表中是否存在节点(我正在处理图形): 该函数返回一个true,表示该节点始终存在于列表中;但是,如果列表中不存在haskell,请告诉我一个错误:函数Buscando中的非穷举模式,我需要一些帮助。我最近在学习haskell,自己不具备解决这些问题的必要知识。我为我糟糕的英语感到抱歉。感谢您所做的一切您的buscando功能有两个机箱。一种是当第二个参数是空字符串时。另一个是当第一个参数是非空列表时 但是,当第一个参数都是空列表,第二个参数都是非空字符串时,情况会怎样呢

我试图创建一个函数来验证列表中是否存在节点(我正在处理图形):


该函数返回一个true,表示该节点始终存在于列表中;但是,如果列表中不存在haskell,请告诉我一个错误:函数Buscando中的非穷举模式,我需要一些帮助。我最近在学习haskell,自己不具备解决这些问题的必要知识。我为我糟糕的英语感到抱歉。感谢您所做的一切

您的
buscando
功能有两个机箱。一种是当第二个参数是空字符串时。另一个是当第一个参数是非空列表时


但是,当第一个参数都是空列表,第二个参数都是非空字符串时,情况会怎样呢?当调用函数时,第一个参数为空,第二个参数为非空,这两个定义都不适用。因此,您会得到一个非穷举模式错误。

问题恰恰是因为
类型Nodo=String
的定义。由于
String
本身是一个
Char
s的列表,这意味着当您拥有该模式时

buscaNodo _ [] = False
这相当于

buscaNodo _ "" = False
实际上,您正在匹配空字符串。你的意思可能是让这些论点相互转换:

buscaNodo [] _ = False
其中,在空列表中查找任何元素(
)将始终返回
False

通过使用Haskell附带的内置函数,还可以大大简化此定义:

buscaNodo :: [(Nodo, Peso)] -> Nodo -> Bool
buscaNodo graph node = elem node $ map fst graph

现在你不必担心任何情况。

你能提供
Nodo
Peso
的定义以及你收到的错误消息吗?这些信息使我们更容易弄清楚实际的问题是什么。此外,我建议使用更高级的函数来解决这个问题。如果您需要做的只是查找
n
是否在该列表中,那么您可以使用
map fst
elem
的组合,例如
buscando graph n=elem n$map fst graph
,轻松完成此操作。这并不能解决您所遇到的错误,但它将是您尝试执行的操作的替代解决方案。“Nodo”只是一个“字符串”“比索”是“(整数,浮点数)”的两倍。在这个函数中,我不使用“Peso”,我只想知道列表中是否存在字符串。但是当它不存在时,出现了错误:“函数buscaNodo中的非穷举模式”看起来像第一个等式中的参数顺序是错误的。它确实有效,我有太多关于haskell的知识要学习。我更了解它。谢谢你recommendation@RayMontiel一开始很难理解Haskell,但实际上您的解决方案只是我给出的实现的一个专门版本。如果您查看
map
elem
的定义,您会发现它们(尤其是
elem
)和您的代码之间有着惊人的相似之处。你写的并没有错,只是由于Haskell自带的内置功能,你做的工作比必要的多。虽然布尔逻辑可以做一些简化,即
n==a=True
n/=a=buscaNodo ar n
,但是
否则
是多余的。
buscaNodo :: [(Nodo, Peso)] -> Nodo -> Bool
buscaNodo graph node = elem node $ map fst graph