Am Do., 20. Aug. 2020 um 01:14 Uhr schrieb Felix Thibault <xxxxxx@gmail.com>:


On Tue, Aug 18, 2020 at 11:31 PM Alex Shinn <xxxxxx@gmail.com> wrote:
On Tue, Aug 18, 2020 at 6:59 AM Felix Thibault <xxxxxx@gmail.com> wrote:
So are we moving toward:

___ __* __= __1 object $ struct get! ***

Alternatively: ... *.. =.. object $ struct get! ***

So currently __* __= __1, ::* ::= ::1. and *.. =..  have all been mentioned as alternatives,  is there any consensus?

More than one underscore in a row is sometimes visually unparsable due to font rendering.

Therefore, ::*, etc. are much better alternatives.
 

You should be able to use _ in R6RS using low-level macros.

Not allowing "_" in the literals of syntax-rules was a mistake by the R6RS authors.
 
I don't think you'd be able to reuse much or any of the sample implementation in that case though.

It is possible to write a small macro just for detecting the underscore and using this macro in the syntax-rules macros.

;; R7RS
(define-syntax underscore?
  (syntax-rules (_)
    ((_ _ kt kf) kt)
    ((_ x kt kf) kf)))

;; R6RS
(define-syntax underscore?
  (lambda (stx)
    (syntax-case ()
      ((_ x kt kf)
       (if (and (identifier? #'x) (free-identifier=? #'x #'_))
           #'kt
           #'kf)))))