Hi Mark, thank you very much for replying so quickly. Am Mi., 14. Nov. 2018 um 20:11 Uhr schrieb Mark H Weaver : > > The `ellipsis?' procedure in psyntax.ss does exactly this, but it > > isn't available to user code. Re-implementing it is not possible > > without accessing internal details like the special identifier #{ > > $sc-ellipsis }# and without resorting to hacks. > > Surprisingly, it actually _is_ possible to do it portably in any > R[567]RS Scheme. See 'match-check-ellipsis' near the end of > modules/ice-9/match.upstream.scm. > This is why I wrote "without resorting to hacks". :-) Like `ellipsis?', `bound-identifier=?' and `free-identifier=?' can also be portably implemented in R5RS, and I had to use all these tricks to provide a portable implementation of SRFI-148. But it is nicer to have `bound-identifier?' and `free-identifier?' as procedures that can be called by macro transformers easily. And so I think of `ellipsis?'. > > Thus, I would like to ask to add `ellipsis?' to the list of procedures > > exported by Guile (like `identifier?` or `bound-identifier=?` already > > are). > > I'll need to think about how this could be exposed in the API. It's not > as simple as exporting that procedure. The 'ellipsis?' procedure is not > able to answer the question by looking only at the syntax object; it > also needs the macro-expansion environment 'r', which you do not have. > 'identifier?' and 'bound-identifier=?' only need the syntax objects. > I think I understand (please correct me if I am wrong): If we want to check whether `e' is the current ellipsis, we cannot simply look up the binding of `(datum->syntax e '$sc-expand)' because the wrap of `e' may be different than the wrap of the, say, `syntax-case' or `syntax' form in which `e' appears. So what we actually need is a procedure of two arguments: `(ellipsis? e ctx)' returns `#t' if the identifier `e' is the current ellipsis in the lexical environment of the identifier `ctx'. -- Marc