guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: with-syntax return error in Guile, not in Kawa or Racket


From: Damien Mattei
Subject: Re: with-syntax return error in Guile, not in Kawa or Racket
Date: Sun, 12 May 2024 14:37:04 +0200

thank you, i think now i understand better the macro syntax system of R6RS,
i will use all that to have in the next version of Scheme+ two systems:
-still the command line parser that parse for example infix (and slicing)
with operator precedence to prefix
-a transparent system for the user that will use macro to pre-parse the
code (no need to parse it in command line) on the fly (like the command
line parser do it) at the pre-compil stage of the macro,then use the
pre-parsed code in the expansion phase. Finally the run-time execution of
the generated code will be faster as no parsing will be done at this
run-time phase.All that being compatible with the syntax of Guile using
curli-infix SRFI 105.

Just a lot of code to refactor to use both symbolic expression (sexpr) in
the parser mode and now syntactic expression with the macros (modify
$brackett-apply$ $nfx$ etc ... and the procedure called by those).
With syntax it is more easy to manipulate special form like 'and' / 'or'
that cannot be manipulate like procedures * + - / unless quoted which is
not a good thing because when quoted the re-evaluation always cause
problems.(different environment when eval) The use of syntax avoid this
problem.(which does not exist indeed in the command line parser as i only
parse symbolic code)
Using R6RS syntax the hygiene too should be better.


On Sat, May 11, 2024 at 9:14 PM Jean Abou Samra <jean@abou-samra.fr> wrote:

> > the problem when pre-compiling/pre-computing those lists is that with #'
> ,
> > i mean syntax, the optimizer-parse-square-brackets-arguments-lister no
> > more receive  lists but this sort of expression:
> >
> > scheme@(guile-user)> (define T (make-vector 7))
> > scheme@(guile-user)> {T[2 + 1] <- 7}
> > <- : #'(index ...) = (#<syntax:unknown file:3:3 2> #<syntax:unknown
> file:3:5 +> #<syntax:unknown file:3:7 1>)
> > <- : (syntax->datum #'(index ...)) = (2 + 1)
> > optimizer-parse-square-brackets-arguments-lister :
> args-brackets=(#<syntax:unknown file:3:3 2> #<syntax:unknown file:3:5 +>
> #<syntax:unknown file:3:7 1>)
>
> Yes, these are wrapped syntax objects.
>
> > my question is how to deal with that?
>
> There are a variety of tools to work with syntax objects, just like
> there are tools to work with lists. Among them: syntax (#'),
> quasisyntax (#`), unsyntax (#,), unsyntax-splicing (#,@),
> identifier?, free-identifier=?, bound-identifier=?, and of
> course syntax-case.
>
> > becaue in the parser i check ,for example for + being '+ not some sort
> of #<syntax:unknown file:3:5 +>
> > i suppose the problem come from here
> > should i modify the parser to check for #'+ #'- #'* #'/ #'expt #'and
> #'or etc... or is there something to do when i pass arguments in the macro?
>
> Use (free-identifier=? the-identifier #'+)
>
> > also i pass #'(index ...) creating a sort of ( ) list ,how to pass th
> index and ellipsis in a syntax form ?? should i put that in a list with
> list procedure?
>
> #'(index ...) is a traditional list (not a wrapped syntax object), so you
> can work with it directly (its elements are wrapped syntax objects).
>
>
>
>


reply via email to

[Prev in Thread] Current Thread [Next in Thread]