Since lazymicro doesn't have a display function that can be called while in lazymicro, we have to resort to the following trickery to demonstrate that evaluation really is lazy. Th following definitions can be typed into lazymicro when it is expecting keyboard input. (define yes 0) (define no 0) (define (change-yes) (set! yes 'yes)) (define (change-no) (set! no 'no)) (define (my-if test t f) (cond (test t) (else f))) Now if you execute (my-if #t (change-yes) (change-no)) only yes changes. Similarly, if you execute (my-if #f (change-yes) (change-no)) only no changes.