我正在尝试创建一个函数,它采用坐标,然后给出一组坐标,它提取给定坐标的一个单位内的所有坐标,然后列出一个列表出于那个。我已经知道如何制作这个功能了,我只需要澄清一下如何使它返回新列表。
例如,如果我提供函数(2,1) [(1,3),(1,2),(3,0),(4,2),(2,2),(3,1)]
,它将返回一个列表[(1,2),(3,0),(2,2),(3,1)]
。
我已经知道如何实现一个可以查找列表是否在一个单元内的函数,我只需要知道如何将我找到的函数与我的模式匹配,并将其返回到一个新的列表中
local_elements :: Coordinate -> List_with_coordinates -> List_with_coordinates
local_elements (x_c,y_c) list = case list of
(x_l,y_l) :xs
| abs (x_l - x_c) <= 1 && abs (y_l - y_c) <=1 -> "what would go here?" local_elements xs
| otherwise -> local_elements xs
[] -> []
答案 0 :(得分:4)
你创造了一个功能
dist :: Int -> Coordinate -> Coordinate -> Bool
dist k (x_c,y_c) (x_1,y_1) = ((abs (x_1 - x_c)) <= k) && ((abs (y_1 - y_c)) <= k)
检查坐标是否正常。你说:
local_lements c = filter (dist 1 c)
这足以完全按照你的意愿行事。如果两个坐标仅相隔1
,则dist 1
将返回True
,而内置函数filter
将从列表中获取导致{{1}的所有元素x
}}返回dist 1 c x
。