;; when (define-syntax my-when (syntax-rules () ((_ pred body ...) (if pred (begin body ...) #f)))) (when #f) ;; #<undef> (my-when #f) ;; #f (((lambda (f) (f f)) (lambda (f) (lambda (n) (my-when (< 0 n) (print n) ((f f)(- n 1)))))) 5) ;; 5 ;; 4 ;; 3 ;; 2 ;; 1 ;; #f (((lambda (f) (f f)) (lambda (f) (lambda (n) (when (< 0 n) (print n) ((f f)(- n 1)))))) 5) ;; 5 ;; 4 ;; 3 ;; 2 ;; 1 ;; #<undef> (((lambda (f) (f f)) (lambda (f) (lambda (n) (my-when (< 0 n) (print n) ((f f)(- n 1)))))) -1) ;; #f