Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.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_Non Exhaustive Patterns - Fatal编程技术网

Haskell 当使用“否则”时,如何可能获得“非穷举模式”异常`

Haskell 当使用“否则”时,如何可能获得“非穷举模式”异常`,haskell,non-exhaustive-patterns,Haskell,Non Exhaustive Patterns,我试图证明形式p_1**的数字pk+1并不都是素数,为此,我编写了以下代码 sieve :: [Integer] -> [Integer] sieve (0:xs) = sieve xs sieve (x:xs) = x : sieve (mark x xs) where mark :: Integer -> [Integer] -> [Integer] mark n (y:ys) | rem y n == 0 = 0 : (mark n ys) | otherw

我试图证明形式
p_1**的数字pk+1
并不都是素数,为此,我编写了以下代码

sieve :: [Integer] -> [Integer]
sieve (0:xs) = sieve xs
sieve (x:xs) = x : sieve (mark x xs)
 where
 mark :: Integer -> [Integer] -> [Integer]
 mark n (y:ys)
  | rem y n == 0 = 0 : (mark n ys)
  | otherwise = y : (mark n ys)

checkPrime' :: Integer -> Bool
checkPrime' n = elem n (sieve [n])

listPrimeFromTo' :: Integer -> Integer -> [Integer]
listPrimeFromTo' k n = sieve [k..n]

checkEulerPrimes = forall [(product xs) + 1|  n <- [2..], let xs = listPrimeFromTo' 2 n] checkPrime'
sieve::[Integer]->[Integer]
筛(0:xs)=筛xs
筛子(x:xs)=x:sieve(标记x-xs)
哪里
马克::整数->[整数]->[整数]
马克n(y:ys)
|rem y n==0=0:(标记n y)
|否则=y:(标记nys)
checkPrime'::整数->布尔
checkPrime'n=elem n(筛[n])
listPrimeFromTo'::整数->整数->[整数]
listPrimeFromTo'KN=筛[k..n]

checkEulerPrimes=forall[(product xs)+1 | n
否则
确实是一个总是成功的保护;但是只有当关联的模式已经匹配时才会考虑保护。因此,在

foo (x:xs) | otherwise = bar
只有当
foo
的参数与模式
x:xs
匹配时,我们才会看到
bar
作为结果。与
的类似模式是
\ucode>,它总是匹配并且不绑定任何新变量,因此:

foo (x:xs) | otherwise = bar
foo _ = baz

永远不会抛出不匹配的模式异常。

因为
否则
是特定模式的保护。如果写入
标记3[]
?那么应该触发哪个子句?与
筛子
本身一样:没有任何子句描述在空列表的情况下该做什么。好吧,这是有意义的。毕竟,为了说
让x在一个集合中a
,首先你需要显示
a不是空的
。我强烈建议你使用
-Wall打开警告e> 。这不仅会在编译时捕获丢失的大小写,而且还会报告
[]
是丢失的大小写。