2

Haskellで整数引数cを取り、とが整数(x/c,y/c)である形式のデカルト平面上のすべての点のリストを返す関数を定義しようとしています。 は-2から1の間で、-1から1の間ですxyx/cy/r

これは私がこれまでに得たものであり、ほぼ正しいと確信していますが=、特にこの行で実行すると、入力で解析エラーが発生します。cart xs ys c = [(y/c,x/c) | x <- xs, y <- ys]

plane :: Int -> [a]
plane c = cart [-1*c .. 1*c] [-2*c .. 1*c] c
     cart xs ys c = [(y/c,x/c) | x <- xs, y <- ys]

サンプル出力は次のようになりますplane 1

[(-2.0, -1.0), (-1.0, -1.0), ( 0.0, -1.0), ( 1.0, -1.0),
 (-2.0,  0.0), (-1.0,  0.0), ( 0.0,  0.0), ( 1.0,  0.0),
 (-2.0,  1.0), (-1.0,  1.0), ( 0.0,  1.0), ( 1.0,  1.0)]

誰でも私がこれを修正する方法を知っています!ありがとう

4

2 に答える 2

4

whereいくつかのタイプエラーがあるように見えることを除いて、が欠落しています。

  1. [a]一般的すぎる
  2. /分数型でのみ機能します。

それで

plane :: Int -> [(Int,Int)]
plane c = cart [-1*c .. 1*c] [-2*c .. 1*c] c where
    cart xs ys c = [(y `div` c,x `div` c) | x <- xs, y <- ys]

あなたが望むものかもしれません。あなたが持っているものからの最小の変化は、多かれ少なかれ機能します。

于 2012-10-01T03:45:33.817 に答える
1

これが私のやり方です。 型クラスの任意の値を型クラスの他の型にfromintegral変換する型'glue'関数です。演算子を使用するには、結果タイプが(またはのように)である必要があります。IntegralNumRealFracDoubleRational/

plane :: (Integral a, RealFrac b) => a -> [(b,b)] 
plane d = [(fI y / fI d,fI x / fI d) | x <- [-2*d..d], y <- [-d..d]] 
    where fI = fromIntegral 
于 2012-10-03T02:09:46.287 に答える