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.