Thanks for your comments. This SRFI is less about unifying the two standards but to add a binding construct for syntactic keywords that is so far missing in R7RS and will help macro writers. That said, with SRFI 188, it will be easier to port some R6RS or Racket programs to R7RS. Many Schemes implementing R7RS already include a splicing binding construct for syntactic keywords so one main point of this SRFI is to standardize names for these splicing binding constructs.
The non-splicing binding constructs `let-syntax' and `letrec-syntax' as provided by R7RS are somewhat superfluous because they give the macro programmer nothing that cannot be expressed with `define-syntax'.
On the other hand, there are some macros that can only be expressed with the splicing versions. The simplest example is a macro `foo' that is supposed to transform one form into another one and that needs to define an auxiliary macro `aux' (depending on its own parameters):
(define-syntax foo
(syntax-rules ()
((foo form)
(begin
(define-syntax aux (syntax-rules () (... form ...)))
(... aux ... form ...)))))
This macro has to be used in a definition context because it expands into an instance of `define-syntax' and more. If you want to use the very same macro in an expression context, you have to rewrite it:
(define-syntax foo
(syntax-rules ()
((foo form)
(let-syntax ((aux (syntax-rules () (... form ...))))
(... aux ... form ...)))))
That's unpleasant and maybe hard to understand for the user. With `splicing-let-syntax', one macro suffices:
(define-syntax foo
(syntax-rules ()
((foo form)
(splicing-let-syntax ((aux (syntax-rules () (... form ...))))
(... aux ... form ...)))))
From a theoretical point of view, there is no reason why binding constructs for syntactic keywords should not be splicing, that is, why they should not have the same semantics as `begin'.
Does this help?
Marc