如何定义子窗体

How to define subidform

在 racket 中,我们有 defsubform 作为子表单,但是 defsubform 不接受像 bar 这样的表单,而只接受 (bar ...)

这是(清理后的)implementation of defsubform

#lang racket

(require scribble/core
         scribble/decode)

(define (into-blockquote s)
  (make-nested-flow (make-style "leftindent" null)
                    (if (splice? s)
                        (decode-flow (splice-run s))
                        (list s))))

(define-syntax (defsubform stx)
  (syntax-case stx ()
    [(_ . rest) #'(into-blockquote (defform . rest))]))

这表明您可以按如下方式实施 defsubidform

(define-syntax (defsubidform stx)
  (syntax-case stx ()
    [(_ . rest) #'(into-blockquote (defidform . rest))]))