Hi. 

Was going over Jay's Towers of Hanoi implementation that makes use of Racket 
streams. I find this comment confusing and would appreciate a more elaborate 
explanation:

> It’s important, using racket/stream, to use the stream-cons because if you 
> wrote a stream-append with three arguments, then the second recursive call 
> wouldn’t be lazily evaluated and you’d save nothing by using streams over 
> lists. That’s because stream-append is a function, while stream-cons is a 
> macro that thunks its arguments. 


Ok, so I assume what he means is that procedure arguments get evaled during 
application. Since (stream-append ..) is a procedure, the result of the second 
recursive call (last arg) would be forced. Docs for (stream-append ..) however 
say this:

> new stream is constructed lazily, while the last given stream is used in the 
> tail of the result. 


I find this confusing. What does "costruct lazily" mean then? Does this phrase 
say that (n-1) args to it aren't forced, but the last one is? But append is a 
procedure, so all args should be evaled.

As a side thought, I think I could cheat (like stream-cons) by thunking stuff I 
pass to append, thunk is a wrapping macro, right?

> (stream-append (thunk (towers (sub1 n) from extra to))
>                (thunk (move from to))
>                (thunk (towers (sub1 n) extra to from)))


thx!
---
Vlad Kozin <[email protected]>



____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to