Scheme宏 - 在转换中配对但列表作为输出?

Jus*_*ier 0 macros scheme

假设我在R 5 RS方案中有以下宏:

(define-syntax pair-test
  (syntax-rules ()
     ((_ (a b . c))
      (quote (a b . c)))))
Run Code Online (Sandbox Code Playgroud)

宏将输入对转换为输出对,正如人们所期望的那样:

(pair-test (1 2 . 3))
==> (1 2 . 3)
Run Code Online (Sandbox Code Playgroud)

我也可以将规则传递给宏,如规范允许的那样.但是,输出是列表而不是一对:

(pair-test (1 2 3))
==> (1 2 3)
Run Code Online (Sandbox Code Playgroud)

到底发生了什么?为什么输出是列表而不是一对?

Ros*_*son 5

可能c(3 . ())在第二种情况?我不是积极的,但这对我有意义.然后引用(a b . c)(1 2 . (3 . ()))(1 2 . (3))(3)是一个适当的列表,以便(1 2 3)