我是 Haskell 的新手,我正在努力寻找一种方法来使用类成员变量来返回我正在寻找的成员变量。我有这个数据:
data Place = Place {name :: String,
north :: Float,
east :: Float,
rainfall :: [Int]
} deriving (Eq, Ord, Show)
testData :: [Place]
testData = [
Place "London" 51.5 (-0.1) [0, 0, 5, 8, 8, 0, 0],
Place "Norwich" 52.6 (1.3) [0, 6, 5, 0, 0, 0, 3],
Place "Birmingham" 52.5 (-1.9) [0, 2, 10, 7, 8, 2, 2],
Place "Hull" 53.8 (-0.3) [0, 6, 5, 0, 0, 0, 4],
Place "Newcastle" 55.0 (-1.6) [0, 0, 8, 3, 6, 7, 5],
Place "Aberdeen" 57.1 (-2.1) [0, 0, 6, 5, 8, 2, 0],
Place "St Helier" 49.2 (-2.1) [0, 0, 0, 0, 6, 10, 0]
]
我想要做的是返回一个最接近给定位置的地方。到目前为止,我能够计算每个地方到给定位置的距离,并且我确切知道应该返回哪个项目,但我不知道如何实际执行此操作。这是我到目前为止的代码;
closestDry :: Float -> Float -> [Place] -> [Float]
closestDry _ _ [] = []
closestDry lx ly (x:xs) = distance(lx)(ly)(north x)(east x)):closestDry lx ly xs
distance :: Float -> Float -> Float -> Float -> Float
distance x1 y1 x2 y2 = sqrt ((y1 - y2)^2 + (x1 - x2)^2)
输入控制台“closestDry 51.5 (-0.1) testData”输出:
[0.0,1.7804484,2.059126,2.3086786,3.8078866,5.946426,3.0479496]
我可以看到最近的区域必须是“伦敦”,因为距离是“0.0”,所以给定的地点列表必须是“伦敦”,但是如何让这个地方返回给我?
我不想返回距离列表,但我不知道如何告诉函数获取最小距离并返回相应的地方,因为它需要与其他地方进行比较。