OK、それで、与えられた のすべての要因を効率的に検出する Haskell 関数を書こうとしていますInt
。この質問で与えられた解決策に基づいて、私は次のものを手に入れました:
-- returns a list of the factors of n
factors :: Int -> [Int]
factors n = sort . nub $ fs where
fs = foldr (++) [] [[m,n `div` m] | m <- [1..lim+1], n `mod` m == 0]
lim = sqrt . fromIntegral $ n
悲しいことに、GHCi はetc.No instance for (Floating Int)
を含む行に があることを知らせてくれます。lim =
私はこの回答を読みました.GHCiに直接入力すると、提案された解決策が機能しsqrt
ますInt
. ただし、まったく同じコードのように見えるものを関数に配置すると、機能しなくなります。
私はHaskellに比較的慣れていないので、助けていただければ幸いです!