我有一个函数,在其中我传入一个点和一个多边形(请参阅下面的类型定义)。
pointIsOnBorder
(见下文)采用一个点和一个多边形,并确定该点是否位于给定多边形的边界之一上。
type Point = (Double, Double)
type Polygon = [Point]
pointIsOnBorder :: Point -> Polygon -> Bool
pointIsOnBorder a ps = if (any onLineSegment(a) (breakPolygonToLines ps)) then True else False
在上面的示例中,breakPolygonToLines
正确地获取点(又名多边形)列表并返回点元组列表。例如:对于输入 [(2,3), (4,3), (5, 6)]
,breakPolygonToLines
返回 [((2.0,3.0),(4.0,3.0)),((4.0,3.0),(5.0,6.0)),((5.0,6.0),(2.0,3.0))]
。
从上面的代码片段中,onLineSegment
获取一个点和一个点元组,并确定该点是否存在于给定的点元组(也称为线段)上。
onLineSegment :: Point -> (Point, Point) -> Bool
但是,我将每个点元组传递到onLineSegment
时遇到错误。语法any onLineSegment(a) (breakPolygonToLines ps)
有效吗?
编辑:添加了更多细节;请参阅上文。
不知道你的函数到底在做什么,很难回答。看来any (onLineSegment a) (breakPolygonToLines ps)
就是你要找的。 (onLineSegment a)
修复函数的第一个参数,并给出一个从元组到布尔值的函数。
相关维基页面:http://www.haskell.org/haskellwiki/Partial_application