2

我试图在 Haskell 中定义一个函数,它接受一个整数参数 c 并返回笛卡尔平面上所有点的列表,(x/c,y/c)其中xy是整数。 x/c介于 -2 和 1 之间并且y/r介于 -1 和 1 之间

这是我到目前为止所得到的,我几乎可以肯定它是正确的,但是=当我特别在这一行运行它时,我在输入时遇到了解析错误: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是一个类型“胶水”函数,它将类型类中的任何值转换为Integral类型类中的任何其他Num类型。结果类型必须是 in RealFrac(like Doubleor Rational) 才能使用/运算符。

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 回答