Thanks, much appreciated. On Saturday, November 15, 2014 2:00:02 PM UTC+1, Daniel Kersten wrote: > As Jonas says, don't use `for` for side effects. > > The mass of code is because it's lazily consuming the sequence, so there's > extra code to handle the "as needed" production and processing of values. > > > On Sat, 15 Nov 2014 11:04 Jonas Enlund <[email protected]> wrote: > for returns a lazy sequence and since you don't use the result the body is > never evaluated. You should use doseq instead: > > > > (doseq [x (range 1 10)] > > (.log js/console x)) > > > > > > http://clojure.github.io/clojure/clojure.core-api.html#clojure.core/for > > http://clojure.github.io/clojure/clojure.core-api.html#clojure.core/doseq > > > > On Saturday, November 15, 2014 12:48:31 PM UTC+2, Aleksandr wrote: > > > Hi > > > > > > Experimenting with clojurescript, confused about loop structures. > > > > > > Having a simple expression: > > > (for [x (range 1 10)] > > > (.log js/console x)) > > > > > > I get nothing logged. > > > My optimization is set to :whitespace. > > > The construction is compiled into rather large blob of code: > > > > > > var iter__4379__auto___5647 = function iter__5643(s__5644) { > > > return new cljs.core.LazySeq(null, function() { > > > var s__5644__$1 = s__5644; > > > while (true) { > > > var temp__4126__auto__ = cljs.core.seq.call(null, s__5644__$1); > > > if (temp__4126__auto__) { > > > var s__5644__$2 = temp__4126__auto__; > > > if (cljs.core.chunked_seq_QMARK_.call(null, s__5644__$2)) { > > > var c__4377__auto__ = cljs.core.chunk_first.call(null, > >s__5644__$2); > > > var size__4378__auto__ = cljs.core.count.call(null, > >c__4377__auto__); > > > var b__5646 = cljs.core.chunk_buffer.call(null, > >size__4378__auto__); > > > if (function() { > > > var i__5645 = 0; > > > while (true) { > > > if (i__5645 < size__4378__auto__) { > > > var x = cljs.core._nth.call(null, c__4377__auto__, i__5645); > > > cljs.core.chunk_append.call(null, b__5646, alert("test")); > > > var G__5648 = i__5645 + 1; > > > i__5645 = G__5648; > > > continue; > > > } else { > > > return true; > > > } > > > break; > > > } > > > }()) { > > > return cljs.core.chunk_cons.call(null, > >cljs.core.chunk.call(null, b__5646), iter__5643.call(null, > >cljs.core.chunk_rest.call(null, s__5644__$2))); > > > } else { > > > return cljs.core.chunk_cons.call(null, > >cljs.core.chunk.call(null, b__5646), null); > > > } > > > } else { > > > var x = cljs.core.first.call(null, s__5644__$2); > > > return cljs.core.cons.call(null, alert("test"), > >iter__5643.call(null, cljs.core.rest.call(null, s__5644__$2))); > > > } > > > } else { > > > return null; > > > } > > > break; > > > } > > > }, null, null); > > > }; > > > > > > > > > > > > Using loop / recur instead > > > > > > (loop [x 0] > > > (if (< x 10) > > > (do (.log js/console x) > > > (recur (+ x 1))))) > > > > > > Works as expected and compiles to: > > > while (true) { > > > if (x_5667 < 10) { > > > towers.core.log.call(null, x_5667); > > > var G__5668 = x_5667 + 1; > > > x_5667 = G__5668; > > > continue; > > > } else { > > > } > > > break; > > > } > > > > > > > > > Am I missing out something? It for / range loop supposed to work? > > > > > > Thanks! > > > > -- > > Note that posts from new members are moderated - please be patient with your > first post. > > --- > > You received this message because you are subscribed to the Google Groups > "ClojureScript" group. > > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > > To post to this group, send email to [email protected]. > > Visit this group at http://groups.google.com/group/clojurescript.
-- Note that posts from new members are moderated - please be patient with your first post. --- You received this message because you are subscribed to the Google Groups "ClojureScript" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/clojurescript.
