The backquote introduces a template of a data structure to be
built. For example, writing `(cond ((numberp ,x) ,@y) (t (print
,x) ,@y))is roughly equivalent to writing (list 'cond (cons
(list 'numberp x) y) (list* 't (list 'print x) y))Where a comma
occurs in the template, the expression following the comma is to
be evaluated to produce an object to be inserted at that point.
Assume b has the value 3, for example, then evaluating the form
denoted by `(a b ,b ,(+ b 1) b) produces the result (a b 3 4 b).
If a comma is immediately followed by an at-sign, then the form
following the at-sign is evaluated to produce a list of objects.
These objects are then ``spliced'' into place in the template.
For example, if x has the value (a b c), then `(x ,x ,@x foo
,(cadr x) bar ,(cdr x) baz ,@(cdr x)) => (x (a b c) a b c foo b
bar (b c) baz b c)The backquote syntax can be summarized
formally as follows. (append [ x1] [ x2] [ x3] ... [ xn] (quote
atom))where the brackets are used to indicate a transformation
of an xj as fol