4

関数を介してリストをソートするためにLispのソートを使用しようとしていますが、これを行う方法の手がかりがありません。x 座標と y 座標を持つ 2D 空間に開始点があります。次に、N個の他の点のリストがあり、2点間の距離を計算する関数があります。私が今欲しいのは、すべての N ポイントを含み、開始点から他のすべてのポイントまでの距離の昇順に並べ替えられたリストです。

sort-function を使用して関数を引数として渡すことができると思います (calculate-distance 関数)。

何か案は?

よろしく

4

2 に答える 2

8

:keyで使用sort:

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

これにより、 までの距離に基づいてlist、 のポイントが昇順 (減少に使用) に並べ替えられます。>start-point

于 2013-03-13T12:43:06.543 に答える
2

Common Lispを使用している場合は、Common Lisp Hyper Specプロジェクトをお勧めします。あなたの場合、関数のドキュメントsortが役立ちます。ここで、2 番目のパラメーターpredicateがあることがわかります。述語は 2 つの引数を取り、2 番目の引数が最初の引数より大きいかどうかを返します。

dist2 点間の距離を測定する関数があるとします。2 点を までの距離で比較するにstart-pointは、次のラムダが必要です。

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

sortしたがって、引数リストの述語 (2 番目の位置) の場所に配置する必要があります。

于 2013-03-13T12:31:12.633 に答える