我现在有两个列表包含位置,list1和list2
一个名为generateDist的函数,它获取两个位置并生成两个位置之间的距离
我现在的目标是在list1中生成与list2中特定元素仅一个单位距离的元素数量(只选择最接近的一个)
我当前的表达式在下面:
let l = [x|x <- list1, y <- list2, generateDist x y == 1]
这并没有给我期望的答案,因为我也希望元素与列表2中的特定一个元素只有两个单位的距离(位置可以距离位置a一个单位,距离位置b两个单位,我只希望最接近的一个被计数)
为了更清楚,如果我有两个列表:
list1 = [1,4,7] and list2 = [2,3,6]
number of elements that are 1 unit away should be: 3
number of elements that are 2 units away should be: 0 (instead of 2 if using my expression)
有人能帮帮我吗?我应该如何实现这个特性
我只想统计最接近的那个
如果你只想要最近的一个,那么你可以使用像minimum
:
[ x | x <- list1, minimum [ generateDist x y | y <- list2 ] == 2 ]
这确实要求您使用的距离类型(generateDist
的结果)具有Ord
类型类的实例。例如,对于整数和作为距离的差值的绝对值,您有:
ghci> list1 = [1,4,7]
ghci> list2 = [2,3,6]
ghci> generateDist x y = abs (x - y)
ghci> [ x | x <- list1, minimum [ generateDist x y | y <- list2 ] == 1 ]
[1,4,7]
ghci> [ x | x <- list1, minimum [ generateDist x y | y <- list2 ] == 2 ]
[]