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.