Fork me on GitHub
#clojure-italy
<
2015-10-10
>
reborg21:10:59

@bronsa grazie. Ci ho riguardato appena ho avuto tempo (tipo adesso) seguendo un’invocazione di (apply (fn [& args]) 0 1 2 3 (range 100000)). Avevo capito male io. Quando arriva a chiamare spread entra sempre nella seconda linea del cond, quindi non costruisce mai la catena di Cons ed e' sempre O(1).

bronsa21:10:19

@reborg: quell'invocazione non testa spread eh

bronsa21:10:05

ah, intendevi il cond di spread, ora ho capito

bronsa21:10:10

per testare che effettivamente sia O(n) ci vuole un doppio apply

bronsa21:10:08

e a quanto pare apply esplode quando & args e` molto grande

bronsa21:10:54

anzi, neanche troppo grande, (apply apply (fn [& args]) 0 1 2 3 (concat (range 1e4) [[1]])) StackOverflowa gia` con 10000

bronsa22:10:12

ah no, e` colpa di concat..

reborg22:10:39

ci sto pensando il mio giusto… simple_smile

reborg22:10:10

comunque forse non e’ concat (apply apply (fn [& args]) (repeat 100000 []))

reborg22:10:40

ma il tuo ragionamento mi sembra giusto comunque col secondo apply

reborg22:10:42

e l’avvertimento e’: state attenti che se fate (apply f x y … []) scrivendo 1e4+ volte qualcosa tra y e l’ultima coll, vi beccate stack overflow simple_smile