So, I basically thought that this is what's happening in your case also (but it's not!): => (map println '(1 2 3)) (1 2 nil 3 nil nil) => (= '(nil nil nil) (map println '(1 2 3))) 1 2 3 true
;so your case is different due to pr-str and pr => (def k (pr-str (for [x (range 5)] (do (pr x) x)))) #'user/k => k "(012340 1 2 3 4)" => (= "(012340 1 2 3 4)" k) true Sorry for the noise, indeed it seems like pr-str is just redirecting *out* until done using with-out-str. This is certainly much more severe that I thought initially. => (def k (pr-str (for [x (range 5)] (do (pr x) (println "nothing") x)))) #'user/k => k "(0nothing\r\n1nothing\r\n2nothing\r\n3nothing\r\n4nothing\r\n0 1 2 3 4)" => (= "(0nothing\r\n1nothing\r\n2nothing\r\n3nothing\r\n4nothing\r\n0 1 2 3 4)" k) true This is so bad :) On Sat, Feb 9, 2013 at 8:26 PM, AtKaaZ <atk...@gmail.com> wrote: > > > > On Sat, Feb 9, 2013 at 8:25 PM, AtKaaZ <atk...@gmail.com> wrote: > >> >> >> >> On Sat, Feb 9, 2013 at 8:22 PM, AtKaaZ <atk...@gmail.com> wrote: >> >>> do you mean that, when the string it outputted like: >>> => (println k) >>> >>> (012340 1 2 3 4) >>> nil >>> => (prn k) >>> >>> "(012340 1 2 3 4)" >>> nil >>> >>> the side effects of evaluating k being mixed into the output could >>> affect you (other than just visually in the repl) ? if ie. you redirect >>> *out* to some file with the purpose of saving and later restoring that? >>> >>> Well, I don't actually like this myself (ever since I've encountered the >>> map println example I've given) but I ignored it because people didn't seem >>> to find it a big deal and nothing I could do about it + it only affected me >>> in viewing REPL output. >>> >>> >>> But I'm not sure if it is clear to you what is happening (perhaps I >>> misunderstand what you're saying), it's only when showing the value of the >>> string (k in this case) that the text shown is mixed, but the value of k is >>> accurate, as seen below: >>> >>> On Sat, Feb 9, 2013 at 7:30 PM, Conrad <drc...@gmail.com> wrote: >>> >>>> I tested this in the latest 1.5.0-RC6: >>>> >>>> => (def k (pr-str (for [x (range 5)] >>>> (do (pr x) >>>> x)))) >>>> #'user/k >>>> => k >>>> "(012340 1 2 3 4)" >>>> >>> => (= "[0 1 2 3 4]" k) >>> true >>> >> OOps, I pasted the wrong one here (from the "vec" form) >> But looks like I was wrong, and you were correct!! >> >> => (def k (pr-str (for [x (range 5)] >> (do ;(pr x) >> x)))) >> #'user/k >> => k >> "(0 1 2 3 4)" >> => (= "(0 1 2 3 4)" k) >> true >> >> => (def k (pr-str (for [x (range 5)] >> (do (pr x) >> x)))) >> #'user/k >> => (= "(0 1 2 3 4)" k) >> false >> > => (= "(012340 1 2 3 4)" k) > true > > so it's not exactly like the example that I've given... I'll have to > investigate more > >> >> >>> >>> >>> >>> >>> >>> On Sat, Feb 9, 2013 at 8:03 PM, Conrad <drc...@gmail.com> wrote: >>> >>>> I agree when you print to stdout you'd expect lazily evaluated output >>>> to be mangled in. >>>> >>>> However, it would seem more natural to me that if you print something >>>> to a string it is counter intuitive for incidental writes to stdout to be >>>> redirected to the string, as well- There is also nothing in the >>>> documentation that suggests this would happen. >>>> >>>> Also, it would be technically relatively easy to change this. >>>> >>>> On Saturday, February 9, 2013 12:46:08 PM UTC-6, AtKaaZ wrote: >>>> >>>>> here's a simpler example: >>>>> => (map println '(1 2 3)) >>>>> (1 >>>>> 2 >>>>> nil 3 >>>>> nil nil) >>>>> => (dorun (map println '(1 2 3))) >>>>> 1 >>>>> 2 >>>>> 3 >>>>> nil >>>>> >>>>> >>>>> >>>>> On Sat, Feb 9, 2013 at 7:44 PM, AtKaaZ <atk...@gmail.com> wrote: >>>>> >>>>>> actually replacing vec with dorun or doall, would've been a better >>>>>> example :) >>>>>> >>>>>> >>>>>> On Sat, Feb 9, 2013 at 7:42 PM, AtKaaZ <atk...@gmail.com> wrote: >>>>>> >>>>>>> I think it's an illusion from being lazy ? >>>>>>> => (def k (pr-str (vec (for [x (range 5)] >>>>>>> ** (do (pr x) >>>>>>> ** x))))) >>>>>>> 01234 >>>>>>> #'datest1.ret/k >>>>>>> => k >>>>>>> "[0 1 2 3 4]" >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Sat, Feb 9, 2013 at 7:30 PM, Conrad <drc...@gmail.com> wrote: >>>>>>> >>>>>>>> I tested this in the latest 1.5.0-RC6: >>>>>>>> >>>>>>>> => (def k (pr-str (for [x (range 5)] >>>>>>>> (do (pr x) >>>>>>>> x)))) >>>>>>>> #'user/k >>>>>>>> => k >>>>>>>> "(012340 1 2 3 4)" >>>>>>>> >>>>>>>> This seems wrong to me... I can see what would be needed to fix it >>>>>>>> in clojure/core.clj, but it would require creating several additional >>>>>>>> private functions. Does anyone know if this behavior is intentional? >>>>>>>> >>>>>>>> -- >>>>>>>> -- >>>>>>>> You received this message because you are subscribed to the Google >>>>>>>> Groups "Clojure" group. >>>>>>>> To post to this group, send email to clo...@googlegroups.com >>>>>>>> >>>>>>>> Note that posts from new members are moderated - please be patient >>>>>>>> with your first post. >>>>>>>> To unsubscribe from this group, send email to >>>>>>>> clojure+u...@**googlegroups.com >>>>>>>> >>>>>>>> For more options, visit this group at >>>>>>>> http://groups.google.com/**group/clojure?hl=en<http://groups.google.com/group/clojure?hl=en> >>>>>>>> --- >>>>>>>> You received this message because you are subscribed to the Google >>>>>>>> Groups "Clojure" group. >>>>>>>> To unsubscribe from this group and stop receiving emails from it, >>>>>>>> send an email to clojure+u...@**googlegroups.com. >>>>>>>> >>>>>>>> For more options, visit >>>>>>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out> >>>>>>>> . >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Please correct me if I'm wrong or incomplete, >>>>>>> even if you think I'll subconsciously hate it. >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Please correct me if I'm wrong or incomplete, >>>>>> even if you think I'll subconsciously hate it. >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> Please correct me if I'm wrong or incomplete, >>>>> even if you think I'll subconsciously hate it. >>>>> >>>>> -- >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "Clojure" group. >>>> To post to this group, send email to clojure@googlegroups.com >>>> Note that posts from new members are moderated - please be patient with >>>> your first post. >>>> To unsubscribe from this group, send email to >>>> clojure+unsubscr...@googlegroups.com >>>> For more options, visit this group at >>>> http://groups.google.com/group/clojure?hl=en >>>> --- >>>> You received this message because you are subscribed to the Google >>>> Groups "Clojure" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to clojure+unsubscr...@googlegroups.com. >>>> For more options, visit https://groups.google.com/groups/opt_out. >>>> >>>> >>>> >>> >>> >>> >>> -- >>> Please correct me if I'm wrong or incomplete, >>> even if you think I'll subconsciously hate it. >>> >>> >> >> >> -- >> Please correct me if I'm wrong or incomplete, >> even if you think I'll subconsciously hate it. >> >> > > > -- > Please correct me if I'm wrong or incomplete, > even if you think I'll subconsciously hate it. > > -- Please correct me if I'm wrong or incomplete, even if you think I'll subconsciously hate it. -- -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.