Warum kann %code% nicht das Ergebnis eines vorherigen Aufrufs von %code% akzeptieren?
Ich habe im Docstring gelesen, dass das Argument (eigentlich "kann" sein) ein Vektor oder eine sortierte Karte sein muss, und das obige zeigt, dass es kein %code% sein kann, also weiß ich das schon. Was ich wissen möchte: Gibt es einen guten Grund für diese Einschränkung? Ist es nur ein Versehen, oder bietet diese Einschränkung einen wichtigen Vorteil?
Gibt es dafür auch einen praktischen Workaround, außer niemals %code% aufzurufen? Es ist schwer zu wissen, wenn Sie %code% von einer Funktion zurückgeben, ob eine andere Funktion woanders %code% aufrufen könnte.
Ich frage, weil es frustrierend ist zu sehen, dass mein Code Ausnahmen aus diesem überraschenden Grund wirft s . Wenn ich wüsste, warum dies sinnvoll ist, würde ich diese und ähnliche Fehler wahrscheinlich weniger machen.
Sie können %code% nicht auf einem Seq aufrufen, da Sie eine Input-Collection mit konstantem Direktzugriff auf Fullfill %code% Konstant-Zeit-Performance-Merkmale benötigen und Seqs nur einen effizienten Zugriff (Iteration) vom Kopf aus ermöglichen runter.
Das Aufrufen von %code% für das Ergebnis von %code% kann nicht speziell für die Rückgabe der ursprünglichen Sammlung ausgeführt werden, da die ursprüngliche Auflistung nie eine seq ist. Und wenn %code% auf einem RSeq aufgerufen wird, würde etwas %code% zurückgegeben werden, was es nicht einfach macht, %code% zu unterstützen. Es ist wahrscheinlich diese Art von Komplikationen, die die Sprachimplementierer davon abhalten, überhaupt "rekursives" rseq zu unterstützen.
Wenn Sie eine allgemeine Umkehrfunktion benötigen, verwenden Sie %code% - was langsamer ist. Wenn Sie können, möchten Sie wahrscheinlich nur einen Verweis auf %code% und %code% behalten, wenn Sie beide benötigen.
Weil %code% nur für die speziellen reversiblen Sequenzen funktioniert. Aber das Ergebnis seiner Anwendung ist ein gewöhnlicher Seq. Sie können immer überprüfen, ob Sie %code% eine Sequenz mit einem %code% Prädikat:
haben können %Vor%Warum funktioniert dieser Fallback nicht in %code% (oder %code% ) selbst? Der Grund ist, dass %code% die Vorhersagbarkeit der Ausführungszeit garantieren sollte, denke ich.
Wenn Sie die Sammlung später wirklich rückgängig machen müssen, behalten Sie sie besser als Vektor bei: %code%