Hier ist eine Frage des Anfängers: Gibt es in Clojure eine Art und Weise faul, um eine beliebige Anzahl von Sequenzen zu verketten? Ich weiß, dass es lazy-cat
Makros gibt, aber ich kann nicht an die richtige Anwendung für eine beliebige Anzahl von Sequenzen denken.Faule Verkettung von Sequenz in Clojure
My Anwendungsfall ist verzögertes Laden von Daten aus einer API über paginiert (offseted/Limited) Anfragen. Jede Anfrage ausgeführt über request-fn
ruft unter 100 Ergebnisse:
(map request-fn (iterate (partial + 100) 0))
Wenn es keine weiteren Ergebnisse sind, request-fn
gibt eine leere Sequenz. Dies ist, wenn ich die Wiederholung stoppen:
(take-while seq (map request-fn (iterate (partial + 100) 0)))
Zum Beispiel könnte die API 500 Ergebnisse angezeigt und kann als spotten:
(defn request-fn [offset] (when (< offset 500) (list offset)))
Wenn ich die Ergebnisse verketten möchten, kann ich (apply concat results)
aber das wertet gespannt auf die Ergebnisse Reihenfolge:
(apply concat (take-while seq (map request-fn (iterate (partial + 100) 0))))
gibt es eine Möglichkeit, wie die Ergebnisse Sequenz träge verketten, sonst entweder lazy-cat
oder etwas mit?
Das ['lazy-cat' * Makro *] (http://grimoire.arrdem.com/1.6. 0/clojure.core/lazy-cat /) wertet jedes Argument nur nach Bedarf aus. – Thumbnail
Ja, aber wie wenden Sie es auf eine Reihe von Argumenten an? –
Müssen Sie wirklich die Ergebnisse verketten, oder möchten Sie sie nur träge konsumieren? –