not sure to understand, i admit i'm testing new things for me , i try to understand macro syntax and all the stuff... reading https://www.greghendershott.com/fear-of-macros/index.html but half (or less) the way.....
do you mean just replacing 'list by #'list ? i do it and it is still working at least: (define-syntax $bracket-apply$ (lambda (stx) (syntax-case stx () ;; a version that pre-compil the infix expression, should be faster;; scheme@(guile-user)> {#(1 2 3 4 5 6 7 8 9)[6 - 4 : 5 + 2]};; $bracket-apply$ : parsed-evaluated-args=#<syntax (list (- 6 4) : (+ 5 2))>;; $1 = #(3 4 5 6 7);; scheme@(guile-user)> (define i 5);; scheme@(guile-user)> {#(1 2 3 4 5 6 7 8 9)[6 - 4 : i + 2]};; $bracket-apply$ : parsed-evaluated-args=#<syntax (list (- 6 4) : (+ i 2))>;; $2 = #(3 4 5 6 7) (($bracket-apply$ container . args-brackets) (with-syntax ((parsed-evaluated-args (datum->syntax stx ; #f (cons #'list (optimizer-parse-square-brackets-arguments-lister (syntax->datum #'args-brackets)))))) ;;(display "$bracket-apply$ : parsed-evaluated-args=") (display #'parsed-evaluated-args) (newline) #'($bracket-apply$next4list-args container parsed-evaluated-args)))))) another strange thing perheaps related to macro is that the compile warns me always that the optimizer-parse-square-brackets-arguments-lister procedure is not found: GNU Guile 3.0.8.99-f3ea8 Copyright (C) 1995-2022 Free Software Foundation, Inc. Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'. This program is free software, and you are welcome to redistribute it under certain conditions; type `,show c' for details. Enter `,help' for help. scheme@(guile-user)> (use-modules (Scheme+)) ;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0 ;;; or pass the --no-auto-compile argument to disable. ;;; compiling /usr/local/share/guile/site/3.0/Scheme+.scm ;;; note: source file /usr/local/share/guile/site/3.0/for_next_step.scm ;;; newer than compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/usr/local/share/guile/site/3.0/for_next_step.scm.go ;;; compiling /usr/local/share/guile/site/3.0/for_next_step.scm ;;; compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/usr/local/share/guile/site/3.0/for_next_step.scm.go ;;; note: source file /usr/local/share/guile/site/3.0/growable-vector.scm ;;; newer than compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/usr/local/share/guile/site/3.0/growable-vector.scm.go ;;; compiling /usr/local/share/guile/site/3.0/growable-vector.scm ;;; growable-vector.scm:149:2: warning: possibly wrong number of arguments to `vector-copy' ;;; compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/usr/local/share/guile/site/3.0/growable-vector.scm.go ;;; note: source file /usr/local/share/guile/site/3.0/infix-operators.scm ;;; newer than compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/usr/local/share/guile/site/3.0/infix-operators.scm.go ;;; compiling /usr/local/share/guile/site/3.0/infix-operators.scm ;;; compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/usr/local/share/guile/site/3.0/infix-operators.scm.go ;;; note: source file /usr/local/share/guile/site/3.0/overload.scm ;;; newer than compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/usr/local/share/guile/site/3.0/overload.scm.go ;;; compiling /usr/local/share/guile/site/3.0/overload.scm ;;; compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/usr/local/share/guile/site/3.0/overload.scm.go ;;; note: source file /usr/local/share/guile/site/3.0/array.scm ;;; newer than compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/usr/local/share/guile/site/3.0/array.scm.go ;;; compiling /usr/local/share/guile/site/3.0/array.scm ;;; compiled /Users/mattei/.cache/guile/ccache/3.0-LE-8-4.6/usr/local/share/guile/site/3.0/array.scm.go ;;; WARNING: compilation of /usr/local/share/guile/site/3.0/Scheme+.scm failed: ;;; *Unbound variable: optimizer-parse-square-brackets-arguments-lister* scheme@(guile-user)> {v <+ (vector 1 2 3 4)} scheme@(guile-user)> {v[1 : 3] <- #(-1 -2 -3 -4 -5 -6 -7)[2 : 4]} scheme@(guile-user)> v $1 = #(1 -3 -4 4) but anyway it works 🤔 On Mon, May 6, 2024 at 8:58 PM Maxime Devos <maximede...@telenet.be> wrote: > > [...] > > > > > > That should work, but it's also non-hygienic. For example, it will > > > be affected if the user does > > > > > > (let ((list ...)) > > > (call-your-macro ...)) > > > > > >> and since you use #f in the datum->syntax call, it will also strip away > > >> all hygiene annotations from the args-brackets, causing problems inside > > >> that as well. > > >> > > > > >i changed #f to stx in the macro > > > > That doesn’t make it hygienic, for the reasons mentioned above. > > > > syntax (#') / quasisyntax (#`)/ unsyntax (#,) and unsyntax-splicing (#,@) > your friend – they behave pretty much the same as their > quote/quasiquote/... counterparts. > > > > Hygiene is usually pretty simple – just don’t do sexp things (say, > quasiquote), do syntax things (quasisyntax) instead, then typically things > will go well. > > > > Best regards, > > Maxime Devos. >