如何在Haskell中使用带有变量和列表的map

时间:2019-06-16 03:54:35

标签: list haskell functional-programming map-function arity

我打算编写一个map函数,该函数实际上需要一个变量和一个列表并返回一个列表。

我尝试使用标准地图,但是从这里我看到的是,在我试图传递另一个参数时,它以“地图功能列表”的形式出现。

data Point = {xCoord :: Int,
              yCoord :: Int}

movePoint :: Point -> Point -> Point
movePoint (Point x y) (Point xMove yMove)
    = Point (x + xMove)  (y + yMove)

 // Add a "vector" to a list of points
movePoints :: [Point] -> Point -> [Point]
movePoints = error "Not yet"

例如,如果我有一个向量,例如(2,2),并且我有一个点列表,例如[(-2,1),(0,0),(5,4)等),想要使用地图将(2,2)添加到列表中的所有点并返回点列表,我不确定该怎么做。我是Haskell的新手,所以任何技巧都很棒。

1 个答案:

答案 0 :(得分:8)

部分应用movePoint函数(即,使用比所需数量更少的参数来调用它),如下所示:

movePoints pts vec = map (movePoint vec) pts

这样做将创建一个仅需要一个参数的新函数,而您并不是第一次提供该参数。这就是所谓的currying。