2013-03-13 87 views
4

我想使用lisp的排序通過函數排序列表,但沒有線索如何做到這一點。 我在x和y座標的二維空間中有一個起點。然後我有一個N其他點的列表,我有一個功能,計算2點之間的距離。 我現在想要的是一個列表,其中包含所有的N點,並按從起點到所有其他點的距離升序排列。lisp通過函數排序列表

我想我可以使用排序功能,並傳遞一個函數作爲參數(計算距離函數)但我不知道如何去做,在網絡上的研究沒有幫助。

任何想法?

問候

+0

您使用哪種lisp? – Necto 2013-03-13 12:20:11

回答

2

如果你使用的Common Lisp,我建議你Common Lisp Hyper Spec項目。在你的情況下,sort函數的文檔將很有用。在這裏您可以看到,它具有第二個參數:謂詞謂詞需要兩個參數,並返回第二個參數是否大於第一個參數。

比方說,你有一個功能dist,測量兩點之間的距離。爲了比較的距離兩點你start-point,你需要以下的λ:

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

所以,你必須把它放在謂語的sort參數列表中的位置(第二位置)。

8

使用:keysort

(sort list #'< :key (lambda (p) (dist p start-point))) 

這將在遞增的順序基於對start-point的距離進行排序點的list(使用>的減少)。

+0

非常感謝。這解決了我的問題! – 2013-03-13 13:13:44