Existe-t-il une fonction Common Lisp permettant d'échanger deux éléments dans une liste en fonction de leurs indices et de renvoyer la liste modifiée?Permutation d'éléments dans une liste Common Lisp
11
A
Répondre
16
Vous pouvez utiliser rotatef
:
(rotatef (nth i lst) (nth j lst))
Bien sûr, l'indexation de la liste peut être coûteux (le coût O (taille de la liste)), donc si vous faites cela avec une certaine régularité, vous souhaitez plutôt d'utiliser un tableau:
(rotatef (aref arr i) (aref arr j))
4
Je voudrais éviter l'indexation dans la liste deux fois en utilisant nthcdr
pour obtenir le cdr de la cellule de contre contenant le premier élément que vous souhaitez échanger et utiliser elt
à g et l'élément restant de la sous-liste. Cela signifie que vous devez seulement indexer en commençant à partir de la tête de la liste une fois.
(let ((list-tail (nthcdr i list)))
(rotatef (car list-tail)
(elt list-tail (- j i)))
list)
Au moins de mon point de vue, cela est suffisamment fastidieux pour justifier une fonction.
Questions connexes
- 1. Réinitialiser l'état dans Common Lisp
- 2. Streams en Common Lisp?
- 3. Common Lisp Exercices/problèmes
- 4. Mot-clé programmatique Common Lisp
- 5. Exemples d'excellent code Common Lisp?
- 6. Problèmes avec ltk (common lisp)
- 7. Division entière en Common Lisp?
- 8. cross-package defgeneric/defmethod dans Common Lisp?
- 9. Grattage d'une table HTML dans Common Lisp?
- 10. Common Lisp: Attacher x récursivement à la liste
- 11. Common Lisp - Utilisation d'une fonction d'entrée à une autre fonction
- 12. Arbres de dessin en Common Lisp
- 13. compilation des applications avec Clozure Common Lisp
- 14. Common Lisp: suppression du code inaccessible
- 15. Problème de logiciel Allegro Common Lisp
- 16. Recherche d'une implémentation Common Lisp commune
- 17. Implémentation de Mandelbrot Set en Common Lisp
- 18. Comment append fonctionne en Common Lisp?
- 19. Liaison de données XML pour Common Lisp
- 20. Générer un quiz en Common Lisp?
- 21. Comment faire une correspondance de modèle en Common Lisp
- 22. En Common Lisp, comment définir un spécificateur de type de données générique (comme une liste d'entiers)?
- 23. Correction d'une erreur GC dans Mac Common Lisp 5.0
- 24. Comment tracer dans Common Lisp en utilisant gcl?
- 25. lisp: consolider une liste de listes dans une seule liste?
- 26. Clojure: équivalent à la fonction Common Lisp READ?
- 27. Soit: la création d'une variable temporaire en Common Lisp
- 28. Clozure Common Lisp - Programmation de socket TCP - Envoi d'une réponse
- 29. Quand le format imprime-t-il réellement en Common Lisp?
- 30. Permutation d'une liste de listes
DAMN! Le SO doit faire quelque chose au sujet de la coloration syntaxique. Je pensais que c'était mauvais pour python. – aaronasterling