Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

backquote expansion in LW

23 views
Skip to first unread message

Espen Vestre

unread,
Sep 26, 2002, 3:33:33 AM9/26/02
to
I might be feeding the trolls (*), but I couldn't resist posting a
little discovery I just made, and I think newbies that get confused
by certain postings on backquote may find this very helpful:

In LispWorks(**), the backquote expansion of nested backquotes is
done _exactly_ in the order of the definition in the spec, and it's
possible to trace it!

You can do this little experiment at home:

(trace system::backquote-translate)
'`(gazonk `(foo ,(bar ,gazonk)))

(*) Troll follow-ups will be redirected to /dev/null (I promise!) ;-)
(**) tested on LW 4.2.6 linux + win32
--
(espen)

ilias

unread,
Sep 26, 2002, 8:25:35 AM9/26/02
to
Espen Vestre wrote:
> I might be feeding the trolls (*), but I couldn't resist posting a
> little discovery I just made, and I think newbies that get confused
> by certain postings on backquote may find this very helpful:

why don't you post in topic, if you care about the newbies?

don't you realize that you behave like a troll?

>
> In LispWorks(**), the backquote expansion of nested backquotes is
> done _exactly_ in the order of the definition in the spec, and it's
> possible to trace it!
>
> You can do this little experiment at home:
>
> (trace system::backquote-translate)
> '`(gazonk `(foo ,(bar ,gazonk)))
>
> (*) Troll follow-ups will be redirected to /dev/null (I promise!) ;-)
> (**) tested on LW 4.2.6 linux + win32

i'm a lisp novice.

function 'trace'

looks very nice.

i'll use it.

in the next document.

here the output of this function:

