From: Matthew Flatt <mflatt@cs.utah.edu> To: plt-scheme@po.cs.brown.edu Subject: [plt-scheme] 205.7 Date: Fri, 28 Nov 2003 06:42:28 -0700 The exp-tagged code in CVS for MzScheme and MrEd is now version 205.7. Changes: * Macro templates can include consecutive `...’ for splicing sequences: > (syntax-object->datum (syntax-case ’((1 2) (3)) () [((a ...) ...) #’(a ... ...)])) (1 2 3) * Macro patterns can include sub-patterns after `...’: > (syntax-object->datum (syntax-case ’(1 2 3) () [(a ... b) #’(b a ...)])) (3 1 2) A `...’ cannot appear in a sequence after `...’ (except nested in another pattern). A `.’ can appear after `...’, but it’s defined to never match a syntactic list: > (syntax-object->datum (syntax-case ’(1 2 3) () [(a ... . b) #’(b a ...)])) no match > (syntax-object->datum (syntax-case ’(1 2 . 3) () [(a ... . b) #’(b a ...)])) (3 1 2) There’s certainly room for consusion with this rule for `.’. For example, the pattern `(a ... . (b))’ is really `(a ... b)’ which makes it look like `(b)’ matches a syntactic list, but really the `.’ disappears. Nevertheless, the `.’ rule seems useful enough for matching `lambda’ argument sequences, etc., that it’s probably worth keeping. * Improved error reporting (both syntax and run-time) for `with-syntax’. * Changed the error message for using a module-defined identifier before its definition executes. When `error-print-source-location’ is set to #f, the module name is not included in the message (which makes the message look right in DrScheme, especially in the teaching languages). Matthew