そのため、私は Haskell を学習している最中であり、型/型クラス関連のエラーに陥ることがよくあります。かなり明らかなばかげた間違いもあれば、haskell が自分にはふさわしくないと感じさせるものもあります。とにかく、私はこのコードを持っています...
pfactors' ps n
| p > (sqrt n) = []
| m == 0 = p : (pfactors' ps q)
| otherwise = pfactors' (tail ps) n where
p = head ps
(q, m) = divMod n p
pfactors = pfactors' primes
main = print $ pfactors 14
(いくつかの背景: pfactors 関数は、数値を取り、指定された数値の素因数である素数のリストを返すことになっています。primes
素数の無限リストです)
これは私にこのエラーを与えます:
p47.hs:10:11:
Ambiguous type variable `a' in the constraints:
`Floating a' arising from a use of `pfactors'' at p47.hs:10:11-26
`Integral a' arising from a use of `primes' at p47.hs:10:21-26
Possible cause: the monomorphism restriction applied to the following:
pfactors :: a -> [a] (bound at p47.hs:10:0)
Probable fix: give these definition(s) an explicit type signature
or use -XNoMonomorphismRestriction
p < (sqrt n)
と関係のある唯一のパーツであるため、これはパーツの問題であることがわかりましたFloating
。すべてに変更すると正常にp < n
動作し、正しい答えが得られます。でもどうしても平方根で確認したいのですがどうすればいいですか?
ところで、これは宿題ではありません。気が付けば、projecteuler.net の 47 番目の問題を解決しようとしているところです。
助けてくれてありがとう。
そして、上記のプロジェクトオイラー問題の解決策を私に教えないでください。私はできる限り自分でやりたいです:)。ありがとう。