检查某点是否在半径内的函数。

我需要这个函数的帮助。它必须返回两个列表。所有在半径内的点在第一个列表中,所有其他点在第二个列表中。这是我写的,但它给了我这么多的错误。

type Point = (Double, Double)
splitPoints :: Point -> Double -> [Point] -> ([Point], [Point])
splitPoints (x, y) r (z:zs)
    |(_, _) _ []                    = ([][])
    |x * x + y * y <= r * r         = (x,y) : (splitPoints (x, y) r zs) []
    |otherwise                      = [] (x,y) : (splitPoints (x, y) r zs)

解决方案:

首先,你必须把空列表的模式匹配移出守卫,作为一个单独的函数子句。

第二,我建议把递归调用放在一个 where 子句来分隔圈内和圈外的点。然后你可以在你的卫队中检查,你必须在哪个列表中插入点。

type Point = (Double, Double)

splitPoints :: Point -> Double -> [Point] -> ([Point], [Point])
splitPoints _ _ [] = ([], [])
splitPoints center@(centerx, centery) r ((x,y):zs)
    | (x-centerx)**2 + (y-centery)**2 <= r**2 = ((x,y) : inside, outside)
    | otherwise                               = (inside, (x,y) : outside)
  where (inside, outside) = splitPoints center r zs

给TA打赏
共{{data.count}}人
人已打赏
未分类

linker命令失败,退出代码为1- Newrelic问题。

2022-9-9 0:44:36

未分类

asm函数与c++

2022-9-9 0:44:38

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索