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.

Reply via email to