hit send too soon --

also, that print-method doesn't catch all lazy values

user=> (instance? clojure.lang.LazySeq (range))
false

user=> (supers (class (range)))
#{java.lang.Iterable java.util.List clojure.lang.Obj
clojure.lang.IPending java.io.Serializable clojure.lang.IHashEq
java.util.Collection clojure.lang.IObj clojure.lang.Sequential
clojure.lang.Seqable clojure.lang.IPersistentCollection
clojure.lang.ASeq clojure.lang.IReduce java.lang.Object
clojure.lang.ISeq clojure.lang.IMeta clojure.lang.IReduceInit}

On Mon, Nov 2, 2020 at 12:36 PM Justin Smith <noisesm...@gmail.com> wrote:
>
> > The next step might be to investigate why infinite lazy seqs don't print as 
> > clojure.lang.LazySeq, like the finite ones.
>
> that printing of  "clojure.lang.LazySeq@c5d38b66" relies on completely
> realizing the input, as it relies on the hash, which relies on the
> fully realized value
>
> On Mon, Nov 2, 2020 at 12:32 PM Austin Haas <aus...@pettomato.com> wrote:
> >
> > Thanks, Juan.
> >
> > I don't need to know the length of the seq, though, only that it is lazy. I 
> > don't want to realize any lazy seqs. Ideally, I'd like to be able to print 
> > any data structure and have all lazy seqs print just like it does in the 
> > example I gave above (i.e., "clojure.lang.LazySeq@c5d38b66"), whether it is 
> > finite or infinite.
> >
> > I also don't want to walk through every data structure to check if it 
> > contains a lazy seq, but maybe that is the only option.
> >
> > I've also tried:
> >
> > (defmethod print-method clojure.lang.LazySeq [q, w]
> >      (.write w "#clojure.lang.LazySeq"))
> >
> > The next step might be to investigate why infinite lazy seqs don't print as 
> > clojure.lang.LazySeq, like the finite ones.
> > On Monday, November 2, 2020 at 9:22:58 AM UTC-8 jpmon...@gmail.com wrote:
> >>
> >> Hi Austin,
> >>
> >> Since there is no way to know the length of a lazy-seq without realizing 
> >> it, I think your only choice is to set a limit on it by binding 
> >> *print-length* if you are not sure about the sequence.
> >>
> >> Other thing you can try is bounded-count like this :
> >>
> >> (defn looks-finite? [xs]
> >>   (let [limit 1000]
> >>     (< (bounded-count limit xs) limit)))
> >>
> >> (looks-finite? (map inc (range))) ;; => false
> >> (looks-finite? (map inc (range 100))) ;; => true
> >>
> >> I hope that helps.
> >>
> >> Juan
> >> El domingo, 1 de noviembre de 2020 a las 20:06:39 UTC-3, Austin Haas 
> >> escribió:
> >>>
> >>>
> >>> How can I make sure that a logging function won't try to realize an 
> >>> infinite lazy seq that could be anywhere in the arguments passed to the 
> >>> logging function?
> >>>
> >>> Is there some way to guarantee that lazy seqs won't be realized when 
> >>> converting to a string?
> >>>
> >>> I know I can bind *print-length*, but I don't want to constrain every 
> >>> collection.
> >>>
> >>> And I know that lazy seqs aren't always realized, but that doesn't seem 
> >>> to help if they are infinite:
> >>>
> >>> user=> (str (map inc (range 10)))
> >>> "clojure.lang.LazySeq@c5d38b66"
> >>>
> >>> user=> (str (map inc (range)))
> >>> <never ends>
> >>>
> >>> Thanks.
> >>>
> > --
> > 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.
> > To view this discussion on the web visit 
> > https://groups.google.com/d/msgid/clojure/ab820e20-75ad-4852-aa01-9321cb7487b4n%40googlegroups.com.

-- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/clojure/CAGokn9L7pzXArLcvu0BUf0x7JnD2wZpjgisuFr6ZPfA0817EZg%40mail.gmail.com.

Reply via email to