lisp排序列表通过功能

时间:2013-03-13 12:17:59

标签: list function sorting lisp

我正在尝试使用lisp的排序通过函数对列表进行排序,但是没有线索如何做到这一点。 我在2D空间中有一个带有x和y坐标的起点。然后我有一个N-other点列表,我有一个函数,计算2点之间的距离。 我现在想要的是一个列表,它包含所有的N点,并按照从起点到其他所有点的距离进行排序。

我想我可以使用sort-function并传递一个函数作为参数(计算距离函数)但是我不知道怎么做,而且在网上的研究没有帮助。

有什么想法吗?

问候

2 个答案:

答案 0 :(得分:8)

:keysort

一起使用
(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参数列表中的谓词位置(第二个位置)。