我正在尝试编写一个Erasthosthenes函数的筛子,它将用户的所有素数从2增加到他的上限.所以我写了这段代码:
main = do
putStrLn "Upper Limit"
g <- readLn
let sieve [] = []
let sieve (p:xs) = p : sieve [x | x <- xs, x `mod` p /= 0]
let primes = sieve [2..g]
print primes
Run Code Online (Sandbox Code Playgroud)
代码编译并给我正确的解决方案,但我在解决方案的最后得到了这个例外:***例外:功能筛的非详尽模式所以我检查了哪些模式不匹配.
warning: [-Wincomplete-patterns]
Pattern match(es) are non-exhaustive
In an equation for `sieve': Patterns not matched: (_:_)
warning: [-Wincomplete-patterns]
Pattern match(es) are non-exhaustive
In an equation for `sieve': Patterns not matched: []
Run Code Online (Sandbox Code Playgroud)
至极我不明白,因为我已经给了let sieve [] = []
我以为_哈斯克尔是指任何变量,这样是什么模式(:)是什么意思?任何帮助,将不胜感激.