假设我在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)
到底发生了什么?为什么输出是列表而不是一对?
可能c
是(3 . ())
在第二种情况?我不是积极的,但这对我有意义.然后引用(a b . c)
将(1 2 . (3 . ()))
是(1 2 . (3))
和(3)
是一个适当的列表,以便(1 2 3)
?