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 [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/clojure/5318a41e-7353-4c81-b1d4-99a3c54e3120n%40googlegroups.com.