0
ここでは何が欠けているのか分かりませんが、以下のコードでcheckDiffのパターンマッチングを行うことができませんでした。 GHCiの機能checkDiffのレポート「非網羅的なパターンのコードは次のとおりです。タプルのリストで非網羅的なパターンが一致する
import Data.Array.Unboxed
primes :: [Int]
primes = 2 : oddprimes()
where
oddprimes() = 3 : sieve (oddprimes()) 3 []
sieve (p:ps) x fs = [i*2 + x | (i,True) <- assocs a]
++ sieve ps (p*p) ((p,0) :
[(s, rem (y-q) s) | (s,y) <- fs])
where
q = (p*p-x)`div`2
a :: UArray Int Bool
a = accumArray (\ b c -> False) True (1,q-1)
[(i,()) | (s,y) <- fs, i <- [y+s, y+s+s..q]]
takePrimes :: [Int] -> [(Int,Int)]
takePrimes [] = []
takePrimes [x] = []
takePrimes (x:y:zs) = if y - x > 2 then (x,y) : takePrimes (y:zs) else takePrimes (y:zs)
checkDiff :: [(Int,Int)] -> Int
checkDiff [] = 0
checkDiff [(0,_)] = 0
checkDiff [(_,0)] = 0
checkDiff [(a,b)] = sum $ [x | x <- [(a + 1)..(b - 1)], totalFactors a == totalFactors (a + 1)]
totalFactors :: Int -> Int
totalFactors n = length $ [x | x <- [2..(div n 2)], rem n x == 0]
助けてください
あなたはcheckDiffは、長さ0と1のリストを処理する方法を理解しました? – Amateur
@Amateur '[]'は長さ0、 '[((0、_)]'、 '[(_、0)]'および '[(a、b)]のリストです。それはあなたが持っているすべてのパターンです。 – sepp2k
ありがとう。私はまだハスケルにとっては新しい人です。私は学ぶべきことがたくさんある。ありがとうございました。 – Amateur