See SRFI-45 (http://srfi.schemers.org/srfi-45/srfi-45.html) for a discussion of why lazy is necessary (ie, why force and delay are not sufficient in practice).

Racket's lazy might (?) be slightly different from the one discussed there, though. See this post by Eli for why: http://srfi.schemers.org/srfi-45/post-mail-archive/msg00013.html (according to comments in racket/private/promise.rkt).

Ryan

On 04/09/2013 09:25 PM, Neil Toronto wrote:
The following program creates four infinite lists and tries to take the
first of each. Only the last expression raises an error.

#lang racket

(require racket/promise)

(define ones (lazy (cons 1 ones)))
(define ones* (delay (cons 1 ones*)))

(car (force ones))
(car (force ones*))

(define twos (lazy (lazy (cons 2 twos))))
(define twos* (delay (delay (cons 2 twos*))))

(car (force twos))
(car (force twos*))


The fact that compositions of `lazy' are equivalent to one `lazy' makes
them easier to use in situations where you want to wrap a value with a
promise but don't know whether it's already wrapped. Somehow, this makes
it easier to implement lazy languages, but I'm not clear about how.

Neil ⊥

On 04/09/2013 06:05 PM, Lewis Brown wrote:
Thanks, Danny.

I am trying to understand how to use promises, in particular for lazy
programming. I know there are various implementations that solve this
more simply: racket/stream and racket/lazy; but I'd like to see how
it's done with the more primitive racket/promise library. It appears
that the "lazy" form is specifically meant for lazy, infinite lists,
but the spec is not clear enough for me to figure out how to use it. I
thought a couple examples would make it so.


Lewis Brown
lewisbr...@gmail.com
503-583-2332

On 9 Apr 13, at 4:50 PM, Danny Yoo wrote:

Are you sure you're not looking for the racket/stream library instead?
For example:

    #lang racket
    (require racket/stream)
    (define ones (stream-cons 1 ones))


____________________
   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

Reply via email to