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> 。这不仅会在编译时捕获丢失的大小写,而且还会报告[]
是丢失的大小写。