rekursiv rekursiv eine Sequenz in Clojure

7

Ich möchte eine Sequenz in Clojure umkehren, ohne die Funktion reverse zu verwenden, und dies rekursiv tun.

Hier ist, was ich gefunden habe:

%Vor%

Beispielausgabe:

%Vor%

Fragen:

  1. Gibt es einen präziseren Weg, dies zu tun, d. h. ohne Schleife / Wiederholung?
  2. Gibt es eine Möglichkeit, dies zu tun, ohne einen "Akkumulator" -Parameter in der Schleife zu verwenden?

Referenzen:

Was ist der beste Weg, um rekursiv umzukehren eine Zeichenfolge in Java?

Ссылка

    
noahlz 06.12.2011, 03:39
quelle

7 Antworten

22
  • Sie müssen nicht zählen. Stoppen Sie einfach, wenn die verbleibende Sequenz leer ist.
  • Sie sollten die acc nicht vorbelegen, da die ursprüngliche Eingabe möglicherweise leer ist (und es ist mehr Code).
  • Destrukturierung ist cool.
%Vor%

Wie für loop / recur und acc benötigen Sie eine Möglichkeit, die reverse Arbeitsliste zu umgehen. Es ist entweder loop oder fügt der Funktion einen weiteren Parameter hinzu (was wirklich loop tut).

Oder verwenden Sie eine Funktion höherer Ordnung:

%Vor%     
Alex Taggart 06.12.2011, 04:07
quelle
3

Ja zu Frage 1, das ist, was ich für meine Antwort auf das Rekursionskoan gefunden habe (ich konnte Ihnen nicht sagen, ob es eine gute Clojurepraxis war oder nicht).

%Vor%     
Fredrick Pennachi 02.05.2013 19:11
quelle
2

Aus Gründen der Vollständigkeit gibt es eine weitere Methode, die into verwendet. Da intern conj intern verwendet wird, kann es wie folgt verwendet werden:

%Vor%     
pankajdoharey 22.07.2017 05:14
quelle
1

In der aktuellen Version von Clojure gibt es eine eingebaute Funktion namens rseq . Für jeden, der vorbeikommt.

    
user1648311 04.03.2014 13:31
quelle
0
%Vor%

Q1.

Die JVM kann die Rekursion nicht optimieren, eine rekursive Funktion, die den Überlauf direkt stapeln würde. Daher in Clojure, die die Schleife / rekurriert. Also, ohne eine Funktion zu verwenden, die Rekursion tief Rekursion kann nicht definiert werden. (das auch intern verwendet wird, um als Funktionstrampolin wiederzukehren.)

Q2.

Eine rekursive Funktion von recur, muss tail-rekursiv sein. Wenn die normale rekursive Funktion in tail-rekursive Funktion wechselt, so muss etwa der Wert einer Variablen als Akkumulator mitgeführt werden.

    
BLUEPIXY 06.12.2011 09:17
quelle
0
%Vor%     
Jiacai Liu 24.04.2014 10:46
quelle
0
%Vor%     
zongwu233 05.10.2015 13:11
quelle

Tags und Links