Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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,我的函数parallelEncheck每次调用时都会抛出一个异常,抱怨非穷举模式 并行检查的定义如下: paralellenCheck :: (Eq a, Num a ) => [a] -> [a] -> Bool paralellenCheck [] [] = True paralellenCheck [_] [] = True paralellenCheck [] [_] = True paralellenCheck (x:xs) (y:ys) | intervall

我的函数
parallelEncheck
每次调用时都会抛出一个异常,抱怨非穷举模式

并行检查
的定义如下:

paralellenCheck :: (Eq a, Num a ) => [a] -> [a] -> Bool
paralellenCheck [] [] = True
paralellenCheck [_] [] = True
paralellenCheck [] [_] = True
paralellenCheck (x:xs) (y:ys)
  | intervall `elem`  [0,5,7,12]  = False
  | not $ paralellenCheck (x:xs) ys  = False 
  | not $ paralellenCheck xs (y:ys)  = False
  | otherwise  = True
  where intervall = abs (x - y)
在应用了-Wall的GHCI中运行函数只会返回

<interactive>:10:1:
Warning: Defaulting the following constraint(s) to type `Integer'
           (Eq a0)
             arising from a use of `paralellenCheck' at <interactive>:10:1-15
           (Num a0)
             arising from a use of `paralellenCheck' at <interactive>:10:1-15
In the expression: paralellenCheck [] [2, 3, 4, 5]
In an equation for `it': it = paralellenCheck [] [2, 3, 4, ....]

<interactive>:10:1:
Warning: Defaulting the following constraint(s) to type `Integer'
           (Eq a0)
             arising from a use of `paralellenCheck' at <interactive>:10:1-15
           (Num a0)
             arising from a use of `paralellenCheck' at <interactive>:10:1-15
In the expression: paralellenCheck [] [2, 3, 4, 5]
In an equation for `it': it = paralellenCheck [] [2, 3, 4, ....]
*** Exception: haskelltest.hs:(6,1)-(14,31): Non-exhaustive patterns in function paralellenCheck
:10:1:
警告:将以下约束默认为“整型”
(等式a0)
因在10:1-15使用“平行检查”而产生
(数量a0)
因在10:1-15使用“平行检查”而产生
在表达式中:paralelencheck[][2,3,4,5]
在‘it’的方程式中:it=paralelencheck[][2,3,4,…]
:10:1:
警告:将以下约束默认为“整型”
(等式a0)
因在10:1-15使用“平行检查”而产生
(数量a0)
因在10:1-15使用“平行检查”而产生
在表达式中:paralelencheck[][2,3,4,5]
在‘it’的方程式中:it=paralelencheck[][2,3,4,…]
***例外:haskelltest.hs:(6,1)-(14,31):函数并行检查中的非穷举模式

我对哈斯克尔很陌生,也很困惑。我认为与
[[u][]]
[[[u]
匹配的模式应该可以解决这个问题。

[[u]
在模式中意味着“恰好包含一个元素的任何列表”。你似乎想要“任何清单”。例如,现在,
[](a:b:[])
不匹配。对任何列表使用

[\u]
在模式中表示“恰好包含一个元素的任何列表”。你似乎想要“任何清单”。例如,现在,
[](a:b:[])
不匹配。对任何列表使用

尝试将您的
[\u]
替换为
。另外,您可能希望首先提供
(x:xs)(y:ys)
的定义,然后再提供
\uuu=True
模式。这不会破坏递归吗?每一个新的递归都会在有机会取消之前启动一个新的递归,请尝试将您的
[\u]
替换为
。另外,您可能希望首先提供
(x:xs)(y:ys)
的定义,然后再提供
\uuu=True
模式。这不会破坏递归吗?每一个新的递归都会在有机会通过
\uuu
取消之前启动一个新的递归,但这不会破坏递归吗?每一个新的递归都会在有机会通过
\uuuu
取消之前启动一个新的递归。另外,非常感谢^^^^只是为了让它更清楚:两个空列表都有模式,一个列表为空,另一个列表的长度为1,两个列表的长度至少为1。缺少的是一个列表为空,另一个大于1的模式。@9000所以对于一个包含任意多个事例的列表,[\ux]不能覆盖所有事例?这样的支票是什么样子的?
\u
会涵盖这样一个列表的所有情况吗?@user3763118:我不知道你的意思。我想你可能得到的是:第一个匹配的mattern将被使用。只要先定义(x:xs)(y:ys)模式,就不会有问题。编辑:对于你的第二条评论,是的;这正是我的答案。@MarkWhitfield所以当
xs
ys
为空列表时,
x:xs
y:ys
不匹配模式,其他情况将被尝试。这是有道理的。谢谢^^这不会破坏递归吗?每一个新的递归都会在有机会通过
\uuuu
取消之前启动一个新的递归。另外,非常感谢^^^^只是为了让它更清楚:两个空列表都有模式,一个列表为空,另一个列表的长度为1,两个列表的长度至少为1。缺少的是一个列表为空,另一个大于1的模式。@9000所以对于一个包含任意多个事例的列表,[\ux]不能覆盖所有事例?这样的支票是什么样子的?
\u
会涵盖这样一个列表的所有情况吗?@user3763118:我不知道你的意思。我想你可能得到的是:第一个匹配的mattern将被使用。只要先定义(x:xs)(y:ys)模式,就不会有问题。编辑:对于你的第二条评论,是的;这正是我的答案。@MarkWhitfield所以当
xs
ys
为空列表时,
x:xs
y:ys
不匹配模式,其他情况将被尝试。这是有道理的。谢谢^^