В то время как 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 неверно, система пытается применить пустоту в качестве аргумента к какой-либо процедуре.