【发布时间】:2012-12-16 12:05:47
【问题描述】:
我的 Haskell 有另一个问题。我从一个问题中得到了以下数据构造函数,
type Point = (Int, Int)
data Points = Lines Int Int
| Columns Int Int
| Union Points Points
| Intersection Points Points
它是关于从 (0,0) 和 (x,y) 开始的网格上的点,其中 x 为与原点的水平距离,y 为与原点的垂直距离。
我试图从中定义一个函数“Lines”,给定 Lines x y 将评估网格上垂直距离为 x ~ y 的所有点。 例如
> Lines 2 4
(0,2)(1,2)(2,2)(3,2)....
(0,3)(1,3)(2,3)(3,3)....
(0,4)(1,4)(2,4)(3,4)....
等等。好吧,我所做的是,
Lines :: Int -> Int -> Points
Lines lo hi = [ (_, y) | lo <= y && y <= hi ]
但 Haskell 抱怨说;
无效的类型签名 Lines :: Int -> Int -> Points。
应该是::
这是什么意思? “Points”已经在上面定义了......肯定“Int”“Points”被视为“类型”吗?没看出问题,为什么Haskell会糊涂?
【问题讨论】:
-
lines中的 x 值从何而来?你想构建一个无限列表的列表吗?然后尝试lines' lo hi = map (\y -> map (\x -> (x, y)) [0..]) [lo..hi]。请注意,已经有一个名为lines的函数。
标签: function haskell types constructor