List lisp排序列表通过函数

List lisp排序列表通过函数,list,function,sorting,lisp,List,Function,Sorting,Lisp,我正在尝试使用lisp的sort通过函数对列表进行排序,但不知道如何进行排序。 我有一个二维空间的起点,有x和y坐标。然后,我有一个N个其他点的列表,我有一个计算2个点之间距离的函数。 我现在想要的是一个列表,它包含所有N个点,并按从起点到所有其他点的距离升序排序 我想我可以使用排序函数并将一个函数作为参数传递(计算距离函数),但我不知道怎么做,网络上的研究也没有帮助 有什么想法吗 关于如果您使用common lisp,我建议您使用该项目。在您的情况下,函数的文档将非常有用。在这里您可以看到,它

我正在尝试使用lisp的sort通过函数对列表进行排序,但不知道如何进行排序。 我有一个二维空间的起点,有x和y坐标。然后,我有一个N个其他点的列表,我有一个计算2个点之间距离的函数。 我现在想要的是一个列表,它包含所有N个点,并按从起点到所有其他点的距离升序排序

我想我可以使用排序函数并将一个函数作为参数传递(计算距离函数),但我不知道怎么做,网络上的研究也没有帮助

有什么想法吗


关于

如果您使用common lisp,我建议您使用该项目。在您的情况下,函数的文档将非常有用。在这里您可以看到,它有第二个参数:谓词。谓词接受两个参数并返回第二个参数是否大于第一个参数

假设您有一个函数
dist
,用于测量两点之间的距离。要将两个点与
起点的距离进行比较,需要以下λ:

#'(lambda (p1 p2) (> (dist p1 start-point) (dist p2 start-point)))

因此,您必须将其放置在
排序
参数列表中谓词的位置(第二个位置)。

使用
:键

(排序列表#'<:键(lambda(p)(dist p起点)))

这将根据到
起点的距离

按递增顺序对点的
列表进行排序(使用
进行递减)?
(sort list #'< :key (lambda (p) (dist p start-point)))