In Clojure möchte ich mehrere Teilmengen aus einer großen trägen Sequenz berechnen (vielleicht eine unendliche). Der naive Weg wäre, die trägen Sequenz in einen Vektor umzuwandeln und dann die Teilmengen zu berechnen. Aber dabei verliere ich die Trägheit.
Ich habe eine große Sequenz big-sequence
und positions
, eine Liste von Start- und Endpositionen. Ich möchte die folgende Berechnung jedoch träge durchführen:
(let [positions '((5 7) (8 12) (18 27) (28 37) (44 47))
big-sequence-in-vec (vec big-sequence)]
(map #(subvec big-sequence-in-vec (first %) (second %)) positions))
; ([5 6] [8 9 10 11] [18 19 20 21 22 23 24 25 26] [28 29 30 31 32 33 34 35 36] [44 45 46])
Ist das machbar?
Bemerkung: Wenn big-sequence
unendlich ist, wird vec
niemals zurückkehren!