hatte ich diesen Code:Plötzliche Verlangsamung mit fauler Sequenz
:history
(cons [t (:latest thing)] (take n (:history thing)))
, die für das Hinzufügen eines Rollfensters der jüngsten Geschichte zu einer Karte auf jeder Iteration meines Programms ist. Was ich fand war, dass nach einer bestimmten Anzahl von Iterationen (~ 50) mein Programm dramatisch und progressiv verlangsamen würde. wenn ich
während änderte den Code:
:history
(cons [t (:latest thing)] (take n (vec (:history thing))))
dann das Programm lief leicht auf jeder Iteration länger (wie der faule seq realisiert wurde), sondern lief konsequent und nicht verlangsamen.
Neu für Clojure Ich verstehe nicht ... ist es mit Chunked-Sequenzen zu tun?
ok, ich, warum den ersten Fall sehen ist schlecht, aber warum die Verlangsamung nur, wenn sie eine bestimmte Anzahl von Iterationen erreicht? ist das wegen der eingespannten Sequenzen? – Hendekagon
eigentlich, jetzt bin ich verwirrt, ist der erste Fall schlecht? Werden all diese verschachtelten Cons-Operationen jedes Mal ausgeführt, wenn ich die Sequenz konsumiere? Da ich jedes Mal n nehme, enthält die Sequenz nur diese n Elemente. Es ist auf eine andere Weise schlecht, das ist, dass es eine verschwenderische Art ist, es trotzdem zu tun - ich sollte den Rest und das Conjen oder etwas nehmen, damit ich diese n Iterationen nicht brauche. – Hendekagon
ja, das sollte ich machen (cons letzte (butlast history)) – Hendekagon