1

Haskell でプログラミングしていますが、次のコードに問題があります。

exactRootList :: Int -> Int -> [Int]
exactRootList ini end = 
      [x | x<-[ini .. end],  (floor (sqrt x)) == (ceiling (sqrt x))]

次に、実行すると:

> hugs myprogram.hs

私は得る

Error Instances of (Floating Int, RealFrac Int) required for definition of exactRootList

このエラーがわかりません。

私のプログラムは、間隔 [a, b] で、正確なルートが 4 または 9 である数値のリストを表示する必要があります。ここで、a と b は関数の 2 つのパラメーターです。例:

exactRootList 1 10

返さなければならない

1 4 9

1 と 10 の間で 1、4、9 だけが完全な根を持つからです。

ご挨拶!

4

1 に答える 1

6

の型をsqrt見ると、 のインスタンスである型でのみ機能することがわかりますFloating

> :t sqrt
sqrt :: Floating a => a -> a

ご存じのとおり、Intは浮動小数点値ではありません。x次を使用してint(変数)を変換する必要がありますfromIntegral

[x | x<-[ini .. end],  let a = fromIntegral x
                       in (floor (sqrt a)) == (ceiling (sqrt a))]
于 2011-10-14T04:02:29.837 に答える