On Tuesday, April 8, 2014 7:57:10 AM UTC-5, sorin cristea wrote: > > > What exactly you mean by '*The point was you aren't using lazy-seq as > intended here since you are always creating a singleton sequence*' ? In > my sum function...I intend to compute sum of elements of a collection. >
Lazy-seq is intended to build sequences. Generally you'd have each invocation of lazy-seq produce one or more elements of a sequence. You are only nominally building a sequence. It is always just one element. You are reducing a collection to a sum. That is the job of reduce. If you want to delay evaluation for a given argument, use a thunk or a delay. (defn my-sum [n] (reduce + (range n))) (def my-result 100000) ; my-result is 4999950000 (eagerly evaluated) (def my-thunked-result (fn [] (my-sum 100000))) ; the sum is not calculated until evaluating (my-thunked-result), answer is not cached (def my-delayed-result (delay (my-sum 100000))) ; the sum is not calculated until forcing @my-delayed-result, answer is cached for subsequent use > [I]f I [d]o this *(def x **(test-fc ...))*, and then *x,* this is not the > same thing with *(test-fc ...)* ?, I understand the issue related to time > to compute this sum, but the same time is taken when I call x, right ? > > Yes, that's what I said. Only in the first case evaluation is delayed until you request the value of `x` and in the second it is requested immediately to print at the REPL. You might find it instructive to put some `println`s in your code to see how and when your calculation is progressing and to use a large but still reasonable size collection, say 1 million elements. > Thanks for the hint with trampoline function, really interested . > > Sorin. > > -- 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/d/optout.