Racket宏可以扩展为空吗?

时间:2016-10-17 09:11:18

标签: macros racket

我们如何编写nothing宏来扩展以下行,如评论中所述?

(nothing + 1 2) ; -> (+ 1 2)
(+ 1 nothing 2) ; -> (+ 1 2)
(nothing)       ; ->         ; (just a blank line)

如果#'0的出现可以用“空语法”替换,如果存在这样的事情,那么像下面这样的东西就会起作用。

(define-syntax (nothing stx)
  (syntax-parse stx
    [(nothing) #'0]
    [(nothing body ...) #'(body ...)]
    [nothing #'0]))

所以我想问题可能是,“你如何在球拍中表示空语法?”,但这是背景。

1 个答案:

答案 0 :(得分:4)

没有"空语法"的概念。你可以得到的最接近的是产生一个什么都不做的表达式。例如(void)(begin),具体取决于上下文。