方案/球拍:此Honu lang如何创建不带评估括号的语法?

问题描述 投票:0回答:1

这是用球拍创建的Honu郎:https://docs.racket-lang.org/honu/Examples.html?q=hon

该语言看起来与其他结构化lang一样,但是它是基于Racket构建的,该语言需要括号( )进行评估。 Honu如何定义不带括号的语句?

我可以在球拍中定义一些语法,但是在评估它们时,我需要添加包装括号:

(require syntax/parse/define)
(define-syntax-rule (while Cond Form ...)
  (do [] [(not Cond)] Form ...)
)

(define I 0)
;HOW TO RUN while WITHOUT PARENTHESES?
(while (< I 10)
  (displayln I)
  (set! I (add1 I))
)

我可以在以下位置测试球拍代码:https://www.jdoodle.com/execute-racket-online/

syntax scheme lisp racket evaluation
1个回答
0
投票

Honu已经有while。您可以像这样使用它:

#lang honu

var x = 0
while x < 10 {
  printf("~a\n", x);
  x = x + 1;
}

上述程序将0打印到9

Honu还提供了一种通过球拍世界中的define-honu-syntax定义自己的宏的方法。这是一个例子:

;; 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中的示例。

© www.soinside.com 2019 - 2024. All rights reserved.