我打算编写一个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的新手,所以任何技巧都很棒。
答案 0 :(得分:8)
部分应用movePoint
函数(即,使用比所需数量更少的参数来调用它),如下所示:
movePoints pts vec = map (movePoint vec) pts
这样做将创建一个仅需要一个参数的新函数,而您并不是第一次提供该参数。这就是所谓的currying。