所以,这里是一个类型定义,只是为了提供一些背景:
type Name = String
type Coordinates = (Int, Int)
type Pop = Int
type TotalPop = [Pop]
type City = (Name, (Coordinates, TotalPop))
这里有一个数据集:
testData :: [City]
testData = [("New York City", ((1,1), [5, 4, 3, 2])),
("Washingotn DC", ((3,3), [3, 2, 1, 1])),
("Los Angeles", ((2,2), [7, 7, 7, 5]))]
所以,我正在尝试编写一个函数(
addAllPops
)来编辑 [City]
中所有 City
的 TotalPop
,并在 TotalPop
开始处添加一个新条目。 我希望它能按以下示例工作,在下面的示例中,输入 addNewPop testData [6, 4, 8]
将更改它们为:"New York City", ((1,1), [6, 5, 4, 3, 2],
"Washingotn DC", ((3,3), [4, 3, 2, 1, 1],
"Los Angeles", ((2,2), [8, 7, 7, 7, 5]
这里有一个更改单个城市人口的函数,同时也有我对整体进行尝试的代码,我的最大问题完全在于将这两个列表合并为一个。
addAllPops :: [City] -> [Int] -> [City]
addAllPops [(w, ((x,y), z))] pops = [map uncurry addPop (zip pops z)]
addPop :: City -> Int -> City
addPop (w, ((x,y), z)) p = (w, ((x,y), p:z))
我已经被这个问题困扰了很长一段时间,任何帮助都将非常感激 :)