私は整数の「小さな」除数を計算する必要がある問題を解決しようとしています。私はちょうど私が書きたい10の約数を取得するには、与えられた数の平方根までのすべての数字を通じてbruteforcingよ:なぜこのスニペットは明示的な値で有効ですが、関数として無効ですか?
[k|k<-[1...floor(sqrt 10)],rem 10 k<1]
これはうまく動作しているようです。しかし、すぐに私は機能
f n=[k|k<-[1...floor(sqrt n)],rem n k<1]
そして実際にコールこの機能では、このプラグとして、私は私の知る限りは、その印刷物実際印刷機能をundrestandとしてエラー
f 10
No instance for (Floating t0) arising from a use of `it'
The type variable `t0' is ambiguous
Note: there are several potential instances:
instance Floating Double -- Defined in `GHC.Float'
instance Floating Float -- Defined in `GHC.Float'
In the first argument of `print', namely `it'
In a stmt of an interactive GHCi command: print it
を得ますかコンソールへの結果は問題を引き起こしていますが、何が間違っているかを知ることはできません。 type
はあいまいですが、関数は明らかに整数のリストしか返せません。その後、再び私はタイプをチェックし、それがf
の(推論)タイプは、私はf
は、任意の実際の数値を受け入れることができなければならないことを理解することができますが、誰もが説明できる
f :: (Floating t, Integral t, RealFrac t) => t -> [t]
である理由リターンタイプがすべきIntegral
またはint
以外のものはありますか?
詳細な説明はありがとうございます。ある時点で、あなたはすべての私のhaskellの質問に答えるように思われるので、ヒントの瓶をセットアップする必要があります=) – flawr