While-Loop-Makro in DrRacket

Ich versuche, ein Makro für die while-Schleife in DrRacket zu erstellen. Folgendes habe ich geschrieben:

(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))))

Die Ausgabe dieses Programms ist:

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

Kann mir jemand dabei helfen? Warum wird dieses Makro nicht einfach beendet und ist nichtig? Es scheint, dass, wenn dieBedingung Ist dies nicht der Fall, versucht das System, die Leere als Argument auf eine Prozedur anzuwenden.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage