在函数内部创建一个新列表并在其中添加元素

时间:2015-04-02 11:47:53

标签: list haskell

我正在尝试创建一个函数,它采用坐标,然后给出一组坐标,它提取给定坐标的一个单位内的所有坐标,然后列出一个列表出于那个。我已经知道如何制作这个功能了,我只需要澄清一下如何使它返回新列表。

例如,如果我提供函数(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        
  [] -> []

1 个答案:

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