----------------------------------------------------------------------
CL-USER 1 > (trace system::backquote-translate)
(SYSTEM::BACKQUOTE-TRANSLATE)
0 SYSTEM::BACKQUOTE-TRANSLATE > ((FOO #))
>> SYSTEM::FORM : (FOO (SYSTEM::*BACKQUOTE-COMMA* BAR #))
1 SYSTEM::BACKQUOTE-TRANSLATE > (FOO)
>> SYSTEM::FORM : FOO
1 SYSTEM::BACKQUOTE-TRANSLATE < (QUOTE FOO)
1 SYSTEM::BACKQUOTE-TRANSLATE > ((#))
>> SYSTEM::FORM : ((SYSTEM::*BACKQUOTE-COMMA* BAR #))
2 SYSTEM::BACKQUOTE-TRANSLATE > ((SYSTEM::*BACKQUOTE-COMMA* BAR #))
>> SYSTEM::FORM : (SYSTEM::*BACKQUOTE-COMMA* BAR
(SYSTEM::*BACKQUOTE-COMMA* . GAZONK))
2 SYSTEM::BACKQUOTE-TRANSLATE < (SYSTEM::*BACKQUOTE-COMMA* (BAR #))
2 SYSTEM::BACKQUOTE-TRANSLATE > (NIL)
>> SYSTEM::FORM : NIL
2 SYSTEM::BACKQUOTE-TRANSLATE < (NIL NIL)
1 SYSTEM::BACKQUOTE-TRANSLATE < (LIST (#))
0 SYSTEM::BACKQUOTE-TRANSLATE < (LIST (# #))
0 SYSTEM::BACKQUOTE-TRANSLATE > ((GAZONK #))
>> SYSTEM::FORM : (GAZONK (SYSTEM::BQ-LIST # #))
1 SYSTEM::BACKQUOTE-TRANSLATE > (GAZONK)
>> SYSTEM::FORM : GAZONK
1 SYSTEM::BACKQUOTE-TRANSLATE < (QUOTE GAZONK)
1 SYSTEM::BACKQUOTE-TRANSLATE > ((#))
>> SYSTEM::FORM : ((SYSTEM::BQ-LIST # #))
2 SYSTEM::BACKQUOTE-TRANSLATE > ((SYSTEM::BQ-LIST # #))
>> SYSTEM::FORM : (SYSTEM::BQ-LIST (QUOTE FOO) (BAR #))
3 SYSTEM::BACKQUOTE-TRANSLATE > (SYSTEM::BQ-LIST)
>> SYSTEM::FORM : SYSTEM::BQ-LIST
3 SYSTEM::BACKQUOTE-TRANSLATE < (QUOTE SYSTEM::BQ-LIST)
3 SYSTEM::BACKQUOTE-TRANSLATE > ((# #))
>> SYSTEM::FORM : ((QUOTE FOO) (BAR #))
4 SYSTEM::BACKQUOTE-TRANSLATE > ((QUOTE FOO))
>> SYSTEM::FORM : (QUOTE FOO)
5 SYSTEM::BACKQUOTE-TRANSLATE > (QUOTE)
>> SYSTEM::FORM : QUOTE
5 SYSTEM::BACKQUOTE-TRANSLATE < (QUOTE QUOTE)
5 SYSTEM::BACKQUOTE-TRANSLATE > ((FOO))
>> SYSTEM::FORM : (FOO)
6 SYSTEM::BACKQUOTE-TRANSLATE > (FOO)
>> SYSTEM::FORM : FOO
6 SYSTEM::BACKQUOTE-TRANSLATE < (QUOTE FOO)
6 SYSTEM::BACKQUOTE-TRANSLATE > (NIL)
>> SYSTEM::FORM : NIL
6 SYSTEM::BACKQUOTE-TRANSLATE < (NIL NIL)
5 SYSTEM::BACKQUOTE-TRANSLATE < (QUOTE (FOO))
4 SYSTEM::BACKQUOTE-TRANSLATE < (QUOTE (QUOTE FOO))
4 SYSTEM::BACKQUOTE-TRANSLATE > ((#))
>> SYSTEM::FORM : ((BAR #))
5 SYSTEM::BACKQUOTE-TRANSLATE > ((BAR #))
>> SYSTEM::FORM : (BAR (SYSTEM::*BACKQUOTE-COMMA* . GAZONK))
6 SYSTEM::BACKQUOTE-TRANSLATE > (BAR)
>> SYSTEM::FORM : BAR
6 SYSTEM::BACKQUOTE-TRANSLATE < (QUOTE BAR)
6 SYSTEM::BACKQUOTE-TRANSLATE > ((#))
>> SYSTEM::FORM : ((SYSTEM::*BACKQUOTE-COMMA* . GAZONK))
7 SYSTEM::BACKQUOTE-TRANSLATE >
((SYSTEM::*BACKQUOTE-COMMA* . GAZONK))
>> SYSTEM::FORM : (SYSTEM::*BACKQUOTE-COMMA* . GAZONK)
7 SYSTEM::BACKQUOTE-TRANSLATE <
(SYSTEM::*BACKQUOTE-COMMA* GAZONK)
7 SYSTEM::BACKQUOTE-TRANSLATE > (NIL)
>> SYSTEM::FORM : NIL
7 SYSTEM::BACKQUOTE-TRANSLATE < (NIL NIL)
6 SYSTEM::BACKQUOTE-TRANSLATE < (LIST (GAZONK))
5 SYSTEM::BACKQUOTE-TRANSLATE < (LIST (# GAZONK))
5 SYSTEM::BACKQUOTE-TRANSLATE > (NIL)
>> SYSTEM::FORM : NIL
5 SYSTEM::BACKQUOTE-TRANSLATE < (NIL NIL)
4 SYSTEM::BACKQUOTE-TRANSLATE < (LIST (#))
3 SYSTEM::BACKQUOTE-TRANSLATE < (LIST (# #))
2 SYSTEM::BACKQUOTE-TRANSLATE < (LIST (# # #))
2 SYSTEM::BACKQUOTE-TRANSLATE > (NIL)
>> SYSTEM::FORM : NIL
2 SYSTEM::BACKQUOTE-TRANSLATE < (NIL NIL)
1 SYSTEM::BACKQUOTE-TRANSLATE < (LIST (#))
0 SYSTEM::BACKQUOTE-TRANSLATE < (LIST (# #))

CL-USER 2 > '`(gazonk `(foo ,(bar ,gazonk)))
(SYSTEM::BQ-LIST (QUOTE GAZONK) (SYSTEM::BQ-LIST (QUOTE SYSTEM::BQ-LIST)
(QUOTE (QUOTE FOO)) (SYSTEM::BQ-LIST (QUOTE BAR) GAZONK)))

CL-USER 3 >

ilias

unread,
Sep 26, 2002, 5:21:27 PM9/26/02
to

well, i've played a little with this.

and i'm now *really* confused.

why do you give me the best argument, that the definition of backquote
is wrong?

anyway.

ilias

unread,
Sep 27, 2002, 12:55:52 PM9/27/02
to

now what you've provided is irrelevant.

it describes internal implementation-dependent processing.

the specs state 'expanded', expansion referes to replacing ` with the
implementation-dependent function and , with the
implementation-dependent function(s), thus creating the evaluateable
representation of the input-string.

in LispWorks:

CL-USER 1 > (get-macro-character #\`)
SYSTEM::READ-BACKQUOTE
NIL

thus you should simply trace this:

(trace System::read-backquote)

test expression:
`(,a `(,,b))

and the you got what's obvious:

(i've abbreviated some text, so the lines fit in one line.

0 SYSTEM::READ-BACKQUOTE > (#<E::RS #<EDITOR... i-pane 2>> #\`)
>> STREAM : #<E::RS #<EDITOR... i-pane 2>>
>> CHAR : #\`
1 SYSTEM::READ-BACKQUOTE > (#<E::RS #<EDITOR... i-pane 2>> #\`)
>> STREAM : ##<E::RS #<EDITOR... i-pane 2>>
>> CHAR : #\`
1 SYSTEM::READ-BACKQUOTE < ((SYSTEM::BQ-LIST #))
0 SYSTEM::READ-BACKQUOTE < ((SYSTEM::BQ-LIST A #))

CL-USER 7 > `(,a `(,,b))
| |
0-----------+ |
1--------------+

outermost backquote is expanded first.

thus: specs paragraph 'nested backquote' wrong.

0 new messages