(http://www.haskell.org/haskellwiki/Euler_problems/11_to_20#Problem_11)にあるEuler.11ソリューションをコピーしましたが、「(Array!!):undefined array element」というインデックスエラーで失敗します。 もちろん、最初に私はより良いエラーメッセージ(!)を望んでいます。おそらく失敗したインデックスを与えても、それをデバッグしようとしていません。デバッグリストの理解
データが正しく入力され、そのデータの右側には境界とデータが表示されます。
私は、結果式と理解の本文の両方に、いくつかのトレースメッセージを追加しました。最終的な表現から多くのトレース結果が得られますが、ボディ計算からの結果はありません。どうして?
prods :: Array (Int, Int) Int -> [Int]
-- trace ("xs: " ++ show xs) (product xs)
prods a = [trace ("xs: " ++ show xs) (product xs) | i <- range $ bounds a,
s <- senses,
let trace1 = check "i: " i,
let is = take 4 $ iterate s i,
let trace2 = check "is: " is,
all (inArray a) is,
let xs = map (a!) is]
-- Doit
-- euler = print . maximum . prods . input =<< getContents
euler eData = maximum . prods $ input eData
-- Debugging tracecheck :: String -> a -> a
check msg v | trace (msg ++ (show v)) True = v
多くのありがとうございます。明らかです(今!)。私はそれを構築した後に配列を印刷しました、そして、それはすべて期待どおりの境界で見えました。私は、それがいくつかの未定義の値を持っているかどうか/それをもう少し見るためにもう少し試してみるでしょう。 – guthrie
データの設定が間違っているのは正しいですか?私はエラーメッセージを誤解していました。 – guthrie