Ecco una domanda per principianti: esiste un modo in Clojure per concatenare pigramente un numero arbitrario di sequenze? So che c'è la macro lazy-cat
, ma non riesco a pensare alla sua applicazione corretta per un numero arbitrario di sequenze.Concatenazione pigra della sequenza in Clojure
Il mio caso d'uso è lazy che carica i dati da un'API tramite richieste impaginate (compensate/limitate). Ogni richiesta eseguita tramite request-fn
sotto recupera 100 risultati:
(map request-fn (iterate (partial + 100) 0))
Quando non ci sono più risultati, request-fn
restituisce una sequenza vuota. Questo è quando mi fermo l'iterazione:
(take-while seq (map request-fn (iterate (partial + 100) 0)))
Ad esempio, l'API potrebbe tornare fino a 500 risultati e può essere deriso come:
(defn request-fn [offset] (when (< offset 500) (list offset)))
Se voglio concatenare i risultati, posso usare (apply concat results)
ma che valuta con entusiasmo la sequenza di risultati:
(apply concat (take-while seq (map request-fn (iterate (partial + 100) 0))))
esiste un modo come concatenare la sequenza di risultati pigramente, utilizzando lazy-cat
o qualcos'altro?
Il [ 'pigro-cat' * macro *] (http://grimoire.arrdem.com/1.6. 0/clojure.core/lazy-cat /) valuta ogni argomento solo come richiesto. – Thumbnail
Sì, ma come si applica a una sequenza di argomenti? –
Hai davvero bisogno di concatenare i risultati o vuoi semplicemente consumarli pigramente? –