我正在尝试使用 lisp 的排序通过函数对列表进行排序,但不知道如何执行此操作。我在具有 x 和 y 坐标的 2D 空间中有一个起点。然后我有一个其他 N 个点的列表,我有一个计算 2 个点之间距离的函数。我现在想要的是一个列表,其中包含所有 N 点,并按从起点到所有其他点的距离升序排序。
我想我可以使用排序函数并将函数作为参数传递(计算距离函数)但我不知道该怎么做,网上的研究也没有帮助。
有任何想法吗?
问候
:key
与 一起使用sort
:
(sort list #'< :key (lambda (p) (dist p start-point)))
这将根据到 的距离以list
递增顺序(>
用于递减)对点进行排序start-point
。
如果你使用 common lisp,我推荐你Common Lisp Hyper Spec项目。在您的情况下,该函数的文档sort
将很有用。在这里你可以看到,它有第二个参数:predicate。谓词接受两个参数并返回第二个参数是否大于第一个参数。
假设你有一个函数dist
,测量两点之间的距离。要通过与您的距离比较两点start-point
,您需要以下 lambda:
#'(lambda (p1 p2) (> (dist p1 start-point) (dist p2 start-point)))
所以你必须把它放在sort
参数列表中谓词的位置(第二个位置)。