Haskell列表理解挑战问题



我现在有两个列表包含位置,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 ]
[]

相关内容

  • 没有找到相关文章