4 votes

lisp trier une liste via une fonction

J'essaie d'utiliser le tri de Lisp pour trier une liste via une fonction, mais je n'ai aucune idée de la façon de procéder. J'ai un point de départ dans l'espace 2D avec des coordonnées x et y. Ensuite, j'ai une liste de N autres points et j'ai une fonction qui calcule la distance entre 2 points. Ce que je veux maintenant, c'est une liste qui contient tous les N-points et qui est triée par distance ascendante du point de départ à tous les autres points.

Je pense que je peux utiliser la fonction de tri et passer une fonction en argument (la fonction de calcul de distance) mais je ne sais pas comment faire et les recherches sur le web ne m'ont pas aidé.

Des idées ?

Salutations

8voto

sds Points 16039

Utilisation :key con sort :

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

Cela permet de trier les list de points dans l'ordre croissant (utiliser > pour la décroissance) en fonction de la distance par rapport à start-point .

2voto

Necto Points 1417

Si vous utilisez common lisp, je vous recommande l'option Common Lisp Hyper Spec projet. Dans votre cas, la documentation sur le sort sera utile. Ici, vous pouvez voir qu'elle a un deuxième paramètre : prédicat . Les prédicat prend deux arguments et indique si le second est plus grand que le premier.

Supposons que vous ayez une fonction dist Mesure de la distance entre deux points. Pour comparer deux points par la distance à votre start-point vous avez besoin du lambda suivant :

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

Vous devez donc le placer à la place du prédicat (la deuxième position) dans sort liste d'arguments.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X