我想使用lisp的排序通過函數排序列表,但沒有線索如何做到這一點。 我在x和y座標的二維空間中有一個起點。然後我有一個N其他點的列表,我有一個功能,計算2點之間的距離。 我現在想要的是一個列表,其中包含所有的N點,並按從起點到所有其他點的距離升序排列。lisp通過函數排序列表
我想我可以使用排序功能,並傳遞一個函數作爲參數(計算距離函數)但我不知道如何去做,在網絡上的研究沒有幫助。
任何想法?
問候
我想使用lisp的排序通過函數排序列表,但沒有線索如何做到這一點。 我在x和y座標的二維空間中有一個起點。然後我有一個N其他點的列表,我有一個功能,計算2點之間的距離。 我現在想要的是一個列表,其中包含所有的N點,並按從起點到所有其他點的距離升序排列。lisp通過函數排序列表
我想我可以使用排序功能,並傳遞一個函數作爲參數(計算距離函數)但我不知道如何去做,在網絡上的研究沒有幫助。
任何想法?
問候
如果你使用的Common Lisp,我建議你Common Lisp Hyper Spec項目。在你的情況下,sort
函數的文檔將很有用。在這裏您可以看到,它具有第二個參數:謂詞。 謂詞需要兩個參數,並返回第二個參數是否大於第一個參數。
比方說,你有一個功能dist
,測量兩點之間的距離。爲了比較的距離兩點你start-point
,你需要以下的λ:
#'(lambda (p1 p2) (> (dist p1 start-point) (dist p2 start-point)))
所以,你必須把它放在謂語的sort
參數列表中的位置(第二位置)。
使用:key
與sort
:
(sort list #'< :key (lambda (p) (dist p start-point)))
這將在遞增的順序基於對start-point
的距離進行排序點的list
(使用>
的減少)。
非常感謝。這解決了我的問題! – 2013-03-13 13:13:44
您使用哪種lisp? – Necto 2013-03-13 12:20:11