Thanks Konrad
I do not understand the benefit of storing the map-board result.
The map-board function it self is using lazy for loop.
Why isn't the laziness transitive automatically?

On Jan 11, 12:05 pm, Konrad Hinsen <[email protected]> wrote:
> On 11.01.2009, at 08:56,Tzachwrote:
>
> > Following your good advice, I also update the next-cell function to
> > work in a lazy way instead of sorting the values of the entire board.
>
> Good idea!
>
> > (defn next-cell [board]
> >   "return the next potential cell to set, and the valid alternatives"
> >   (first (for [n (range 1 10)]
> >    (filter
> >     #(= n (count (second %)))
> >     (map-board board valid-values)))))
>
> Your implementation has the disadvantage of recomputing (map-
> board ...) nine times. You can avoid this with a simple modification:
>
> (defn next-cell [board]
>    "return the next potential cell to set, and the valid alternatives"
>    (let [vv (map-board board valid-values)]
>      (first (for [n (range 1 10)]
>           (filter
>            #(= n (count (second %)))
>            vv)))))
>
> Since the values of the lazy sequence vv are cached, nothing will  
> ever be recomputed.
>
> However, I think there is also a bug in your function: (first  
> (for ..)) will return the result of the first iteration of the for,  
> even if it is emtpy. What you want is the first element of the first  
> non-empty element of the for sequence. You can get this with (first  
> (apply concat (for [n ...))). Concat again creates a lazy sequence,  
> so nothing is computed unless necessary.
>
> Konrad.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To post to this group, send email to [email protected]
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to