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

Re: changes to the design of SRFI-26 "Notation for specializing parameters without currying"

This page is part of the web mail archives of SRFI 26 from before July 7th, 2015. The new archives for SRFI 26 contain all messages, not just those from before July 7th, 2015.



Here are two belated bug reports on the previous draft:

1. "petrovsky" => "petrofsky".

2. The use of (cut "loop" vars proc proc-args . cut-args) in the
   reference implementation causes some uses of cut to fail even
   though the spec for cut indicates that they should succeed, because
   "loop" is a valid expression.  You could fix this by changing the
   marker to some non-expression datum like (), #(), or #(loop).

   Alternatively, bind a top-level identifier like srfi26-internal-cut
   to the internal version.  Then the cut macro would no longer suffer
   the misfeature of allowing ill-formed uses just because they happen
   to match its internals.

-al

P.S.  The real solution here is that the syntax for transformers
should be extended to allow (let-syntax <bindings> <transformer>) as a
valid transformer, with the obvious semantics, and then you could
write:

  (define-syntax cut
    (letrec-syntax
        ((internal-cut
	  (syntax-rules (<> <...>)
	    ;; rules
	    )))
      (syntax-rules ()
        ((cut . args) (internal-cut () () . args)))))

but that's the subject of a different SRFI.