(let ((name 'a)) (list ,name ',name))
=) (list a (quote a))
(a ,(+ 1 2) ,@(map abs '(4 -5 6)) b)
=) (a 3 4 5 6 b)
(( foo ,(- 10 3)) ,@(cdr '(c)) . ,(car '(cons)))
=) ((foo 7) . cons)
#(10 5 ,(sqrt 4) ,@(map sqrt '(16 9)) 8)
=) #(10 5 2 4 3 8)
Quasiquote forms may be nested. Substitutions are made
only for unquoted components appearing at the same nesting
level as the outermost backquote. The nesting level increases
by one inside each successive quasiquotation, and
decreases by one inside each unquotation.
(a (b ,(+ 1 2) ,(foo ,(+ 1 3) d) e) f)
=) (a (b ,(+ 1 2) ,(foo 4 d) e) f)
(let ((name1 'x)
(name2 'y))
(a (b ,,name1 ,',name2 d) e))
=) (a (b ,x ,'y d) e)
The two notations hqq templatei and (quasiquote
hqq templatei) are identical in all respects. ,hexpressioni
is identical to (unquote hexpressioni), and ,@hexpressioni
is identical to (unquote-splicing hexpressioni). The external
syntax generated by write for two-element lists
whose car is one of these symbols may vary between implementations.
(quasiquote (list (unquote (+ 1 2)) 4))
=) (list 3 4)
'(quasiquote (list (unquote (+ 1 2)) 4))
=) (list ,(+ 1 2) 4)
i.e., (quasiquote (list (unquote (+ 1 2)) 4))
Unpredictable behavior can result if any of the symbols
quasiquote, unquote, or unquote-splicing appear in positions
within a hqq templatei otherwise than as described
above.
本文深入探讨了Scheme语言中准引用的使用方法及其嵌套规则,包括如何通过准引用、未引用及未引用拼接来构造表达式,同时提供了具体的示例以帮助理解。
447

被折叠的 条评论
为什么被折叠?



