В то время как Loop Macro в DrRacket

Я пытаюсь создать макрос для цикла while в DrRacket. Вот что я написал:

(require mzlib/defmacro)

(define-macro my-while
  (lambda (condition  body)
    (list 'local (list (list 'define (list 'while-loop)
                             (list 'if condition
                                   (list body (list 'while-loop))
                                   '(void))))
          '(while-loop))))


(define x 0)

(my-while (< x 10)
          (begin              
            (display x)
            (newline)
            (set! x (+ x 1))))

Выход этой программы:

0
1
2
3
4
5
6
7
8
9
error:  procedure application: expected procedure, given: #<void>; arguments were: #<void>

Может кто-то помочь мне с этим? Почему этот макрос просто не завершается и не возвращает void. Кажется, что когдаcondition неверно, система пытается применить пустоту в качестве аргумента к какой-либо процедуре.

Ответы на вопрос(4)

Ваш ответ на вопрос