[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: quasiquote limit cases
| Subject: Re: quasiquote limit cases
| From: Jim Blandy <firstname.lastname@example.org>
| Date: 22 Mar 1998 21:20:57 -0500
| > R5RS says:
| > ... If no commas appear within the <template>, the result of
| > evaluating `<template> is equivalent to the result of evaluating
| > '<template>.
| The intent was clear to me, but I think this is misleading because it
| says that the *results* are equivalent; the results are values, and
| thus it's reasonable to wonder about which definition of value
| equivalence the authors meant.
| I suggest:
| If no commas appear within the <template>, the expression
| `<template> is equivalent to the expression '<template>.
| It's shorter, and it's clear that one is discussing the equivalence of
| expressions: equivalence of effect and value.
I actually wonder about this. I make a distinction between quote and
backquote even in such cases.
When I use quote, I am stating that I will not mutate the object, and that
I may depend on its uniqueness -- i.e. no copying.
When I use backquote, I make no such statement. In fact, I use it to
create a list initialized with constants that I am willing to mutate.
Thus I think of
`(a b c)
as equivalent to
(list 'a 'b 'c)
'(a b c)
is more like
;; at top level
(define <hidden-variable> (list 'a 'b 'c))
;; at use
I realize that the reports don't allow me to make that assumption, but
I wonder whether backquote might not be more useful if they did.
This distinction implies deep copying of back-quoted structure. When
actual insertion is desired, the following clumsy but clear idiom
can be used
`(foo ,bar ,@'(joe mary frederick))