私は現在、プロジェクトオイラーを楽しく学び、練習にハスケルを使用しています。しかし、私は、問題が発生した、と私は小さい例を作り出すように見えることはできませんので、ここで(プロジェクトオイラー232用)コードは次のとおりです。Haskell:これがなぜ空リストの例外につながるのでしょうか?
buildNum (x, y) = multNum x y 1 []
where multNum num mul exp s = if (num > 10^100) then s else multNum nNum mul nexp ns
where next = (num * mul) `div` exp
ns = num:s
top = next `mod` 10
nexp = exp * 10
nNum = num + nexp * top
sumBuild (x, y) = (head (buildNum (x, y))) * length (buildNum (x, y))
ここに悪いスタイルを無視してください:)
を私はロードした場合これと、ここで、私は例外になるだろう(5、7)sumBuildを実行します。
*** Exception: Prelude.head: empty list
しかし、私はにsumBuildを変更した場合:
sumBuild (x, y) = head (buildNum (x, y))
または
sumBuild (x, y) = length (buildNum (x, y))
これは正常に動作します。
これは私には本当に混乱しています。副作用がなく、2回の実行では異なる結果が出ます(少なくともそのようなケースであるようです)。ここでの問題は何ですか?
誰かがこのプログラムを最小限の作業例に編集できたら、本当に感謝しています!
ありがとうございました!
ありがとうございます!悪いスタイルは本当に痛い...... –