Ich möchte eine Funktion in Lisp schreiben, die alle Elemente aus der Liste mit Map-Funktionen umkehrt, aber ich habe keine Ahnung, wie man das startet .. Ich denke, ich muss das eingebaute verwenden Umkehrfunktion irgendwie .. Zum Beispiel wenn ich die Liste (1 2 3 (4 5 6 (7 8 9))) hätte, würde ich (((9 8 7) 6 5 4) 3 2 1) oder wenn ich hatte die Liste (1 2 3 (4 5) (6 7)) würde ich bekommen ((7 6) (5 4) 3 2 1) .. Jede Hilfe ist willkommen!Lisp Reverse "all" Funktion
Antwort
Nur eine schnelle Antwort, nicht sicher über Effizienz/elegancy:
(defun reverse-deeply (list)
(mapcar #'(lambda (li)
(cond
((consp li) (reverse-deeply li))
(t li)))
(reverse list)))
Der Schlüssel ist die Rekursion. Dies sollte es tun. –
Ja das ist es .. Vielen Dank! – SnailBoy
Hier ist eine Version, die für mich in Common-Lisp funktioniert.
(defun reverse-list (list)
(if (atom list)
list ;; Not actually a list, return the atom
(reverse (mapcar #'reverse-list list)))
;; Testing it out
(reverse-list '((1 2 3) (4 5 (3 6))))
Output:
(((6 3) 5 4) (3 2 1))
mapcar ist eine Funktion, die eine andere Funktion als ersten Parameter und einer Liste als zweiten Parameter nimmt. Es ruft dann diese Funktion für jedes Element der Liste auf. Es gibt eine Liste aller Antworten zurück. Nachdem ich 'mapcar' benutzt habe, um alle Unterlisten rückgängig zu machen, rufe ich 'reverse' erneut an, um die größere Liste umzukehren.
Die Funktion, die auf jeder Unterliste aufgerufen wird, ist "Reverse-Liste". Dies überprüft, ob die Liste ein Atom ist. Wenn es ist, dann gibt es sich selbst zurück. Wenn es sich um eine Liste handelt, ruft sie mapcar erneut für jedes Element in der Liste auf und kehrt dann das Ergebnis um.
Das ist nicht ganz das, was ich mir vorgestellt habe. Diese Funktion kehrt die Listen um, aber die Reihenfolge der Unterlisten muss umgekehrt werden. – SnailBoy
Wenn jemand nicht weiß, wie 'mapcar' funktioniert, kann es verwirrend sein, da es zwei gibt Möglichkeiten, um das Ergebnis zu erreichen: a) die Top-Level-Container-Liste umzukehren; b) Reverse Member-Listen :) – khachik
Das besser? Entschuldigung, ich muss verstanden haben, wonach Sie gefragt haben. –
(defun reverse-list (list)
(let ((result nil))
(dolist (e list result)
(push e result))))
Tut mir leid, es funktioniert nicht für mich ... – SnailBoy
- 1. Eine Lisp Funktion Verfeinerung
- 2. Reverse String Funktion C++
- 3. Haskell Reverse-Funktion
- 4. Reverse-Funktion von HttpUtility.ParseQueryString
- 5. Scheme Deep Reverse-Funktion
- 6. Funktion Persistenz in Common Lisp
- 7. Einfache LISP-Funktion funktioniert nicht
- 8. Lisp - Sortierung mit benutzerdefinierter Funktion
- 9. Haskell-Funktion zum Reverse-Funktionsaufruf
- 10. Reverse Bob Jenkins Hash-Funktion
- 11. Interactive Emacs Lisp-Funktion zwei Worte miteinander
- 12. Reverse-Liste in CLISP
- 13. Lisp rekursive Funktion fehlt Basisfall beim ersten Aufruf
- 14. Angular Ankreuzfelder „Select All“ -Funktion funktioniert nicht
- 15. Bootstrap Collapse - Jquery "Collapse all" -Funktion
- 16. Was ist die all() Funktion in RelatedManager?
- 17. Eine zitierte Funktion in Emacs-Lisp
- 18. Lisp: Verhindern doppelten Aufruf der rekursiven Funktion
- 19. kontinuierlich eine Emacs-Lisp-Funktion ausführen
- 20. Überschreiben einer Funktion in Emacs Lisp
- 21. wrap eine funktion in emacs lisp
- 22. Schwierigkeit LISP rekursive Funktion für Merge Sort
- 23. Clojure: Entspricht der Common Lisp READ-Funktion?
- 24. Lisp: Funktion druckt NIL für die Liste
- 25. Wie kann ich Reverse Rubys umfassen Funktion
- 26. Gibt es eine Reverse-Map-Funktion?
- 27. Django HttpResponseRedirect Reverse-Funktion in Tutorial
- 28. Verknüpfte Liste Reverse-Funktion OOP C++
- 29. Reverse-String-Funktion in C ohne Bibliotheksfunktionen
- 30. Reverse-Funktion und Append-Funktion an benutzerdefinierte Liste Standard ml
Von Ihrem Kommentar unten, so scheint es, dass Sie ein rekursive Problem beschreiben, für die die einfachste Lösung, eine rekursive Funktion ist (eine Funktion, die sich selbst aufruft). Aus diesem Grund habe ich die Frage mit "Rekursion" markiert. –