У Хону уже while
. Вы можете использовать его следующим образом:
#lang honu
var x = 0
while x < 10 {
printf("~a\n", x);
x = x + 1;
}
Вышеприведенная программа печатает 0
в 9
.
Honu также предоставляет способ определения ваших собственных макросов с помощью define-honu-syntax
в Racket Мир. Вот пример:
;; while.rkt
#lang racket
(provide mywhile)
(require honu-parse
(for-syntax syntax/parse
honu-parse))
(define-honu-syntax mywhile
(lambda (code)
(syntax-parse code #:literal-sets (cruft)
[(_ condition:honu-expression body:honu-body . rest)
(values
(racket-syntax (let loop ()
(when condition.result
body.result
(loop))))
#'rest
#t)])))
;; test.honu
#lang honu
require "while.rkt";
var x = 0
mywhile x <= 10 {
printf("~a\n", x);
x = x + 1;
}
Запуск test.honu
также должен вывести 0
в 9
.
Honu также поддерживает определение макросов в мире Honu. См. Пример по https://github.com/racket/honu/blob/master/honu/tests/macros2.honu.