我正在尝试使用lisp的排序通过函数对列表进行排序,但是没有线索如何做到这一点。 我在2D空间中有一个带有x和y坐标的起点。然后我有一个N-other点列表,我有一个函数,计算2点之间的距离。 我现在想要的是一个列表,它包含所有的N点,并按照从起点到其他所有点的距离进行排序。
我想我可以使用sort-function并传递一个函数作为参数(计算距离函数)但是我不知道怎么做,而且在网上的研究没有帮助。
有什么想法吗?
问候
答案 0 :(得分:8)
将:key
与sort
:
(sort list #'< :key (lambda (p) (dist p start-point)))
这会根据到list
的距离,按递增顺序对>
个点进行排序(使用start-point
进行减少)。
答案 1 :(得分:2)
如果您使用常见的lisp,我建议您使用Common Lisp Hyper Spec项目。在您的情况下,sort
函数的文档将非常有用。在这里你可以看到,它有第二个参数:谓词。 谓词接受两个参数,并返回第二个是否比第一个更好。
假设你有一个函数dist
,测量两点之间的距离。要比较距离start-point
的两个点,您需要以下lambda:
#'(lambda (p1 p2) (> (dist p1 start-point) (dist p2 start-point)))
所以你必须将它放在sort
参数列表中的谓词位置(第二个位置)。