私は Haskell を (楽しみのために独学で) 学んでいますが、壁にぶつかりました。
私の質問:
関数を定義するにはどうすればよいですか
flrt = (floor . sqrt)
ファイルで試してコンパイルすると、GCHi は次のように不平を言います。
AKS.hs:11:9:
No instance for (RealFrac Integer)
arising from a use of `floor'
Possible fix: add an instance declaration for (RealFrac Integer)
In the first argument of `(.)', namely `floor'
In the expression: (floor . sqrt)
In an equation for `flrt': flrt = (floor . sqrt)
AKS.hs:11:17:
No instance for (Floating Integer)
arising from a use of `sqrt'
Possible fix: add an instance declaration for (Floating Integer)
In the second argument of `(.)', namely `sqrt'
In the expression: (floor . sqrt)
In an equation for `flrt': flrt = (floor . sqrt)
結果の関数が単に Int -> Int ではない理由がわかりません。
CS の 2 年目を終えたばかりで、基本的な PL コースを受講しました。聞いたことはありますが、まだタイプがわかりません。いくつかの haskell チュートリアルを読んでみましたが、それはすべて私の頭の上にあります。
PS - モナドとは何かもわかりません。(私の検索で見つかった他の多くの質問は、これらについて話しました)
PPS - 私の完全なソース
bar = \a b -> if (2^a) > b
then (a-1)
else bar (a+1) b
foo = bar 1
flrt :: Integer -> Integer
flrt = (floor . sqrt)
aks target = if (target < 2)
then putStr "Not a Prime.\n\n"
else if elem (mod target 10) [0,2,4,5,6,8]
then putStr "Composite\n\n"
else if (elem target) [a^b | a <- [3,5..(flrt target)], b <- [1.. (foo target)]]
then putStr "Composite\n\n"--}
else
putStr "filler"