[plt-scheme] Can I abuse with quasi...quotes?

From: Paulo J. Matos (pocm at soton.ac.uk)
Date: Thu Jul 19 05:20:27 EDT 2007

On 19/07/07, Jos Koot <jos.koot at telefonica.net> wrote:
> Both methods are allright and they are equivalent to each other.

OK, so using `(and ,@(1 2 3)) also results in a mutable cons?

> In fact the quasiquote form is expanded into an expression that does the same as
> your example with cons.
> In your example I dont see any abuse of quasiquote.

When I said abuse I meant in whole my source code, I use them heavily,
so I used the word abuse in the sense that I didn't know if using them
a lot would have any performance penalty when compared to using cons.

> ,@ must be followed by an expression that evaluates to a list.
> This list is spliced in. This means that , at expr is replaced by the list but
> without its (outer) pair of parentheses.
> , at expr must be part of a list (possibly an improper list) Your correct example
> makes me think that you already know this.

If `(and 1 ,@(2 3 4)) results in a mutable cons of 1 and (2 3 4),
would it be more efficient PLT-Scheme -wise to use cons-immutable?

Cheers,

Paulo Matos

Yes, this fortunately I already know. :) Thank you!

> Good luck, Jos Koot
>
> ----- Original Message -----
> From: "Paulo J. Matos" <pocm at soton.ac.uk>
> To: "mzscheme Mailing List" <plt-scheme at list.cs.brown.edu>
> Sent: Thursday, July 19, 2007 12:21 AM
> Subject: [plt-scheme] Can I abuse with quasi...quotes?
>
>
> > Hi all,
> >
> > I've been working a lot with propositional logic formulas where the
> > operator is prefixed, like:
> > '(and x1 (or x2 x3) (<=> x4 (not x1)))
> >
> > Now, to build formulas I'm using quasiquote and sometimes even abusing it.
> > For example, given two list of variables of equal length. I do the
> > following to create an assertion of equivalence between them:
> > `(and ,@(map (lambda (var1 var2) `(<=> ,var1 ,var2)) varlst1 varlst2))
> >
> > I don't really understand what happens inside with ,@ and , but I keep
> > wondering if this is better:
> > (cons 'and (map (lambda (var1 var2) (list '<=> var1 var2)) varlst1 varlst2))
> >
> > I don't know if it matter but for the record, I don't use list
> > mutation, so is this better than the first form?
> > Is there a better form?
> >
> > Cheers,
> >
> > --
> > Paulo Jorge Matos - pocm at soton.ac.uk
> > http://www.personal.soton.ac.uk/pocm
> > PhD Student @ ECS
> > University of Southampton, UK
> > _________________________________________________
> >  For list-related administrative tasks:
> >  http://list.cs.brown.edu/mailman/listinfo/plt-scheme
> >
>
>
>
>


-- 
Paulo Jorge Matos - pocm at soton.ac.uk
http://www.personal.soton.ac.uk/pocm
PhD Student @ ECS
University of Southampton, UK


Posted on the users mailing list.