;; 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