Sorry for the late reply, I was out of home without communication for a couple days. Indeed, my first impression was that the problem states that streams are to be constructed with thunks. But as a student it is a very good thing to try, without forgetting the original form of the exercise, more than one approach and then compare them (my personal opion though). >From your post I conclude that you understand the matter well.
Jos > -----Original Message----- > From: users-boun...@racket-lang.org > [mailto:users-boun...@racket-lang.org] On Behalf Of Patrick Sweetman > Sent: domingo, 19 de mayo de 2013 21:20 > To: users@racket-lang.org > Subject: Re: [racket] Problem Stream with alternating values > > On 19/05/2013 21:22, Jos Koot wrote: > > Your function H1 is not lazy enough. > > > > Closely following the instructions of the exercise I > immediately come with: > > > > (define (dan-then-dog) > > (cons "dan.jpg" > > (lambda () ???))) > > > > Can you fill in the question-marks? > > > > Can easily be done with stream-cons too: > > Right. I was stuck in the 'C' paradigm of passing everything in the > parameter list, wheras, I think, the stream should only ever > be referred > to as the return value from a function call. > > I like my original approach, using b0 as a state variable, because it > can be extended to produce a stream of any repeating set of > values. The > more concise double stream-cons is not so general. Fixing > the syntax of > my original code gives me:- > > (define (dan-then-dog) > (define (H1 b0) > (cond > [(= b0 1) (stream-cons dan (H1 0))] > [else (stream-cons dog (H1 1))] > ) > ) > (H1 1)) > > > > > > (define dan-then-dog-str (stream-cons "dan.jpg" ...)) > > > > but this is not according to the exercise, I think. In the > exersize a stream > > is defined as a thunk. > > I saw that. The requirement for a stream of alternating values was > clearly stated, but then it confusingly talked about the internal > structure of a stream. Surely if the stream is constructed by stream > primitives then it will all be thunked. Or do you read the problem as > requiring that the stream itself be separately thunked? > > Patrick > > > > > Jos > > > >> -----Original Message----- > >> From: users-boun...@racket-lang.org > >> [mailto:users-boun...@racket-lang.org] On Behalf Of > Patrick Sweetman > >> Sent: jueves, 16 de mayo de 2013 14:31 > >> To: users@racket-lang.org > >> Subject: [racket] Problem Stream with alternating values > >> > >> I'm doing this problem: > >> > >> 6. Write a stream dan-then-dog, where the elements of the stream > >> alternate between the strings "dan.jpg" and "dog.jpg" > (starting with > >> "dan.jpg"). More specically, dan-then-dog should be a > thunk that when > >> called produces a pair of "dan.jpg" and a thunk that when called > >> produces a pair of "dog.jpg" and a thunk that when called... > >> etc. Sample > >> solution: 4 lines. > >> > >> and I cannot for the life of me understand why the > following code does > >> not produce a properly thunked stream. It evaluates the > >> entries until it > >> runs out of memory > >> > >> (define dan "dan.jpg") > >> (define dog "dog.jpg") > >> > >> (define (dan-then-dog) > >> (define (H1 st0 b0) > >> (cond > >> [(= b0 1) (H1 (stream-cons dan st0) 0)] > >> [else (H1 (stream-cons dog st0) 1)] > >> ) > >> ) > >> (H1 empty-stream 1)) > >> > >> Can somebody please explain why my understanding of Racket > streams is > >> faulty? > >> > >> Thanks, > >> Patrick Sweetman > >> ____________________ > >> Racket Users list: > >> http://lists.racket-lang.org/users > > > > > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users ____________________ Racket Users list: http://lists.racket-lang.org/users