Artifact
dec381f80e4d5caf3fe2d62091331a7bbfb2aa0f:
- File
sxml/sxml-match.ss
— part of check-in
[179541393e]
at
2016-12-14 14:46:57
on branch trunk
— call/1cc in sxml-match
(user:
aldo
size: 68832)
0000: 3b 3b 20 4c 69 62 72 61 72 79 3a 20 73 78 6d 6c ;; Library: sxml
0010: 2d 6d 61 74 63 68 0a 3b 3b 20 41 75 74 68 6f 72 -match.;; Author
0020: 3a 20 4a 69 6d 20 42 65 6e 64 65 72 0a 3b 3b 20 : Jim Bender.;;
0030: 56 65 72 73 69 6f 6e 3a 20 31 2e 30 61 2c 20 50 Version: 1.0a, P
0040: 6f 72 74 61 62 6c 65 20 53 79 6e 74 61 78 2d 63 ortable Syntax-c
0050: 61 73 65 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 ase version for
0060: 28 50 65 74 69 74 65 29 20 43 68 65 7a 20 53 63 (Petite) Chez Sc
0070: 68 65 6d 65 20 61 6e 64 20 53 49 53 43 0a 3b 3b heme and SISC.;;
0080: 0a 3b 3b 20 43 6f 70 79 72 69 67 68 74 20 32 30 .;; Copyright 20
0090: 30 35 2c 20 4a 69 6d 20 42 65 6e 64 65 72 0a 3b 05, Jim Bender.;
00a0: 3b 20 73 78 6d 6c 2d 6d 61 74 63 68 20 69 73 20 ; sxml-match is
00b0: 72 65 6c 65 61 73 65 64 20 75 6e 64 65 72 20 74 released under t
00c0: 68 65 20 4d 49 54 20 4c 69 63 65 6e 73 65 0a 3b he MIT License.;
00d0: 3b 0a 28 6d 6f 64 75 6c 65 20 70 6f 72 74 61 62 ;.(module portab
00e0: 69 6c 69 74 79 20 28 6c 65 74 2f 65 63 29 0a 20 ility (let/ec).
00f0: 20 0a 20 20 3b 20 75 6e 64 65 72 20 43 68 65 7a . ; under Chez
0100: 20 53 63 68 65 6d 65 20 61 6e 64 20 50 65 74 69 Scheme and Peti
0110: 74 65 20 43 68 65 7a 20 53 63 68 65 6d 65 2c 20 te Chez Scheme,
0120: 75 73 65 20 63 61 6c 6c 2f 31 63 63 0a 20 20 28 use call/1cc. (
0130: 64 65 66 69 6e 65 2d 73 79 6e 74 61 78 20 6c 65 define-syntax le
0140: 74 2f 65 63 0a 20 20 20 20 28 73 79 6e 74 61 78 t/ec. (syntax
0150: 2d 72 75 6c 65 73 20 28 29 0a 20 20 20 20 20 20 -rules ().
0160: 5b 28 6c 65 74 2f 65 63 20 6e 61 6d 65 20 65 78 [(let/ec name ex
0170: 70 30 20 65 78 70 20 2e 2e 2e 29 0a 20 20 20 20 p0 exp ...).
0180: 20 20 20 28 63 61 6c 6c 2f 31 63 63 20 28 6c 61 (call/1cc (la
0190: 6d 62 64 61 20 28 6e 61 6d 65 29 20 65 78 70 30 mbda (name) exp0
01a0: 20 65 78 70 20 2e 2e 2e 29 29 5d 29 29 0a 20 20 exp ...))])).
01b0: 0a 20 20 29 0a 0a 0a 28 6d 6f 64 75 6c 65 20 73 . )...(module s
01c0: 78 6d 6c 2d 61 63 63 65 73 73 6f 72 73 20 28 6e xml-accessors (n
01d0: 6f 64 65 73 65 74 3f 0a 20 20 20 20 20 20 20 20 odeset?.
01e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
01f0: 78 6d 6c 2d 65 6c 65 6d 65 6e 74 2d 74 61 67 0a xml-element-tag.
0200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0210: 20 20 20 20 20 20 20 20 78 6d 6c 2d 65 6c 65 6d xml-elem
0220: 65 6e 74 2d 61 74 74 72 69 62 75 74 65 73 0a 20 ent-attributes.
0230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0240: 20 20 20 20 20 20 20 78 6d 6c 2d 65 6c 65 6d 65 xml-eleme
0250: 6e 74 2d 63 6f 6e 74 65 6e 74 73 0a 20 20 20 20 nt-contents.
0260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0270: 20 20 20 20 6d 61 74 63 68 2d 78 6d 6c 2d 61 74 match-xml-at
0280: 74 72 69 62 75 74 65 0a 20 20 20 20 20 20 20 20 tribute.
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
02a0: 66 69 6c 74 65 72 2d 61 74 74 72 69 62 75 74 65 filter-attribute
02b0: 73 29 0a 20 20 20 20 0a 20 20 28 64 65 66 69 6e s). . (defin
02c0: 65 20 28 6e 6f 64 65 73 65 74 3f 20 78 29 0a 20 e (nodeset? x).
02d0: 20 20 20 28 6f 72 20 28 61 6e 64 20 28 70 61 69 (or (and (pai
02e0: 72 3f 20 78 29 20 28 6e 6f 74 20 28 73 79 6d 62 r? x) (not (symb
02f0: 6f 6c 3f 20 28 63 61 72 20 78 29 29 29 29 20 28 ol? (car x)))) (
0300: 6e 75 6c 6c 3f 20 78 29 29 29 0a 20 20 0a 20 20 null? x))). .
0310: 28 64 65 66 69 6e 65 20 28 78 6d 6c 2d 65 6c 65 (define (xml-ele
0320: 6d 65 6e 74 2d 74 61 67 20 73 29 0a 20 20 20 20 ment-tag s).
0330: 28 69 66 20 28 61 6e 64 20 28 70 61 69 72 3f 20 (if (and (pair?
0340: 73 29 20 28 73 79 6d 62 6f 6c 3f 20 28 63 61 72 s) (symbol? (car
0350: 20 73 29 29 29 0a 20 20 20 20 20 20 20 20 28 63 s))). (c
0360: 61 72 20 73 29 0a 20 20 20 20 20 20 20 20 28 65 ar s). (e
0370: 72 72 6f 72 20 27 78 6d 6c 2d 65 6c 65 6d 65 6e rror 'xml-elemen
0380: 74 2d 74 61 67 20 22 65 78 70 65 63 74 65 64 20 t-tag "expected
0390: 61 6e 20 78 6d 6c 2d 65 6c 65 6d 65 6e 74 2c 20 an xml-element,
03a0: 67 69 76 65 6e 22 20 73 29 29 29 0a 20 20 0a 20 given" s))). .
03b0: 20 28 64 65 66 69 6e 65 20 28 78 6d 6c 2d 65 6c (define (xml-el
03c0: 65 6d 65 6e 74 2d 61 74 74 72 69 62 75 74 65 73 ement-attributes
03d0: 20 73 29 0a 20 20 20 20 28 69 66 20 28 61 6e 64 s). (if (and
03e0: 20 28 70 61 69 72 3f 20 73 29 20 28 73 79 6d 62 (pair? s) (symb
03f0: 6f 6c 3f 20 28 63 61 72 20 73 29 29 29 0a 20 20 ol? (car s))).
0400: 20 20 20 20 20 20 28 66 6f 6c 64 2d 72 69 67 68 (fold-righ
0410: 74 20 28 6c 61 6d 62 64 61 20 28 61 20 62 29 0a t (lambda (a b).
0420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0430: 20 20 20 20 20 20 28 69 66 20 28 61 6e 64 20 28 (if (and (
0440: 70 61 69 72 3f 20 61 29 20 28 65 71 3f 20 27 40 pair? a) (eq? '@
0450: 20 28 63 61 72 20 61 29 29 29 0a 20 20 20 20 20 (car a))).
0460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0470: 20 20 20 20 20 28 69 66 20 28 6e 75 6c 6c 3f 20 (if (null?
0480: 62 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 b).
0490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
04a0: 20 28 66 69 6c 74 65 72 20 28 6c 61 6d 62 64 61 (filter (lambda
04b0: 20 28 69 29 20 28 6e 6f 74 20 28 61 6e 64 20 28 (i) (not (and (
04c0: 70 61 69 72 3f 20 69 29 20 28 65 71 3f 20 27 40 pair? i) (eq? '@
04d0: 20 28 63 61 72 20 69 29 29 29 29 29 20 28 63 64 (car i))))) (cd
04e0: 72 20 61 29 29 0a 20 20 20 20 20 20 20 20 20 20 r a)).
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0500: 20 20 20 20 28 66 6f 6c 64 2d 72 69 67 68 74 20 (fold-right
0510: 28 6c 61 6d 62 64 61 20 28 63 20 64 29 0a 20 20 (lambda (c d).
0520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0540: 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 61 (if (a
0550: 6e 64 20 28 70 61 69 72 3f 20 63 29 20 28 65 71 nd (pair? c) (eq
0560: 3f 20 27 40 20 28 63 61 72 20 63 29 29 29 0a 20 ? '@ (car c))).
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
05a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
05b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
05d0: 20 28 63 6f 6e 73 20 63 20 64 29 29 29 0a 20 20 (cons c d))).
05e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
05f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0600: 20 20 20 20 20 20 20 20 62 20 28 63 64 72 20 61 b (cdr a
0610: 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))).
0620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 29 b)
0630: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
0640: 20 20 20 20 20 20 27 28 29 0a 20 20 20 20 20 20 '().
0650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 (c
0660: 64 72 20 73 29 29 0a 20 20 20 20 20 20 20 20 28 dr s)). (
0670: 65 72 72 6f 72 20 27 78 6d 6c 2d 65 6c 65 6d 65 error 'xml-eleme
0680: 6e 74 2d 61 74 74 72 69 62 75 74 65 73 20 22 65 nt-attributes "e
0690: 78 70 65 63 74 65 64 20 61 6e 20 78 6d 6c 2d 65 xpected an xml-e
06a0: 6c 65 6d 65 6e 74 2c 20 67 69 76 65 6e 22 20 73 lement, given" s
06b0: 29 29 29 0a 20 20 0a 20 20 28 64 65 66 69 6e 65 ))). . (define
06c0: 20 28 78 6d 6c 2d 65 6c 65 6d 65 6e 74 2d 63 6f (xml-element-co
06d0: 6e 74 65 6e 74 73 20 73 29 0a 20 20 20 20 28 69 ntents s). (i
06e0: 66 20 28 61 6e 64 20 28 70 61 69 72 3f 20 73 29 f (and (pair? s)
06f0: 20 28 73 79 6d 62 6f 6c 3f 20 28 63 61 72 20 73 (symbol? (car s
0700: 29 29 29 0a 20 20 20 20 20 20 20 20 28 66 69 6c ))). (fil
0710: 74 65 72 20 28 6c 61 6d 62 64 61 20 28 69 29 0a ter (lambda (i).
0720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0730: 20 20 28 6e 6f 74 20 28 61 6e 64 20 28 70 61 69 (not (and (pai
0740: 72 3f 20 69 29 20 28 65 71 3f 20 27 40 20 28 63 r? i) (eq? '@ (c
0750: 61 72 20 69 29 29 29 29 29 0a 20 20 20 20 20 20 ar i))))).
0760: 20 20 20 20 20 20 20 20 20 20 28 63 64 72 20 73 (cdr s
0770: 29 29 0a 20 20 20 20 20 20 20 20 28 65 72 72 6f )). (erro
0780: 72 20 27 78 6d 6c 2d 65 6c 65 6d 65 6e 74 2d 63 r 'xml-element-c
0790: 6f 6e 74 65 6e 74 73 20 22 65 78 70 65 63 74 65 ontents "expecte
07a0: 64 20 61 6e 20 78 6d 6c 2d 65 6c 65 6d 65 6e 74 d an xml-element
07b0: 2c 20 67 69 76 65 6e 22 20 73 29 29 29 0a 20 20 , given" s))).
07c0: 0a 20 20 28 64 65 66 69 6e 65 20 28 6d 61 74 63 . (define (matc
07d0: 68 2d 78 6d 6c 2d 61 74 74 72 69 62 75 74 65 20 h-xml-attribute
07e0: 6b 65 79 20 6c 29 0a 20 20 20 20 28 69 66 20 28 key l). (if (
07f0: 6e 6f 74 20 28 70 61 69 72 3f 20 6c 29 29 0a 20 not (pair? l)).
0800: 20 20 20 20 20 20 20 23 66 0a 20 20 20 20 20 20 #f.
0810: 20 20 28 69 66 20 28 65 71 3f 20 28 63 61 72 20 (if (eq? (car
0820: 28 63 61 72 20 6c 29 29 20 6b 65 79 29 0a 20 20 (car l)) key).
0830: 20 20 20 20 20 20 20 20 20 20 28 63 61 72 20 6c (car l
0840: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 6d ). (m
0850: 61 74 63 68 2d 78 6d 6c 2d 61 74 74 72 69 62 75 atch-xml-attribu
0860: 74 65 20 6b 65 79 20 28 63 64 72 20 6c 29 29 29 te key (cdr l)))
0870: 29 29 0a 20 20 0a 20 20 28 64 65 66 69 6e 65 20 )). . (define
0880: 28 66 69 6c 74 65 72 2d 61 74 74 72 69 62 75 74 (filter-attribut
0890: 65 73 20 6b 65 79 73 20 6c 73 74 29 0a 20 20 20 es keys lst).
08a0: 20 28 69 66 20 28 6e 75 6c 6c 3f 20 6c 73 74 29 (if (null? lst)
08b0: 0a 20 20 20 20 20 20 20 20 27 28 29 0a 20 20 20 . '().
08c0: 20 20 20 20 20 28 69 66 20 28 6d 65 6d 62 65 72 (if (member
08d0: 20 28 63 61 61 72 20 6c 73 74 29 20 6b 65 79 73 (caar lst) keys
08e0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 66 ). (f
08f0: 69 6c 74 65 72 2d 61 74 74 72 69 62 75 74 65 73 ilter-attributes
0900: 20 6b 65 79 73 20 28 63 64 72 20 6c 73 74 29 29 keys (cdr lst))
0910: 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f . (co
0920: 6e 73 20 28 63 61 72 20 6c 73 74 29 20 28 66 69 ns (car lst) (fi
0930: 6c 74 65 72 2d 61 74 74 72 69 62 75 74 65 73 20 lter-attributes
0940: 6b 65 79 73 20 28 63 64 72 20 6c 73 74 29 29 29 keys (cdr lst)))
0950: 29 29 29 0a 20 20 0a 20 20 29 0a 0a 28 6d 6f 64 ))). . )..(mod
0960: 75 6c 65 20 69 6e 74 65 72 6e 61 6c 2d 63 6f 6d ule internal-com
0970: 70 69 6c 65 2d 63 6c 61 75 73 65 20 28 63 6f 6d pile-clause (com
0980: 70 69 6c 65 2d 63 6c 61 75 73 65 29 0a 20 20 28 pile-clause). (
0990: 69 6d 70 6f 72 74 20 73 78 6d 6c 2d 61 63 63 65 import sxml-acce
09a0: 73 73 6f 72 73 29 0a 20 20 0a 20 20 28 64 65 66 ssors). . (def
09b0: 69 6e 65 2d 73 79 6e 74 61 78 20 63 6f 6d 70 69 ine-syntax compi
09c0: 6c 65 2d 63 6c 61 75 73 65 0a 20 20 20 20 28 6c le-clause. (l
09d0: 61 6d 62 64 61 20 28 73 74 78 29 0a 20 20 20 20 ambda (stx).
09e0: 20 20 28 6c 65 74 72 65 63 0a 20 20 20 20 20 20 (letrec.
09f0: 20 20 20 20 28 5b 73 78 6d 6c 2d 6d 61 74 63 68 ([sxml-match
0a00: 2d 73 79 6e 74 61 78 2d 65 72 72 6f 72 0a 20 20 -syntax-error.
0a10: 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 (lambd
0a20: 61 20 28 6d 73 67 20 65 78 70 20 73 75 62 29 0a a (msg exp sub).
0a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 (s
0a40: 79 6e 74 61 78 2d 65 72 72 6f 72 20 73 75 62 20 yntax-error sub
0a50: 6d 73 67 29 29 5d 0a 20 20 20 20 20 20 20 20 20 msg))].
0a60: 20 20 5b 65 6c 6c 69 70 73 69 73 3f 0a 20 20 20 [ellipsis?.
0a70: 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 (lambda
0a80: 20 28 73 74 78 29 0a 20 20 20 20 20 20 20 20 20 (stx).
0a90: 20 20 20 20 20 28 61 6e 64 20 28 69 64 65 6e 74 (and (ident
0aa0: 69 66 69 65 72 3f 20 73 74 78 29 20 28 65 71 3f ifier? stx) (eq?
0ab0: 20 27 2e 2e 2e 20 28 73 79 6e 74 61 78 2d 6f 62 '... (syntax-ob
0ac0: 6a 65 63 74 2d 3e 64 61 74 75 6d 20 73 74 78 29 ject->datum stx)
0ad0: 29 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 )))].
0ae0: 5b 6c 69 74 65 72 61 6c 3f 0a 20 20 20 20 20 20 [literal?.
0af0: 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 73 (lambda (s
0b00: 74 78 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 tx).
0b10: 20 20 28 6c 65 74 20 28 5b 78 20 28 73 79 6e 74 (let ([x (synt
0b20: 61 78 2d 6f 62 6a 65 63 74 2d 3e 64 61 74 75 6d ax-object->datum
0b30: 20 73 74 78 29 5d 29 0a 20 20 20 20 20 20 20 20 stx)]).
0b40: 20 20 20 20 20 20 20 20 28 6f 72 20 28 73 74 72 (or (str
0b50: 69 6e 67 3f 20 78 29 0a 20 20 20 20 20 20 20 20 ing? x).
0b60: 20 20 20 20 20 20 20 20 20 20 20 20 28 63 68 61 (cha
0b70: 72 3f 20 78 29 0a 20 20 20 20 20 20 20 20 20 20 r? x).
0b80: 20 20 20 20 20 20 20 20 20 20 28 6e 75 6d 62 65 (numbe
0b90: 72 3f 20 78 29 0a 20 20 20 20 20 20 20 20 20 20 r? x).
0ba0: 20 20 20 20 20 20 20 20 20 20 28 62 6f 6f 6c 65 (boole
0bb0: 61 6e 3f 20 78 29 29 29 29 5d 0a 20 20 20 20 20 an? x))))].
0bc0: 20 20 20 20 20 20 5b 6b 65 79 77 6f 72 64 3f 0a [keyword?.
0bd0: 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d (lam
0be0: 62 64 61 20 28 73 74 78 29 0a 20 20 20 20 20 20 bda (stx).
0bf0: 20 20 20 20 20 20 20 20 28 61 6e 64 20 28 69 64 (and (id
0c00: 65 6e 74 69 66 69 65 72 3f 20 73 74 78 29 0a 20 entifier? stx).
0c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0c20: 20 20 28 6c 65 74 20 28 5b 73 74 72 20 28 73 79 (let ([str (sy
0c30: 6d 62 6f 6c 2d 3e 73 74 72 69 6e 67 20 28 73 79 mbol->string (sy
0c40: 6e 74 61 78 2d 6f 62 6a 65 63 74 2d 3e 64 61 74 ntax-object->dat
0c50: 75 6d 20 73 74 78 29 29 5d 29 0a 20 20 20 20 20 um stx))]).
0c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0c70: 28 63 68 61 72 3d 3f 20 23 5c 3a 20 28 73 74 72 (char=? #\: (str
0c80: 69 6e 67 2d 72 65 66 20 73 74 72 20 28 2d 20 28 ing-ref str (- (
0c90: 73 74 72 69 6e 67 2d 6c 65 6e 67 74 68 20 73 74 string-length st
0ca0: 72 29 20 31 29 29 29 29 29 29 5d 0a 20 20 20 20 r) 1))))))].
0cb0: 20 20 20 20 20 20 20 5b 65 78 74 72 61 63 74 2d [extract-
0cc0: 63 61 74 61 2d 66 75 6e 0a 20 20 20 20 20 20 20 cata-fun.
0cd0: 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 63 66 (lambda (cf
0ce0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
0cf0: 28 73 79 6e 74 61 78 2d 63 61 73 65 20 63 66 20 (syntax-case cf
0d00: 28 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ().
0d10: 20 20 20 5b 23 66 20 23 66 5d 0a 20 20 20 20 20 [#f #f].
0d20: 20 20 20 20 20 20 20 20 20 20 20 5b 6f 74 68 65 [othe
0d30: 72 20 63 66 5d 29 29 5d 0a 20 20 20 20 20 20 20 r cf]))].
0d40: 20 20 20 20 5b 61 64 64 2d 70 61 74 2d 76 61 72 [add-pat-var
0d50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 . (la
0d60: 6d 62 64 61 20 28 70 76 61 72 20 70 76 61 72 2d mbda (pvar pvar-
0d70: 6c 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 lst).
0d80: 20 20 20 28 64 65 66 69 6e 65 20 28 63 68 65 63 (define (chec
0d90: 6b 2d 70 76 61 72 20 6c 73 74 29 0a 20 20 20 20 k-pvar lst).
0da0: 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 (if
0db0: 28 6e 75 6c 6c 3f 20 6c 73 74 29 0a 20 20 20 20 (null? lst).
0dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0dd0: 28 76 6f 69 64 29 0a 20 20 20 20 20 20 20 20 20 (void).
0de0: 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 (if (
0df0: 62 6f 75 6e 64 2d 69 64 65 6e 74 69 66 69 65 72 bound-identifier
0e00: 3d 3f 20 28 63 61 72 20 6c 73 74 29 20 70 76 61 =? (car lst) pva
0e10: 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 r).
0e20: 20 20 20 20 20 20 20 20 20 20 20 28 73 78 6d 6c (sxml
0e30: 2d 6d 61 74 63 68 2d 73 79 6e 74 61 78 2d 65 72 -match-syntax-er
0e40: 72 6f 72 20 22 64 75 70 6c 69 63 61 74 65 20 70 ror "duplicate p
0e50: 61 74 74 65 72 6e 20 76 61 72 69 61 62 6c 65 20 attern variable
0e60: 6e 6f 74 20 61 6c 6c 6f 77 65 64 22 0a 20 20 20 not allowed".
0e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 st
0ea0: 78 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 x.
0eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0ed0: 20 20 20 70 76 61 72 29 0a 20 20 20 20 20 20 20 pvar).
0ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0ef0: 20 28 63 68 65 63 6b 2d 70 76 61 72 20 28 63 64 (check-pvar (cd
0f00: 72 20 6c 73 74 29 29 29 29 29 0a 20 20 20 20 20 r lst))))).
0f10: 20 20 20 20 20 20 20 20 20 28 63 68 65 63 6b 2d (check-
0f20: 70 76 61 72 20 70 76 61 72 2d 6c 73 74 29 0a 20 pvar pvar-lst).
0f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f (co
0f40: 6e 73 20 70 76 61 72 20 70 76 61 72 2d 6c 73 74 ns pvar pvar-lst
0f50: 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 5b ))]. [
0f60: 61 64 64 2d 63 61 74 61 2d 64 65 66 0a 20 20 20 add-cata-def.
0f70: 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 (lambda
0f80: 20 28 64 65 70 74 68 20 63 76 61 72 73 20 63 66 (depth cvars cf
0f90: 75 6e 20 63 74 65 6d 70 20 63 64 65 66 73 29 0a un ctemp cdefs).
0fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 (c
0fb0: 6f 6e 73 20 28 6c 69 73 74 20 64 65 70 74 68 20 ons (list depth
0fc0: 63 76 61 72 73 20 63 66 75 6e 20 63 74 65 6d 70 cvars cfun ctemp
0fd0: 29 20 63 64 65 66 73 29 29 5d 0a 20 20 20 20 20 ) cdefs))].
0fe0: 20 20 20 20 20 20 5b 70 72 6f 63 65 73 73 2d 63 [process-c
0ff0: 61 74 61 2d 65 78 70 0a 20 20 20 20 20 20 20 20 ata-exp.
1000: 20 20 20 20 28 6c 61 6d 62 64 61 20 28 64 65 70 (lambda (dep
1010: 74 68 20 63 66 75 6e 20 63 74 65 6d 70 29 0a 20 th cfun ctemp).
1020: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 (if
1030: 20 28 3d 20 64 65 70 74 68 20 30 29 0a 20 20 20 (= depth 0).
1040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
1050: 77 69 74 68 2d 73 79 6e 74 61 78 20 28 5b 63 66 with-syntax ([cf
1060: 20 63 66 75 6e 5d 0a 20 20 20 20 20 20 20 20 20 cfun].
1070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1080: 20 20 20 20 20 20 20 5b 63 74 20 63 74 65 6d 70 [ct ctemp
1090: 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]).
10a0: 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 28 (syntax (
10b0: 63 66 20 63 74 29 29 29 0a 20 20 20 20 20 20 20 cf ct))).
10c0: 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 (let
10d0: 28 5b 6e 65 77 2d 63 74 65 6d 70 20 28 63 61 72 ([new-ctemp (car
10e0: 20 28 67 65 6e 65 72 61 74 65 2d 74 65 6d 70 6f (generate-tempo
10f0: 72 61 72 69 65 73 20 28 6c 69 73 74 20 63 74 65 raries (list cte
1100: 6d 70 29 29 29 5d 29 0a 20 20 20 20 20 20 20 20 mp)))]).
1110: 20 20 20 20 20 20 20 20 20 20 20 20 28 77 69 74 (wit
1120: 68 2d 73 79 6e 74 61 78 20 28 5b 63 74 20 63 74 h-syntax ([ct ct
1130: 65 6d 70 5d 0a 20 20 20 20 20 20 20 20 20 20 20 emp].
1140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1150: 20 20 20 20 20 20 20 5b 6e 63 74 20 6e 65 77 2d [nct new-
1160: 63 74 65 6d 70 5d 0a 20 20 20 20 20 20 20 20 20 ctemp].
1170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1180: 20 20 20 20 20 20 20 20 20 5b 62 6f 64 79 20 28 [body (
1190: 70 72 6f 63 65 73 73 2d 63 61 74 61 2d 65 78 70 process-cata-exp
11a0: 20 28 2d 20 64 65 70 74 68 20 31 29 20 63 66 75 (- depth 1) cfu
11b0: 6e 20 6e 65 77 2d 63 74 65 6d 70 29 5d 29 0a 20 n new-ctemp)]).
11c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11d0: 20 20 20 20 20 28 73 79 6e 74 61 78 20 28 6d 61 (syntax (ma
11e0: 70 20 28 6c 61 6d 62 64 61 20 28 6e 63 74 29 20 p (lambda (nct)
11f0: 62 6f 64 79 29 20 63 74 29 29 29 29 29 29 5d 0a body) ct))))))].
1200: 20 20 20 20 20 20 20 20 20 20 20 5b 70 72 6f 63 [proc
1210: 65 73 73 2d 63 61 74 61 2d 64 65 66 73 0a 20 20 ess-cata-defs.
1220: 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 (lambd
1230: 61 20 28 63 61 74 61 2d 64 65 66 73 20 62 6f 64 a (cata-defs bod
1240: 79 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 y).
1250: 20 28 69 66 20 28 6e 75 6c 6c 3f 20 63 61 74 61 (if (null? cata
1260: 2d 64 65 66 73 29 0a 20 20 20 20 20 20 20 20 20 -defs).
1270: 20 20 20 20 20 20 20 20 20 62 6f 64 79 0a 20 20 body.
1280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1290: 28 77 69 74 68 2d 73 79 6e 74 61 78 20 28 5b 28 (with-syntax ([(
12a0: 63 61 74 61 2d 62 69 6e 64 69 6e 67 20 2e 2e 2e cata-binding ...
12b0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
12c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12d0: 20 20 20 28 6d 61 70 20 28 6c 61 6d 62 64 61 20 (map (lambda
12e0: 28 64 65 66 29 0a 20 20 20 20 20 20 20 20 20 20 (def).
12f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 (w
1310: 69 74 68 2d 73 79 6e 74 61 78 20 28 5b 62 76 61 ith-syntax ([bva
1320: 72 20 28 63 61 64 72 20 64 65 66 29 5d 0a 20 20 r (cadr def)].
1330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1360: 20 20 20 20 5b 62 76 61 6c 20 28 70 72 6f 63 65 [bval (proce
1370: 73 73 2d 63 61 74 61 2d 65 78 70 20 28 63 61 72 ss-cata-exp (car
1380: 20 64 65 66 29 0a 20 20 20 20 20 20 20 20 20 20 def).
1390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13d0: 20 20 20 20 28 63 61 64 64 72 20 64 65 66 29 0a (caddr def).
13e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 (c
1430: 61 64 64 64 72 20 64 65 66 29 29 5d 29 0a 20 20 adddr def))]).
1440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1460: 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 (syntax
1470: 28 62 76 61 72 20 62 76 61 6c 29 29 29 29 0a 20 (bvar bval)))).
1480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14a0: 20 20 20 20 20 63 61 74 61 2d 64 65 66 73 29 5d cata-defs)]
14b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
14c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
14d0: 20 5b 62 6f 64 79 2d 73 74 78 20 62 6f 64 79 5d [body-stx body]
14e0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
14f0: 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 28 6c (syntax (l
1500: 65 74 2d 76 61 6c 75 65 73 20 28 63 61 74 61 2d et-values (cata-
1510: 62 69 6e 64 69 6e 67 20 2e 2e 2e 29 0a 20 20 20 binding ...).
1520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1530: 20 20 20 20 20 20 20 20 20 20 20 62 6f 64 79 2d body-
1540: 73 74 78 29 29 29 29 29 5d 0a 20 20 20 20 20 20 stx)))))].
1550: 20 20 20 20 20 5b 63 61 74 61 2d 64 65 66 73 2d [cata-defs-
1560: 3e 70 76 61 72 2d 6c 73 74 0a 20 20 20 20 20 20 >pvar-lst.
1570: 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 6c (lambda (l
1580: 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 st).
1590: 20 20 28 69 66 20 28 6e 75 6c 6c 3f 20 6c 73 74 (if (null? lst
15a0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
15b0: 20 20 20 20 27 28 29 0a 20 20 20 20 20 20 20 20 '().
15c0: 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 69 (let i
15d0: 74 65 72 20 28 5b 69 74 65 6d 73 20 28 63 61 64 ter ([items (cad
15e0: 72 20 28 63 61 72 20 6c 73 74 29 29 5d 29 0a 20 r (car lst))]).
15f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1600: 20 20 20 28 73 79 6e 74 61 78 2d 63 61 73 65 20 (syntax-case
1610: 69 74 65 6d 73 20 28 29 0a 20 20 20 20 20 20 20 items ().
1620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [
1630: 28 29 20 28 63 61 74 61 2d 64 65 66 73 2d 3e 70 () (cata-defs->p
1640: 76 61 72 2d 6c 73 74 20 28 63 64 72 20 6c 73 74 var-lst (cdr lst
1650: 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))].
1660: 20 20 20 20 20 20 20 20 20 20 5b 28 66 73 74 20 [(fst
1670: 2e 20 72 73 74 29 20 28 63 6f 6e 73 20 28 73 79 . rst) (cons (sy
1680: 6e 74 61 78 20 66 73 74 29 20 28 69 74 65 72 20 ntax fst) (iter
1690: 28 73 79 6e 74 61 78 20 72 73 74 29 29 29 5d 29 (syntax rst)))])
16a0: 29 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 )))].
16b0: 5b 70 72 6f 63 65 73 73 2d 6f 75 74 70 75 74 2d [process-output-
16c0: 61 63 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 action.
16d0: 20 20 20 28 6c 61 6d 62 64 61 20 28 61 63 74 69 (lambda (acti
16e0: 6f 6e 20 64 6f 74 74 65 64 2d 76 61 72 73 29 0a on dotted-vars).
16f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64 (d
1700: 65 66 69 6e 65 20 28 66 69 6e 69 74 65 2d 6c 73 efine (finite-ls
1710: 74 3f 20 6c 73 74 29 0a 20 20 20 20 20 20 20 20 t? lst).
1720: 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 2d (syntax-
1730: 63 61 73 65 20 6c 73 74 20 28 29 0a 20 20 20 20 case lst ().
1740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 (i
1750: 74 65 6d 0a 20 20 20 20 20 20 20 20 20 20 20 20 tem.
1760: 20 20 20 20 20 20 20 28 69 64 65 6e 74 69 66 69 (identifi
1770: 65 72 3f 20 28 73 79 6e 74 61 78 20 69 74 65 6d er? (syntax item
1780: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )).
1790: 20 20 20 20 20 20 23 66 29 0a 20 20 20 20 20 20 #f).
17a0: 20 20 20 20 20 20 20 20 20 20 20 20 28 28 29 0a (().
17b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17c0: 20 20 20 23 74 29 0a 20 20 20 20 20 20 20 20 20 #t).
17d0: 20 20 20 20 20 20 20 20 20 28 28 66 73 74 20 64 ((fst d
17e0: 6f 74 73 20 2e 20 72 73 74 29 0a 20 20 20 20 20 ots . rst).
17f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 (e
1800: 6c 6c 69 70 73 69 73 3f 20 28 73 79 6e 74 61 78 llipsis? (syntax
1810: 20 64 6f 74 73 29 29 0a 20 20 20 20 20 20 20 20 dots)).
1820: 20 20 20 20 20 20 20 20 20 20 20 23 66 29 0a 20 #f).
1830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1840: 20 28 28 66 73 74 20 2e 20 72 73 74 29 0a 20 20 ((fst . rst).
1850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1860: 20 28 66 69 6e 69 74 65 2d 6c 73 74 3f 20 28 73 (finite-lst? (s
1870: 79 6e 74 61 78 20 72 73 74 29 29 29 29 29 0a 20 yntax rst))))).
1880: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64 65 (de
1890: 66 69 6e 65 20 28 65 78 70 61 6e 64 2d 6c 73 74 fine (expand-lst
18a0: 20 6c 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 lst).
18b0: 20 20 20 20 20 20 28 73 79 6e 74 61 78 2d 63 61 (syntax-ca
18c0: 73 65 20 6c 73 74 20 28 29 0a 20 20 20 20 20 20 se lst ().
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 28 29 20 [()
18e0: 28 73 79 6e 74 61 78 20 27 28 29 29 5d 0a 20 20 (syntax '())].
18f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1900: 5b 69 74 65 6d 0a 20 20 20 20 20 20 20 20 20 20 [item.
1910: 20 20 20 20 20 20 20 20 20 28 69 64 65 6e 74 69 (identi
1920: 66 69 65 72 3f 20 28 73 79 6e 74 61 78 20 69 74 fier? (syntax it
1930: 65 6d 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 em)).
1940: 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 (syntax
1950: 69 74 65 6d 29 5d 0a 20 20 20 20 20 20 20 20 20 item)].
1960: 20 20 20 20 20 20 20 20 20 5b 28 66 73 74 20 64 [(fst d
1970: 6f 74 73 20 2e 20 72 73 74 29 0a 20 20 20 20 20 ots . rst).
1980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 (e
1990: 6c 6c 69 70 73 69 73 3f 20 28 73 79 6e 74 61 78 llipsis? (syntax
19a0: 20 64 6f 74 73 29 29 0a 20 20 20 20 20 20 20 20 dots)).
19b0: 20 20 20 20 20 20 20 20 20 20 20 28 77 69 74 68 (with
19c0: 2d 73 79 6e 74 61 78 20 28 5b 65 78 70 2d 6c 66 -syntax ([exp-lf
19d0: 74 20 28 65 78 70 61 6e 64 2d 64 6f 74 74 65 64 t (expand-dotted
19e0: 2d 69 74 65 6d 0a 20 20 20 20 20 20 20 20 20 20 -item.
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a10: 20 28 70 72 6f 63 65 73 73 2d 6f 75 74 70 75 74 (process-output
1a20: 2d 61 63 74 69 6f 6e 20 28 73 79 6e 74 61 78 20 -action (syntax
1a30: 66 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 fst).
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1a70: 20 20 20 20 20 20 20 64 6f 74 74 65 64 2d 76 61 dotted-va
1a80: 72 73 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 rs))].
1a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1aa0: 20 20 20 20 20 20 20 5b 65 78 70 2d 72 67 74 20 [exp-rgt
1ab0: 28 65 78 70 61 6e 64 2d 6c 73 74 20 28 73 79 6e (expand-lst (syn
1ac0: 74 61 78 20 72 73 74 29 29 5d 29 0a 20 20 20 20 tax rst))]).
1ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ae0: 20 28 73 79 6e 74 61 78 20 28 61 70 70 65 6e 64 (syntax (append
1af0: 20 65 78 70 2d 6c 66 74 20 65 78 70 2d 72 67 74 exp-lft exp-rgt
1b00: 29 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 )))].
1b10: 20 20 20 20 20 20 20 5b 28 66 73 74 20 2e 20 72 [(fst . r
1b20: 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 st).
1b30: 20 20 20 20 20 20 20 28 77 69 74 68 2d 73 79 6e (with-syn
1b40: 74 61 78 20 28 5b 65 78 70 2d 6c 66 74 20 28 70 tax ([exp-lft (p
1b50: 72 6f 63 65 73 73 2d 6f 75 74 70 75 74 2d 61 63 rocess-output-ac
1b60: 74 69 6f 6e 20 28 73 79 6e 74 61 78 20 66 73 74 tion (syntax fst
1b70: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
1b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1bb0: 20 20 20 64 6f 74 74 65 64 2d 76 61 72 73 29 5d dotted-vars)]
1bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1be0: 20 20 5b 65 78 70 2d 72 67 74 20 28 65 78 70 61 [exp-rgt (expa
1bf0: 6e 64 2d 6c 73 74 20 28 73 79 6e 74 61 78 20 72 nd-lst (syntax r
1c00: 73 74 29 29 5d 29 0a 20 20 20 20 20 20 20 20 20 st))]).
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 28 73 79 6e (syn
1c20: 74 61 78 20 28 63 6f 6e 73 20 65 78 70 2d 6c 66 tax (cons exp-lf
1c30: 74 20 65 78 70 2d 72 67 74 29 29 29 5d 29 29 0a t exp-rgt)))])).
1c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64 (d
1c50: 65 66 69 6e 65 20 28 6d 65 6d 62 65 72 2d 76 61 efine (member-va
1c60: 72 3f 20 76 61 72 20 6c 73 74 29 0a 20 20 20 20 r? var lst).
1c70: 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 (let
1c80: 20 69 74 65 72 20 28 5b 6c 73 74 20 6c 73 74 5d iter ([lst lst]
1c90: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
1ca0: 20 20 20 20 28 69 66 20 28 6e 75 6c 6c 3f 20 6c (if (null? l
1cb0: 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 st).
1cc0: 20 20 20 20 20 20 20 20 20 20 23 66 0a 20 20 20 #f.
1cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ce0: 20 20 20 28 69 66 20 28 6f 72 20 28 62 6f 75 6e (if (or (boun
1cf0: 64 2d 69 64 65 6e 74 69 66 69 65 72 3d 3f 20 76 d-identifier=? v
1d00: 61 72 20 28 63 61 72 20 6c 73 74 29 29 0a 20 20 ar (car lst)).
1d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d20: 20 20 20 20 20 20 20 20 20 20 20 20 28 66 72 65 (fre
1d30: 65 2d 69 64 65 6e 74 69 66 69 65 72 3d 3f 20 76 e-identifier=? v
1d40: 61 72 20 28 63 61 72 20 6c 73 74 29 29 29 0a 20 ar (car lst))).
1d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d60: 20 20 20 20 20 20 20 20 20 23 74 0a 20 20 20 20 #t.
1d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d80: 20 20 20 20 20 20 28 69 74 65 72 20 28 63 64 72 (iter (cdr
1d90: 20 6c 73 74 29 29 29 29 29 29 0a 20 20 20 20 20 lst)))))).
1da0: 20 20 20 20 20 20 20 20 20 28 64 65 66 69 6e 65 (define
1db0: 20 28 64 6f 74 74 65 64 2d 76 61 72 3f 20 76 61 (dotted-var? va
1dc0: 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 r).
1dd0: 20 20 20 28 6d 65 6d 62 65 72 2d 76 61 72 3f 20 (member-var?
1de0: 76 61 72 20 64 6f 74 74 65 64 2d 76 61 72 73 29 var dotted-vars)
1df0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
1e00: 28 64 65 66 69 6e 65 20 28 6d 65 72 67 65 2d 70 (define (merge-p
1e10: 76 61 72 73 20 6c 73 74 31 20 6c 73 74 32 29 0a vars lst1 lst2).
1e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e30: 28 69 66 20 28 6e 75 6c 6c 3f 20 6c 73 74 31 29 (if (null? lst1)
1e40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1e50: 20 20 20 20 20 6c 73 74 32 0a 20 20 20 20 20 20 lst2.
1e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 (i
1e70: 66 20 28 6d 65 6d 62 65 72 2d 76 61 72 3f 20 28 f (member-var? (
1e80: 63 61 72 20 6c 73 74 31 29 20 6c 73 74 32 29 0a car lst1) lst2).
1e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ea0: 20 20 20 20 20 20 20 20 28 6d 65 72 67 65 2d 70 (merge-p
1eb0: 76 61 72 73 20 28 63 64 72 20 6c 73 74 31 29 20 vars (cdr lst1)
1ec0: 6c 73 74 32 29 0a 20 20 20 20 20 20 20 20 20 20 lst2).
1ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 (c
1ee0: 6f 6e 73 20 28 63 61 72 20 6c 73 74 31 29 20 28 ons (car lst1) (
1ef0: 6d 65 72 67 65 2d 70 76 61 72 73 20 28 63 64 72 merge-pvars (cdr
1f00: 20 6c 73 74 31 29 20 6c 73 74 32 29 29 29 29 29 lst1) lst2)))))
1f10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 . (
1f20: 64 65 66 69 6e 65 20 28 73 65 6c 65 63 74 2d 64 define (select-d
1f30: 6f 74 74 65 64 2d 76 61 72 73 20 78 29 0a 20 20 otted-vars x).
1f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64 (d
1f50: 65 66 69 6e 65 20 28 77 61 6c 6b 2d 71 75 61 73 efine (walk-quas
1f60: 69 2d 62 6f 64 79 20 79 29 0a 20 20 20 20 20 20 i-body y).
1f70: 20 20 20 20 20 20 20 20 20 20 20 20 28 73 79 6e (syn
1f80: 74 61 78 2d 63 61 73 65 20 79 20 28 75 6e 71 75 tax-case y (unqu
1f90: 6f 74 65 20 75 6e 71 75 6f 74 65 2d 73 70 6c 69 ote unquote-spli
1fa0: 63 69 6e 67 29 0a 20 20 20 20 20 20 20 20 20 20 cing).
1fb0: 20 20 20 20 20 20 20 20 20 20 5b 28 28 75 6e 71 [((unq
1fc0: 75 6f 74 65 20 61 29 20 2e 20 72 73 74 29 0a 20 uote a) . rst).
1fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1fe0: 20 20 20 20 28 6d 65 72 67 65 2d 70 76 61 72 73 (merge-pvars
1ff0: 20 28 73 65 6c 65 63 74 2d 64 6f 74 74 65 64 2d (select-dotted-
2000: 76 61 72 73 20 28 73 79 6e 74 61 78 20 61 29 29 vars (syntax a))
2010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2030: 20 20 20 28 77 61 6c 6b 2d 71 75 61 73 69 2d 62 (walk-quasi-b
2040: 6f 64 79 20 28 73 79 6e 74 61 78 20 72 73 74 29 ody (syntax rst)
2050: 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))].
2060: 20 20 20 20 20 20 20 20 5b 28 28 75 6e 71 75 6f [((unquo
2070: 74 65 2d 73 70 6c 69 63 69 6e 67 20 61 29 20 2e te-splicing a) .
2080: 20 72 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 rst).
2090: 20 20 20 20 20 20 20 20 20 20 20 28 6d 65 72 67 (merg
20a0: 65 2d 70 76 61 72 73 20 28 73 65 6c 65 63 74 2d e-pvars (select-
20b0: 64 6f 74 74 65 64 2d 76 61 72 73 20 28 73 79 6e dotted-vars (syn
20c0: 74 61 78 20 61 29 29 0a 20 20 20 20 20 20 20 20 tax a)).
20d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20e0: 20 20 20 20 20 20 20 20 20 20 28 77 61 6c 6b 2d (walk-
20f0: 71 75 61 73 69 2d 62 6f 64 79 20 28 73 79 6e 74 quasi-body (synt
2100: 61 78 20 72 73 74 29 29 29 5d 0a 20 20 20 20 20 ax rst)))].
2110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [
2120: 28 66 73 74 20 2e 20 72 73 74 29 0a 20 20 20 20 (fst . rst).
2130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2140: 20 28 6d 65 72 67 65 2d 70 76 61 72 73 20 28 77 (merge-pvars (w
2150: 61 6c 6b 2d 71 75 61 73 69 2d 62 6f 64 79 20 28 alk-quasi-body (
2160: 73 79 6e 74 61 78 20 66 73 74 29 29 0a 20 20 20 syntax fst)).
2170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
2190: 77 61 6c 6b 2d 71 75 61 73 69 2d 62 6f 64 79 20 walk-quasi-body
21a0: 28 73 79 6e 74 61 78 20 72 73 74 29 29 29 5d 0a (syntax rst)))].
21b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21c0: 20 20 20 20 5b 6f 74 68 65 72 0a 20 20 20 20 20 [other.
21d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21e0: 27 28 29 5d 29 29 0a 20 20 20 20 20 20 20 20 20 '()])).
21f0: 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 2d 63 (syntax-c
2200: 61 73 65 20 78 20 28 71 75 6f 74 65 20 71 75 61 ase x (quote qua
2210: 73 69 71 75 6f 74 65 29 0a 20 20 20 20 20 20 20 siquote).
2220: 20 20 20 20 20 20 20 20 20 20 20 5b 28 71 75 6f [(quo
2230: 74 65 20 2e 20 72 73 74 29 20 27 28 29 5d 0a 20 te . rst) '()].
2240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2250: 20 5b 28 71 75 61 73 69 71 75 6f 74 65 20 2e 20 [(quasiquote .
2260: 72 73 74 29 20 28 77 61 6c 6b 2d 71 75 61 73 69 rst) (walk-quasi
2270: 2d 62 6f 64 79 20 28 73 79 6e 74 61 78 20 72 73 -body (syntax rs
2280: 74 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 t))].
2290: 20 20 20 20 20 20 20 5b 28 66 73 74 20 2e 20 72 [(fst . r
22a0: 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 st).
22b0: 20 20 20 20 20 20 20 28 6d 65 72 67 65 2d 70 76 (merge-pv
22c0: 61 72 73 20 28 73 65 6c 65 63 74 2d 64 6f 74 74 ars (select-dott
22d0: 65 64 2d 76 61 72 73 20 28 73 79 6e 74 61 78 20 ed-vars (syntax
22e0: 66 73 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 fst)).
22f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2300: 20 20 20 20 20 20 28 73 65 6c 65 63 74 2d 64 6f (select-do
2310: 74 74 65 64 2d 76 61 72 73 20 28 73 79 6e 74 61 tted-vars (synta
2320: 78 20 72 73 74 29 29 29 5d 0a 20 20 20 20 20 20 x rst)))].
2330: 20 20 20 20 20 20 20 20 20 20 20 20 5b 69 74 65 [ite
2340: 6d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 m.
2350: 20 20 20 20 20 28 61 6e 64 20 28 69 64 65 6e 74 (and (ident
2360: 69 66 69 65 72 3f 20 28 73 79 6e 74 61 78 20 69 ifier? (syntax i
2370: 74 65 6d 29 29 0a 20 20 20 20 20 20 20 20 20 20 tem)).
2380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64 (d
2390: 6f 74 74 65 64 2d 76 61 72 3f 20 28 73 79 6e 74 otted-var? (synt
23a0: 61 78 20 69 74 65 6d 29 29 29 0a 20 20 20 20 20 ax item))).
23b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c (l
23c0: 69 73 74 20 28 73 79 6e 74 61 78 20 69 74 65 6d ist (syntax item
23d0: 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))].
23e0: 20 20 20 20 20 20 5b 69 74 65 6d 20 27 28 29 5d [item '()]
23f0: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )).
2400: 20 28 64 65 66 69 6e 65 20 28 65 78 70 61 6e 64 (define (expand
2410: 2d 64 6f 74 74 65 64 2d 69 74 65 6d 20 69 74 65 -dotted-item ite
2420: 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 m).
2430: 20 20 20 28 6c 65 74 20 28 5b 64 76 61 72 73 20 (let ([dvars
2440: 28 73 65 6c 65 63 74 2d 64 6f 74 74 65 64 2d 76 (select-dotted-v
2450: 61 72 73 20 69 74 65 6d 29 5d 29 0a 20 20 20 20 ars item)]).
2460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 (s
2470: 79 6e 74 61 78 2d 63 61 73 65 20 69 74 65 6d 20 yntax-case item
2480: 28 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ().
2490: 20 20 20 20 20 20 20 5b 78 0a 20 20 20 20 20 20 [x.
24a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
24b0: 69 64 65 6e 74 69 66 69 65 72 3f 20 28 73 79 6e identifier? (syn
24c0: 74 61 78 20 78 29 29 0a 20 20 20 20 20 20 20 20 tax x)).
24d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 79 (sy
24e0: 6e 74 61 78 20 78 29 5d 0a 20 20 20 20 20 20 20 ntax x)].
24f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 78 20 [x
2500: 28 77 69 74 68 2d 73 79 6e 74 61 78 20 28 5b 28 (with-syntax ([(
2510: 64 76 20 2e 2e 2e 29 20 64 76 61 72 73 5d 29 0a dv ...) dvars]).
2520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2530: 20 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 (syntax
2540: 20 28 6d 61 70 20 28 6c 61 6d 62 64 61 20 28 64 (map (lambda (d
2550: 76 20 2e 2e 2e 29 20 78 29 20 64 76 20 2e 2e 2e v ...) x) dv ...
2560: 29 29 29 5d 29 29 29 0a 20 20 20 20 20 20 20 20 )))]))).
2570: 20 20 20 20 20 20 28 64 65 66 69 6e 65 20 28 65 (define (e
2580: 78 70 61 6e 64 2d 71 75 61 73 69 71 75 6f 74 65 xpand-quasiquote
2590: 2d 62 6f 64 79 20 78 29 0a 20 20 20 20 20 20 20 -body x).
25a0: 20 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 (syntax
25b0: 2d 63 61 73 65 20 78 20 28 75 6e 71 75 6f 74 65 -case x (unquote
25c0: 20 75 6e 71 75 6f 74 65 2d 73 70 6c 69 63 69 6e unquote-splicin
25d0: 67 20 71 75 61 73 69 71 75 6f 74 65 29 0a 20 20 g quasiquote).
25e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
25f0: 5b 28 71 75 61 73 69 71 75 6f 74 65 20 2e 20 72 [(quasiquote . r
2600: 73 74 29 20 28 70 72 6f 63 65 73 73 2d 71 75 61 st) (process-qua
2610: 73 69 71 75 6f 74 65 20 78 29 5d 0a 20 20 20 20 siquote x)].
2620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 28 [(
2630: 75 6e 71 75 6f 74 65 20 69 74 65 6d 29 0a 20 20 unquote item).
2640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2650: 20 28 77 69 74 68 2d 73 79 6e 74 61 78 20 28 5b (with-syntax ([
2660: 65 78 70 61 6e 64 65 64 2d 69 74 65 6d 20 28 70 expanded-item (p
2670: 72 6f 63 65 73 73 2d 6f 75 74 70 75 74 2d 61 63 rocess-output-ac
2680: 74 69 6f 6e 20 28 73 79 6e 74 61 78 20 69 74 65 tion (syntax ite
2690: 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 m).
26a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26d0: 20 20 20 20 20 20 20 20 20 20 64 6f 74 74 65 64 dotted
26e0: 2d 76 61 72 73 29 5d 29 0a 20 20 20 20 20 20 20 -vars)]).
26f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 (s
2700: 79 6e 74 61 78 20 28 75 6e 71 75 6f 74 65 20 65 yntax (unquote e
2710: 78 70 61 6e 64 65 64 2d 69 74 65 6d 29 29 29 5d xpanded-item)))]
2720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2730: 20 20 20 5b 28 75 6e 71 75 6f 74 65 2d 73 70 6c [(unquote-spl
2740: 69 63 69 6e 67 20 69 74 65 6d 29 0a 20 20 20 20 icing item).
2750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
2760: 77 69 74 68 2d 73 79 6e 74 61 78 20 28 5b 65 78 with-syntax ([ex
2770: 70 61 6e 64 65 64 2d 69 74 65 6d 20 28 70 72 6f panded-item (pro
2780: 63 65 73 73 2d 6f 75 74 70 75 74 2d 61 63 74 69 cess-output-acti
2790: 6f 6e 20 28 73 79 6e 74 61 78 20 69 74 65 6d 29 on (syntax item)
27a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
27b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27e0: 20 20 20 20 20 20 20 20 64 6f 74 74 65 64 2d 76 dotted-v
27f0: 61 72 73 29 5d 29 0a 20 20 20 20 20 20 20 20 20 ars)]).
2800: 20 20 20 20 20 20 20 20 20 20 20 20 28 73 79 6e (syn
2810: 74 61 78 20 28 75 6e 71 75 6f 74 65 2d 73 70 6c tax (unquote-spl
2820: 69 63 69 6e 67 20 65 78 70 61 6e 64 65 64 2d 69 icing expanded-i
2830: 74 65 6d 29 29 29 5d 0a 20 20 20 20 20 20 20 20 tem)))].
2840: 20 20 20 20 20 20 20 20 20 20 5b 28 28 75 6e 71 [((unq
2850: 75 6f 74 65 20 69 74 65 6d 29 20 64 6f 74 73 20 uote item) dots
2860: 2e 20 72 73 74 29 0a 20 20 20 20 20 20 20 20 20 . rst).
2870: 20 20 20 20 20 20 20 20 20 20 28 65 6c 6c 69 70 (ellip
2880: 73 69 73 3f 20 28 73 79 6e 74 61 78 20 64 6f 74 sis? (syntax dot
2890: 73 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 s)).
28a0: 20 20 20 20 20 20 20 28 77 69 74 68 2d 73 79 6e (with-syn
28b0: 74 61 78 20 28 5b 65 78 70 61 6e 64 65 64 2d 69 tax ([expanded-i
28c0: 74 65 6d 20 28 65 78 70 61 6e 64 2d 64 6f 74 74 tem (expand-dott
28d0: 65 64 2d 69 74 65 6d 20 0a 20 20 20 20 20 20 20 ed-item .
28e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2900: 20 20 20 20 20 20 20 20 20 20 28 70 72 6f 63 65 (proce
2910: 73 73 2d 6f 75 74 70 75 74 2d 61 63 74 69 6f 6e ss-output-action
2920: 20 28 73 79 6e 74 61 78 20 69 74 65 6d 29 0a 20 (syntax item).
2930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2970: 20 20 20 20 20 20 20 64 6f 74 74 65 64 2d 76 61 dotted-va
2980: 72 73 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 rs))].
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29a0: 20 20 20 20 20 20 20 5b 65 78 70 61 6e 64 65 64 [expanded
29b0: 2d 72 73 74 20 28 65 78 70 61 6e 64 2d 71 75 61 -rst (expand-qua
29c0: 73 69 71 75 6f 74 65 2d 62 6f 64 79 20 28 73 79 siquote-body (sy
29d0: 6e 74 61 78 20 72 73 74 29 29 5d 29 0a 20 20 20 ntax rst))]).
29e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29f0: 20 20 28 73 79 6e 74 61 78 20 28 28 75 6e 71 75 (syntax ((unqu
2a00: 6f 74 65 2d 73 70 6c 69 63 69 6e 67 20 65 78 70 ote-splicing exp
2a10: 61 6e 64 65 64 2d 69 74 65 6d 29 20 2e 20 65 78 anded-item) . ex
2a20: 70 61 6e 64 65 64 2d 72 73 74 29 29 29 5d 0a 20 panded-rst)))].
2a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a40: 20 5b 28 69 74 65 6d 20 64 6f 74 73 20 2e 20 72 [(item dots . r
2a50: 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 st).
2a60: 20 20 20 20 20 20 20 28 65 6c 6c 69 70 73 69 73 (ellipsis
2a70: 3f 20 28 73 79 6e 74 61 78 20 64 6f 74 73 29 29 ? (syntax dots))
2a80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
2a90: 20 20 20 20 28 77 69 74 68 2d 73 79 6e 74 61 78 (with-syntax
2aa0: 20 28 5b 65 78 70 61 6e 64 65 64 2d 69 74 65 6d ([expanded-item
2ab0: 20 28 65 78 70 61 6e 64 2d 64 6f 74 74 65 64 2d (expand-dotted-
2ac0: 69 74 65 6d 20 0a 20 20 20 20 20 20 20 20 20 20 item .
2ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2af0: 20 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d (process-
2b00: 6f 75 74 70 75 74 2d 61 63 74 69 6f 6e 20 28 73 output-action (s
2b10: 79 6e 74 61 78 20 28 71 75 61 73 69 71 75 6f 74 yntax (quasiquot
2b20: 65 20 69 74 65 6d 29 29 0a 20 20 20 20 20 20 20 e item)).
2b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b70: 20 64 6f 74 74 65 64 2d 76 61 72 73 29 29 5d 0a dotted-vars))].
2b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ba0: 20 5b 65 78 70 61 6e 64 65 64 2d 72 73 74 20 28 [expanded-rst (
2bb0: 65 78 70 61 6e 64 2d 71 75 61 73 69 71 75 6f 74 expand-quasiquot
2bc0: 65 2d 62 6f 64 79 20 28 73 79 6e 74 61 78 20 72 e-body (syntax r
2bd0: 73 74 29 29 5d 29 0a 20 20 20 20 20 20 20 20 20 st))]).
2be0: 20 20 20 20 20 20 20 20 20 20 20 20 28 73 79 6e (syn
2bf0: 74 61 78 20 28 28 75 6e 71 75 6f 74 65 2d 73 70 tax ((unquote-sp
2c00: 6c 69 63 69 6e 67 20 65 78 70 61 6e 64 65 64 2d licing expanded-
2c10: 69 74 65 6d 29 20 2e 20 65 78 70 61 6e 64 65 64 item) . expanded
2c20: 2d 72 73 74 29 29 29 5d 0a 20 20 20 20 20 20 20 -rst)))].
2c30: 20 20 20 20 20 20 20 20 20 20 20 5b 28 66 73 74 [(fst
2c40: 20 2e 20 72 73 74 29 0a 20 20 20 20 20 20 20 20 . rst).
2c50: 20 20 20 20 20 20 20 20 20 20 20 28 77 69 74 68 (with
2c60: 2d 73 79 6e 74 61 78 20 28 5b 65 78 70 61 6e 64 -syntax ([expand
2c70: 65 64 2d 66 73 74 20 28 65 78 70 61 6e 64 2d 71 ed-fst (expand-q
2c80: 75 61 73 69 71 75 6f 74 65 2d 62 6f 64 79 20 28 uasiquote-body (
2c90: 73 79 6e 74 61 78 20 66 73 74 29 29 5d 0a 20 20 syntax fst))].
2ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [
2cc0: 65 78 70 61 6e 64 65 64 2d 72 73 74 20 28 65 78 expanded-rst (ex
2cd0: 70 61 6e 64 2d 71 75 61 73 69 71 75 6f 74 65 2d pand-quasiquote-
2ce0: 62 6f 64 79 20 28 73 79 6e 74 61 78 20 72 73 74 body (syntax rst
2cf0: 29 29 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 ))]).
2d00: 20 20 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 (synta
2d10: 78 20 28 65 78 70 61 6e 64 65 64 2d 66 73 74 20 x (expanded-fst
2d20: 2e 20 65 78 70 61 6e 64 65 64 2d 72 73 74 29 29 . expanded-rst))
2d30: 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )].
2d40: 20 20 20 20 20 5b 6f 74 68 65 72 20 78 5d 29 29 [other x]))
2d50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 . (
2d60: 64 65 66 69 6e 65 20 28 70 72 6f 63 65 73 73 2d define (process-
2d70: 71 75 61 73 69 71 75 6f 74 65 20 78 29 0a 20 20 quasiquote x).
2d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 (s
2d90: 79 6e 74 61 78 2d 63 61 73 65 20 78 20 28 29 0a yntax-case x ().
2da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2db0: 20 20 5b 28 71 75 61 73 69 71 75 6f 74 65 20 74 [(quasiquote t
2dc0: 65 72 6d 29 20 28 77 69 74 68 2d 73 79 6e 74 61 erm) (with-synta
2dd0: 78 20 28 5b 65 78 70 61 6e 64 65 64 2d 62 6f 64 x ([expanded-bod
2de0: 79 20 28 65 78 70 61 6e 64 2d 71 75 61 73 69 71 y (expand-quasiq
2df0: 75 6f 74 65 2d 62 6f 64 79 20 28 73 79 6e 74 61 uote-body (synta
2e00: 78 20 74 65 72 6d 29 29 5d 29 0a 20 20 20 20 20 x term))]).
2e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e30: 20 20 28 73 79 6e 74 61 78 20 28 71 75 61 73 69 (syntax (quasi
2e40: 71 75 6f 74 65 20 65 78 70 61 6e 64 65 64 2d 62 quote expanded-b
2e50: 6f 64 79 29 29 29 5d 0a 20 20 20 20 20 20 20 20 ody)))].
2e60: 20 20 20 20 20 20 20 20 20 20 5b 65 6c 73 65 20 [else
2e70: 28 73 78 6d 6c 2d 6d 61 74 63 68 2d 73 79 6e 74 (sxml-match-synt
2e80: 61 78 2d 65 72 72 6f 72 20 22 62 61 64 20 71 75 ax-error "bad qu
2e90: 61 73 69 71 75 6f 74 65 2d 66 6f 72 6d 22 0a 20 asiquote-form".
2ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ed0: 73 74 78 0a 20 20 20 20 20 20 20 20 20 20 20 20 stx.
2ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f00: 20 20 20 20 20 78 29 5d 29 29 0a 20 20 20 20 20 x)])).
2f10: 20 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 (syntax
2f20: 2d 63 61 73 65 20 61 63 74 69 6f 6e 20 28 71 75 -case action (qu
2f30: 6f 74 65 20 71 75 61 73 69 71 75 6f 74 65 29 0a ote quasiquote).
2f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f50: 5b 28 71 75 6f 74 65 20 2e 20 72 73 74 29 20 61 [(quote . rst) a
2f60: 63 74 69 6f 6e 5d 0a 20 20 20 20 20 20 20 20 20 ction].
2f70: 20 20 20 20 20 20 20 5b 28 71 75 61 73 69 71 75 [(quasiqu
2f80: 6f 74 65 20 2e 20 72 73 74 29 20 28 70 72 6f 63 ote . rst) (proc
2f90: 65 73 73 2d 71 75 61 73 69 71 75 6f 74 65 20 61 ess-quasiquote a
2fa0: 63 74 69 6f 6e 29 5d 0a 20 20 20 20 20 20 20 20 ction)].
2fb0: 20 20 20 20 20 20 20 20 5b 28 66 73 74 20 2e 20 [(fst .
2fc0: 72 73 74 29 20 28 69 66 20 28 66 69 6e 69 74 65 rst) (if (finite
2fd0: 2d 6c 73 74 3f 20 61 63 74 69 6f 6e 29 0a 20 20 -lst? action).
2fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
3000: 77 69 74 68 2d 73 79 6e 74 61 78 20 28 5b 65 78 with-syntax ([ex
3010: 70 2d 6c 66 74 20 28 70 72 6f 63 65 73 73 2d 6f p-lft (process-o
3020: 75 74 70 75 74 2d 61 63 74 69 6f 6e 20 28 73 79 utput-action (sy
3030: 6e 74 61 78 20 66 73 74 29 20 64 6f 74 74 65 64 ntax fst) dotted
3040: 2d 76 61 72 73 29 5d 0a 20 20 20 20 20 20 20 20 -vars)].
3050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3070: 20 20 20 20 20 20 20 5b 65 78 70 2d 72 67 74 20 [exp-rgt
3080: 28 70 72 6f 63 65 73 73 2d 6f 75 74 70 75 74 2d (process-output-
3090: 61 63 74 69 6f 6e 20 28 73 79 6e 74 61 78 20 72 action (syntax r
30a0: 73 74 29 20 64 6f 74 74 65 64 2d 76 61 72 73 29 st) dotted-vars)
30b0: 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]).
30c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30d0: 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 28 65 (syntax (e
30e0: 78 70 2d 6c 66 74 20 2e 20 65 78 70 2d 72 67 74 xp-lft . exp-rgt
30f0: 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))).
3100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3110: 20 20 20 20 20 28 77 69 74 68 2d 73 79 6e 74 61 (with-synta
3120: 78 20 28 5b 65 78 70 2d 6c 66 74 20 28 70 72 6f x ([exp-lft (pro
3130: 63 65 73 73 2d 6f 75 74 70 75 74 2d 61 63 74 69 cess-output-acti
3140: 6f 6e 20 28 73 79 6e 74 61 78 20 66 73 74 29 0a on (syntax fst).
3150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
31a0: 6f 74 74 65 64 2d 76 61 72 73 29 5d 0a 20 20 20 otted-vars)].
31b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31d0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 [exp
31e0: 2d 72 67 74 20 28 65 78 70 61 6e 64 2d 6c 73 74 -rgt (expand-lst
31f0: 20 28 73 79 6e 74 61 78 20 72 73 74 29 29 5d 29 (syntax rst))])
3200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
3210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3220: 20 20 20 20 28 73 79 6e 74 61 78 20 28 61 70 70 (syntax (app
3230: 6c 79 20 65 78 70 2d 6c 66 74 20 65 78 70 2d 72 ly exp-lft exp-r
3240: 67 74 29 29 29 29 5d 0a 20 20 20 20 20 20 20 20 gt))))].
3250: 20 20 20 20 20 20 20 20 5b 69 74 65 6d 20 61 63 [item ac
3260: 74 69 6f 6e 5d 29 29 5d 0a 20 20 20 20 20 20 20 tion]))].
3270: 20 20 20 20 5b 63 6f 6d 70 69 6c 65 2d 65 6c 65 [compile-ele
3280: 6d 65 6e 74 2d 70 61 74 0a 20 20 20 20 20 20 20 ment-pat.
3290: 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 65 6c (lambda (el
32a0: 65 20 65 78 70 20 6e 65 78 74 70 20 66 61 69 6c e exp nextp fail
32b0: 2d 6b 20 70 76 61 72 2d 6c 73 74 20 64 65 70 74 -k pvar-lst dept
32c0: 68 20 63 61 74 61 2d 66 75 6e 20 63 61 74 61 2d h cata-fun cata-
32d0: 64 65 66 73 20 64 6f 74 74 65 64 2d 76 61 72 73 defs dotted-vars
32e0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
32f0: 28 73 79 6e 74 61 78 2d 63 61 73 65 20 65 6c 65 (syntax-case ele
3300: 20 28 40 29 0a 20 20 20 20 20 20 20 20 20 20 20 (@).
3310: 20 20 20 20 20 5b 28 74 61 67 20 28 40 20 2e 20 [(tag (@ .
3320: 61 74 74 72 2d 69 74 65 6d 73 29 20 2e 20 69 74 attr-items) . it
3330: 65 6d 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 ems).
3340: 20 20 20 20 20 20 28 69 64 65 6e 74 69 66 69 65 (identifie
3350: 72 3f 20 28 73 79 6e 74 61 78 20 74 61 67 29 29 r? (syntax tag))
3360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
3370: 20 20 28 6c 65 74 20 28 5b 61 74 74 72 2d 65 78 (let ([attr-ex
3380: 70 20 28 63 61 72 20 28 67 65 6e 65 72 61 74 65 p (car (generate
3390: 2d 74 65 6d 70 6f 72 61 72 69 65 73 20 28 6c 69 -temporaries (li
33a0: 73 74 20 65 78 70 29 29 29 5d 0a 20 20 20 20 20 st exp)))].
33b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
33c0: 20 20 5b 62 6f 64 79 2d 65 78 70 20 28 63 61 72 [body-exp (car
33d0: 20 28 67 65 6e 65 72 61 74 65 2d 74 65 6d 70 6f (generate-tempo
33e0: 72 61 72 69 65 73 20 28 6c 69 73 74 20 65 78 70 raries (list exp
33f0: 29 29 29 5d 29 0a 20 20 20 20 20 20 20 20 20 20 )))]).
3400: 20 20 20 20 20 20 20 20 20 28 6c 65 74 2d 76 61 (let-va
3410: 6c 75 65 73 20 28 5b 28 74 65 73 74 73 20 6e 65 lues ([(tests ne
3420: 77 2d 70 76 61 72 2d 6c 73 74 20 6e 65 77 2d 63 w-pvar-lst new-c
3430: 61 74 61 2d 64 65 66 73 20 6e 65 77 2d 64 6f 74 ata-defs new-dot
3440: 74 65 64 2d 76 61 72 73 29 0a 20 20 20 20 20 20 ted-vars).
3450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3460: 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6d 70 (comp
3470: 69 6c 65 2d 61 74 74 72 2d 6c 69 73 74 20 28 73 ile-attr-list (s
3480: 79 6e 74 61 78 20 61 74 74 72 2d 69 74 65 6d 73 yntax attr-items
3490: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
34a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34c0: 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 69 74 (syntax it
34d0: 65 6d 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 ems).
34e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
34f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3500: 20 20 20 20 20 20 20 20 20 61 74 74 72 2d 65 78 attr-ex
3510: 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 p.
3520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3540: 20 20 20 20 20 20 62 6f 64 79 2d 65 78 70 0a 20 body-exp.
3550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3580: 20 20 20 27 28 29 0a 20 20 20 20 20 20 20 20 20 '().
3590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35b0: 20 20 20 20 20 20 20 20 20 20 20 6e 65 78 74 70 nextp
35c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
35d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
35f0: 20 20 20 20 20 66 61 69 6c 2d 6b 0a 20 20 20 20 fail-k.
3600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3630: 70 76 61 72 2d 6c 73 74 0a 20 20 20 20 20 20 20 pvar-lst.
3640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3660: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 70 dep
3670: 74 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 th.
3680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36a0: 20 20 20 20 20 20 20 63 61 74 61 2d 66 75 6e 0a cata-fun.
36b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
36e0: 20 20 20 20 63 61 74 61 2d 64 65 66 73 0a 20 20 cata-defs.
36f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3720: 20 20 64 6f 74 74 65 64 2d 76 61 72 73 29 5d 29 dotted-vars)])
3730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
3740: 20 20 20 20 20 20 28 76 61 6c 75 65 73 20 28 77 (values (w
3750: 69 74 68 2d 73 79 6e 74 61 78 20 28 5b 78 20 65 ith-syntax ([x e
3760: 78 70 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 xp].
3770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [
3790: 61 78 20 61 74 74 72 2d 65 78 70 5d 0a 20 20 20 ax attr-exp].
37a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37c0: 20 20 20 20 20 20 20 20 5b 62 78 20 62 6f 64 79 [bx body
37d0: 2d 65 78 70 5d 0a 20 20 20 20 20 20 20 20 20 20 -exp].
37e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3800: 20 5b 62 6f 64 79 20 74 65 73 74 73 5d 0a 20 20 [body tests].
3810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3830: 20 20 20 20 20 20 20 20 20 5b 66 61 69 6c 2d 74 [fail-t
3840: 6f 20 66 61 69 6c 2d 6b 5d 29 0a 20 20 20 20 20 o fail-k]).
3850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3860: 20 20 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 (synta
3870: 78 20 28 69 66 20 28 61 6e 64 20 28 70 61 69 72 x (if (and (pair
3880: 3f 20 78 29 20 28 65 71 3f 20 27 74 61 67 20 28 ? x) (eq? 'tag (
3890: 78 6d 6c 2d 65 6c 65 6d 65 6e 74 2d 74 61 67 20 xml-element-tag
38a0: 78 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 x))).
38b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
38d0: 28 6c 65 74 20 28 5b 61 78 20 28 78 6d 6c 2d 65 (let ([ax (xml-e
38e0: 6c 65 6d 65 6e 74 2d 61 74 74 72 69 62 75 74 65 lement-attribute
38f0: 73 20 78 29 5d 0a 20 20 20 20 20 20 20 20 20 20 s x)].
3900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3920: 20 20 20 20 20 20 20 5b 62 78 20 28 78 6d 6c 2d [bx (xml-
3930: 65 6c 65 6d 65 6e 74 2d 63 6f 6e 74 65 6e 74 73 element-contents
3940: 20 78 29 5d 29 0a 20 20 20 20 20 20 20 20 20 20 x)]).
3950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3970: 20 20 20 62 6f 64 79 29 0a 20 20 20 20 20 20 20 body).
3980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
39a0: 20 20 20 20 28 66 61 69 6c 2d 74 6f 29 29 29 29 (fail-to))))
39b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
39c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 ne
39d0: 77 2d 70 76 61 72 2d 6c 73 74 0a 20 20 20 20 20 w-pvar-lst.
39e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
39f0: 20 20 20 20 20 20 20 20 6e 65 77 2d 63 61 74 61 new-cata
3a00: 2d 64 65 66 73 0a 20 20 20 20 20 20 20 20 20 20 -defs.
3a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3a20: 20 20 20 6e 65 77 2d 64 6f 74 74 65 64 2d 76 61 new-dotted-va
3a30: 72 73 29 29 29 5d 0a 20 20 20 20 20 20 20 20 20 rs)))].
3a40: 20 20 20 20 20 20 20 5b 28 74 61 67 20 2e 20 69 [(tag . i
3a50: 74 65 6d 73 29 0a 20 20 20 20 20 20 20 20 20 20 tems).
3a60: 20 20 20 20 20 20 20 28 69 64 65 6e 74 69 66 69 (identifi
3a70: 65 72 3f 20 28 73 79 6e 74 61 78 20 74 61 67 29 er? (syntax tag)
3a80: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
3a90: 20 20 20 28 6c 65 74 20 28 5b 62 6f 64 79 2d 65 (let ([body-e
3aa0: 78 70 20 28 63 61 72 20 28 67 65 6e 65 72 61 74 xp (car (generat
3ab0: 65 2d 74 65 6d 70 6f 72 61 72 69 65 73 20 28 6c e-temporaries (l
3ac0: 69 73 74 20 65 78 70 29 29 29 5d 29 0a 20 20 20 ist exp)))]).
3ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3ae0: 28 6c 65 74 2d 76 61 6c 75 65 73 20 28 5b 28 74 (let-values ([(t
3af0: 65 73 74 73 20 6e 65 77 2d 70 76 61 72 2d 6c 73 ests new-pvar-ls
3b00: 74 20 6e 65 77 2d 63 61 74 61 2d 64 65 66 73 20 t new-cata-defs
3b10: 6e 65 77 2d 64 6f 74 74 65 64 2d 76 61 72 73 29 new-dotted-vars)
3b20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
3b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3b40: 20 20 28 63 6f 6d 70 69 6c 65 2d 69 74 65 6d 2d (compile-item-
3b50: 6c 69 73 74 20 28 73 79 6e 74 61 78 20 69 74 65 list (syntax ite
3b60: 6d 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 ms).
3b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3b90: 20 20 20 20 20 20 20 20 62 6f 64 79 2d 65 78 70 body-exp
3ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
3bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3bd0: 20 20 20 20 20 6e 65 78 74 70 0a 20 20 20 20 20 nextp.
3be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 f
3c10: 61 69 6c 2d 6b 0a 20 20 20 20 20 20 20 20 20 20 ail-k.
3c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3c40: 20 20 20 20 20 20 20 20 20 20 23 74 0a 20 20 20 #t.
3c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3c80: 20 70 76 61 72 2d 6c 73 74 0a 20 20 20 20 20 20 pvar-lst.
3c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 de
3cc0: 70 74 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 pth.
3cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3cf0: 20 20 20 20 20 20 20 20 63 61 74 61 2d 66 75 6e cata-fun
3d00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
3d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3d30: 20 20 20 20 20 63 61 74 61 2d 64 65 66 73 0a 20 cata-defs.
3d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3d70: 20 20 20 64 6f 74 74 65 64 2d 76 61 72 73 29 5d dotted-vars)]
3d80: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
3d90: 20 20 20 20 20 20 20 28 76 61 6c 75 65 73 20 28 (values (
3da0: 77 69 74 68 2d 73 79 6e 74 61 78 20 28 5b 78 20 with-syntax ([x
3db0: 65 78 70 5d 0a 20 20 20 20 20 20 20 20 20 20 20 exp].
3dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3de0: 5b 62 78 20 62 6f 64 79 2d 65 78 70 5d 0a 20 20 [bx body-exp].
3df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3e10: 20 20 20 20 20 20 20 20 20 5b 62 6f 64 79 20 74 [body t
3e20: 65 73 74 73 5d 0a 20 20 20 20 20 20 20 20 20 20 ests].
3e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3e50: 20 5b 66 61 69 6c 2d 74 6f 20 66 61 69 6c 2d 6b [fail-to fail-k
3e60: 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]).
3e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3e80: 20 20 28 73 79 6e 74 61 78 20 28 69 66 20 28 61 (syntax (if (a
3e90: 6e 64 20 28 70 61 69 72 3f 20 78 29 20 28 65 71 nd (pair? x) (eq
3ea0: 3f 20 27 74 61 67 20 28 78 6d 6c 2d 65 6c 65 6d ? 'tag (xml-elem
3eb0: 65 6e 74 2d 74 61 67 20 78 29 29 29 0a 20 20 20 ent-tag x))).
3ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3ee0: 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 5b 62 (let ([b
3ef0: 78 20 28 78 6d 6c 2d 65 6c 65 6d 65 6e 74 2d 63 x (xml-element-c
3f00: 6f 6e 74 65 6e 74 73 20 78 29 5d 29 0a 20 20 20 ontents x)]).
3f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3f30: 20 20 20 20 20 20 20 20 20 20 62 6f 64 79 29 0a body).
3f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3f60: 20 20 20 20 20 20 20 20 20 20 20 28 66 61 69 6c (fail
3f70: 2d 74 6f 29 29 29 29 0a 20 20 20 20 20 20 20 20 -to)))).
3f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3f90: 20 20 20 20 20 6e 65 77 2d 70 76 61 72 2d 6c 73 new-pvar-ls
3fa0: 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 t.
3fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e n
3fc0: 65 77 2d 63 61 74 61 2d 64 65 66 73 0a 20 20 20 ew-cata-defs.
3fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3fe0: 20 20 20 20 20 20 20 20 20 20 6e 65 77 2d 64 6f new-do
3ff0: 74 74 65 64 2d 76 61 72 73 29 29 29 5d 29 29 5d tted-vars)))]))]
4000: 0a 20 20 20 20 20 20 20 20 20 20 20 5b 63 6f 6d . [com
4010: 70 69 6c 65 2d 65 6e 64 2d 65 6c 65 6d 65 6e 74 pile-end-element
4020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 . (la
4030: 6d 62 64 61 20 28 65 78 70 20 6e 65 78 74 70 20 mbda (exp nextp
4040: 66 61 69 6c 2d 6b 20 70 76 61 72 2d 6c 73 74 20 fail-k pvar-lst
4050: 63 61 74 61 2d 64 65 66 73 20 64 6f 74 74 65 64 cata-defs dotted
4060: 2d 76 61 72 73 29 0a 20 20 20 20 20 20 20 20 20 -vars).
4070: 20 20 20 20 20 28 6c 65 74 2d 76 61 6c 75 65 73 (let-values
4080: 20 28 5b 28 6e 65 78 74 2d 74 65 73 74 73 20 6e ([(next-tests n
4090: 65 77 2d 70 76 61 72 2d 6c 73 74 20 6e 65 77 2d ew-pvar-lst new-
40a0: 63 61 74 61 2d 64 65 66 73 20 6e 65 77 2d 64 6f cata-defs new-do
40b0: 74 74 65 64 2d 76 61 72 73 29 0a 20 20 20 20 20 tted-vars).
40c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
40d0: 20 20 20 20 20 20 20 28 6e 65 78 74 70 20 70 76 (nextp pv
40e0: 61 72 2d 6c 73 74 20 63 61 74 61 2d 64 65 66 73 ar-lst cata-defs
40f0: 20 64 6f 74 74 65 64 2d 76 61 72 73 29 5d 29 0a dotted-vars)]).
4100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4110: 28 76 61 6c 75 65 73 20 28 77 69 74 68 2d 73 79 (values (with-sy
4120: 6e 74 61 78 20 28 5b 78 20 65 78 70 5d 0a 20 20 ntax ([x exp].
4130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4150: 20 20 20 20 5b 62 6f 64 79 20 6e 65 78 74 2d 74 [body next-t
4160: 65 73 74 73 5d 0a 20 20 20 20 20 20 20 20 20 20 ests].
4170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4180: 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 61 69 [fai
4190: 6c 2d 74 6f 20 66 61 69 6c 2d 6b 5d 29 0a 20 20 l-to fail-k]).
41a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
41b0: 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 (syntax
41c0: 28 69 66 20 28 6e 75 6c 6c 3f 20 78 29 20 62 6f (if (null? x) bo
41d0: 64 79 20 28 66 61 69 6c 2d 74 6f 29 29 29 29 0a dy (fail-to)))).
41e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
41f0: 20 20 20 20 20 20 20 20 6e 65 77 2d 70 76 61 72 new-pvar
4200: 2d 6c 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 -lst.
4210: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 new
4220: 2d 63 61 74 61 2d 64 65 66 73 0a 20 20 20 20 20 -cata-defs.
4230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4240: 20 20 20 6e 65 77 2d 64 6f 74 74 65 64 2d 76 61 new-dotted-va
4250: 72 73 29 29 29 5d 0a 20 20 20 20 20 20 20 20 20 rs)))].
4260: 20 20 5b 63 6f 6d 70 69 6c 65 2d 61 74 74 72 2d [compile-attr-
4270: 6c 69 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 list.
4280: 20 28 6c 61 6d 62 64 61 20 28 61 74 74 72 2d 6c (lambda (attr-l
4290: 73 74 20 62 6f 64 79 2d 6c 73 74 20 61 74 74 72 st body-lst attr
42a0: 2d 65 78 70 20 62 6f 64 79 2d 65 78 70 20 61 74 -exp body-exp at
42b0: 74 72 2d 6b 65 79 2d 6c 73 74 20 6e 65 78 74 70 tr-key-lst nextp
42c0: 20 66 61 69 6c 2d 6b 20 70 76 61 72 2d 6c 73 74 fail-k pvar-lst
42d0: 20 64 65 70 74 68 20 63 61 74 61 2d 66 75 6e 20 depth cata-fun
42e0: 63 61 74 61 2d 64 65 66 73 20 64 6f 74 74 65 64 cata-defs dotted
42f0: 2d 76 61 72 73 29 0a 20 20 20 20 20 20 20 20 20 -vars).
4300: 20 20 20 20 20 28 73 79 6e 74 61 78 2d 63 61 73 (syntax-cas
4310: 65 20 61 74 74 72 2d 6c 73 74 20 28 75 6e 71 75 e attr-lst (unqu
4320: 6f 74 65 20 2d 3e 29 0a 20 20 20 20 20 20 20 20 ote ->).
4330: 20 20 20 20 20 20 20 20 5b 28 75 6e 71 75 6f 74 [(unquot
4340: 65 20 76 61 72 29 0a 20 20 20 20 20 20 20 20 20 e var).
4350: 20 20 20 20 20 20 20 20 28 69 64 65 6e 74 69 66 (identif
4360: 69 65 72 3f 20 28 73 79 6e 74 61 78 20 76 61 72 ier? (syntax var
4370: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )).
4380: 20 20 20 20 28 6c 65 74 2d 76 61 6c 75 65 73 20 (let-values
4390: 28 5b 28 74 65 73 74 73 20 6e 65 77 2d 70 76 61 ([(tests new-pva
43a0: 72 2d 6c 73 74 20 6e 65 77 2d 63 61 74 61 2d 64 r-lst new-cata-d
43b0: 65 66 73 20 6e 65 77 2d 64 6f 74 74 65 64 2d 76 efs new-dotted-v
43c0: 61 72 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 ars).
43d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
43e0: 20 20 20 20 28 63 6f 6d 70 69 6c 65 2d 69 74 65 (compile-ite
43f0: 6d 2d 6c 69 73 74 20 62 6f 64 79 2d 6c 73 74 0a m-list body-lst.
4400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4430: 20 20 62 6f 64 79 2d 65 78 70 0a 20 20 20 20 20 body-exp.
4440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4460: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 78 nex
4470: 74 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 tp.
4480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
44a0: 20 20 20 20 20 66 61 69 6c 2d 6b 0a 20 20 20 20 fail-k.
44b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
44c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 74 #t
44e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
44f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4510: 20 20 20 28 61 64 64 2d 70 61 74 2d 76 61 72 20 (add-pat-var
4520: 28 73 79 6e 74 61 78 20 76 61 72 29 20 70 76 61 (syntax var) pva
4530: 72 2d 6c 73 74 29 0a 20 20 20 20 20 20 20 20 20 r-lst).
4540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4560: 20 20 20 20 20 20 20 20 20 64 65 70 74 68 0a 20 depth.
4570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
45a0: 20 63 61 74 61 2d 66 75 6e 0a 20 20 20 20 20 20 cata-fun.
45b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
45c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
45d0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 61 cata
45e0: 2d 64 65 66 73 0a 20 20 20 20 20 20 20 20 20 20 -defs.
45f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4610: 20 20 20 20 20 20 20 20 64 6f 74 74 65 64 2d 76 dotted-v
4620: 61 72 73 29 5d 29 0a 20 20 20 20 20 20 20 20 20 ars)]).
4630: 20 20 20 20 20 20 20 20 20 20 28 76 61 6c 75 65 (value
4640: 73 20 28 77 69 74 68 2d 73 79 6e 74 61 78 20 28 s (with-syntax (
4650: 5b 61 78 20 61 74 74 72 2d 65 78 70 5d 0a 20 20 [ax attr-exp].
4660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4680: 20 20 20 20 20 20 20 5b 6d 61 74 63 68 65 64 2d [matched-
4690: 61 74 74 72 73 20 61 74 74 72 2d 6b 65 79 2d 6c attrs attr-key-l
46a0: 73 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 st].
46b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
46c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 62 6f [bo
46d0: 64 79 20 74 65 73 74 73 5d 29 0a 20 20 20 20 20 dy tests]).
46e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
46f0: 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 (syntax
4700: 28 6c 65 74 20 28 5b 76 61 72 20 28 66 69 6c 74 (let ([var (filt
4710: 65 72 2d 61 74 74 72 69 62 75 74 65 73 20 27 6d er-attributes 'm
4720: 61 74 63 68 65 64 2d 61 74 74 72 73 20 61 78 29 atched-attrs ax)
4730: 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]).
4740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4750: 20 20 20 20 20 20 20 20 20 20 62 6f 64 79 29 29 body))
4760: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
4770: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 new
4780: 2d 70 76 61 72 2d 6c 73 74 0a 20 20 20 20 20 20 -pvar-lst.
4790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
47a0: 20 20 20 20 20 6e 65 77 2d 63 61 74 61 2d 64 65 new-cata-de
47b0: 66 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 fs.
47c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 ne
47d0: 77 2d 64 6f 74 74 65 64 2d 76 61 72 73 29 29 5d w-dotted-vars))]
47e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
47f0: 20 5b 28 28 61 74 61 67 20 5b 28 75 6e 71 75 6f [((atag [(unquo
4800: 74 65 20 5b 63 61 74 61 20 2d 3e 20 63 76 61 72 te [cata -> cvar
4810: 20 2e 2e 2e 5d 29 20 64 65 66 61 75 6c 74 5d 29 ...]) default])
4820: 20 2e 20 72 73 74 29 0a 20 20 20 20 20 20 20 20 . rst).
4830: 20 20 20 20 20 20 20 20 20 28 69 64 65 6e 74 69 (identi
4840: 66 69 65 72 3f 20 28 73 79 6e 74 61 78 20 61 74 fier? (syntax at
4850: 61 67 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 ag)).
4860: 20 20 20 20 20 20 28 6c 65 74 20 28 5b 63 74 65 (let ([cte
4870: 6d 70 20 28 63 61 72 20 28 67 65 6e 65 72 61 74 mp (car (generat
4880: 65 2d 74 65 6d 70 6f 72 61 72 69 65 73 20 28 73 e-temporaries (s
4890: 79 6e 74 61 78 20 28 5b 63 76 61 72 20 2e 2e 2e yntax ([cvar ...
48a0: 5d 29 29 29 29 5d 29 0a 20 20 20 20 20 20 20 20 ]))))]).
48b0: 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 2d (let-
48c0: 76 61 6c 75 65 73 20 28 5b 28 74 65 73 74 73 20 values ([(tests
48d0: 6e 65 77 2d 70 76 61 72 2d 6c 73 74 20 6e 65 77 new-pvar-lst new
48e0: 2d 63 61 74 61 2d 64 65 66 73 20 6e 65 77 2d 64 -cata-defs new-d
48f0: 6f 74 74 65 64 2d 76 61 72 73 29 0a 20 20 20 20 otted-vars).
4900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4910: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f (co
4920: 6d 70 69 6c 65 2d 61 74 74 72 2d 6c 69 73 74 20 mpile-attr-list
4930: 28 73 79 6e 74 61 78 20 72 73 74 29 0a 20 20 20 (syntax rst).
4940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4970: 20 62 6f 64 79 2d 6c 73 74 0a 20 20 20 20 20 20 body-lst.
4980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
49a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 74 at
49b0: 74 72 2d 65 78 70 0a 20 20 20 20 20 20 20 20 20 tr-exp.
49c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
49d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
49e0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 64 79 2d body-
49f0: 65 78 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 exp.
4a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4a20: 20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 28 73 (cons (s
4a30: 79 6e 74 61 78 20 61 74 61 67 29 20 61 74 74 72 yntax atag) attr
4a40: 2d 6b 65 79 2d 6c 73 74 29 0a 20 20 20 20 20 20 -key-lst).
4a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 ne
4a80: 78 74 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 xtp.
4a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4ab0: 20 20 20 20 20 20 20 20 66 61 69 6c 2d 6b 0a 20 fail-k.
4ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4af0: 20 20 20 28 61 64 64 2d 70 61 74 2d 76 61 72 20 (add-pat-var
4b00: 63 74 65 6d 70 20 70 76 61 72 2d 6c 73 74 29 0a ctemp pvar-lst).
4b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4b40: 20 20 20 20 64 65 70 74 68 0a 20 20 20 20 20 20 depth.
4b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 ca
4b80: 74 61 2d 66 75 6e 0a 20 20 20 20 20 20 20 20 20 ta-fun.
4b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4bb0: 20 20 20 20 20 20 20 20 20 20 20 28 61 64 64 2d (add-
4bc0: 63 61 74 61 2d 64 65 66 20 64 65 70 74 68 0a 20 cata-def depth.
4bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4c10: 20 28 73 79 6e 74 61 78 20 5b 63 76 61 72 20 2e (syntax [cvar .
4c20: 2e 2e 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 ..]).
4c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4c60: 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 63 (syntax c
4c70: 61 74 61 29 0a 20 20 20 20 20 20 20 20 20 20 20 ata).
4c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4cb0: 20 20 20 20 20 20 20 63 74 65 6d 70 0a 20 20 20 ctemp.
4cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 c
4d00: 61 74 61 2d 64 65 66 73 29 0a 20 20 20 20 20 20 ata-defs).
4d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f do
4d40: 74 74 65 64 2d 76 61 72 73 29 5d 29 0a 20 20 20 tted-vars)]).
4d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4d60: 20 20 28 76 61 6c 75 65 73 20 28 77 69 74 68 2d (values (with-
4d70: 73 79 6e 74 61 78 20 28 5b 61 78 20 61 74 74 72 syntax ([ax attr
4d80: 2d 65 78 70 5d 0a 20 20 20 20 20 20 20 20 20 20 -exp].
4d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4db0: 20 5b 63 74 20 63 74 65 6d 70 5d 0a 20 20 20 20 [ct ctemp].
4dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4de0: 20 20 20 20 20 20 20 5b 62 6f 64 79 20 74 65 73 [body tes
4df0: 74 73 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 ts]).
4e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4e10: 20 20 20 20 28 73 79 6e 74 61 78 20 28 6c 65 74 (syntax (let
4e20: 20 28 5b 62 69 6e 64 69 6e 67 20 28 6d 61 74 63 ([binding (matc
4e30: 68 2d 78 6d 6c 2d 61 74 74 72 69 62 75 74 65 20 h-xml-attribute
4e40: 27 61 74 61 67 20 61 78 29 5d 29 0a 20 20 20 20 'atag ax)]).
4e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4e70: 20 20 20 20 20 28 6c 65 74 20 28 5b 63 74 20 28 (let ([ct (
4e80: 69 66 20 62 69 6e 64 69 6e 67 0a 20 20 20 20 20 if binding.
4e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4ec0: 20 20 28 63 61 64 72 20 62 69 6e 64 69 6e 67 29 (cadr binding)
4ed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
4ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4f00: 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 29 default)
4f10: 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]).
4f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f bo
4f40: 64 79 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 dy)))).
4f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4f60: 20 20 20 20 6e 65 77 2d 70 76 61 72 2d 6c 73 74 new-pvar-lst
4f70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
4f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 ne
4f90: 77 2d 63 61 74 61 2d 64 65 66 73 0a 20 20 20 20 w-cata-defs.
4fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4fb0: 20 20 20 20 20 20 20 20 20 6e 65 77 2d 64 6f 74 new-dot
4fc0: 74 65 64 2d 76 61 72 73 29 29 29 5d 0a 20 20 20 ted-vars)))].
4fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 28 28 [((
4fe0: 61 74 61 67 20 5b 28 75 6e 71 75 6f 74 65 20 5b atag [(unquote [
4ff0: 63 76 61 72 20 2e 2e 2e 5d 29 20 64 65 66 61 75 cvar ...]) defau
5000: 6c 74 5d 29 20 2e 20 72 73 74 29 0a 20 20 20 20 lt]) . rst).
5010: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 64 (id
5020: 65 6e 74 69 66 69 65 72 3f 20 28 73 79 6e 74 61 entifier? (synta
5030: 78 20 61 74 61 67 29 29 0a 20 20 20 20 20 20 20 x atag)).
5040: 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 (let (
5050: 5b 63 74 65 6d 70 20 28 63 61 72 20 28 67 65 6e [ctemp (car (gen
5060: 65 72 61 74 65 2d 74 65 6d 70 6f 72 61 72 69 65 erate-temporarie
5070: 73 20 28 73 79 6e 74 61 78 20 28 5b 63 76 61 72 s (syntax ([cvar
5080: 20 2e 2e 2e 5d 29 29 29 29 5d 29 0a 20 20 20 20 ...]))))]).
5090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
50a0: 69 66 20 28 6e 6f 74 20 63 61 74 61 2d 66 75 6e if (not cata-fun
50b0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
50c0: 20 20 20 20 20 20 20 20 20 28 73 78 6d 6c 2d 6d (sxml-m
50d0: 61 74 63 68 2d 73 79 6e 74 61 78 2d 65 72 72 6f atch-syntax-erro
50e0: 72 20 22 73 78 6d 6c 2d 6d 61 74 63 68 20 70 61 r "sxml-match pa
50f0: 74 74 65 72 6e 3a 20 63 61 74 61 6d 6f 72 70 68 ttern: catamorph
5100: 69 73 6d 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 ism not allowed
5110: 69 6e 20 74 68 69 73 20 63 6f 6e 74 65 78 74 22 in this context"
5120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
5130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5150: 20 73 74 78 0a 20 20 20 20 20 20 20 20 20 20 20 stx.
5160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5180: 20 20 20 20 20 28 73 79 6e 74 61 78 20 5b 63 76 (syntax [cv
5190: 61 72 20 2e 2e 2e 5d 29 29 29 0a 20 20 20 20 20 ar ...]))).
51a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c (l
51b0: 65 74 2d 76 61 6c 75 65 73 20 28 5b 28 74 65 73 et-values ([(tes
51c0: 74 73 20 6e 65 77 2d 70 76 61 72 2d 6c 73 74 20 ts new-pvar-lst
51d0: 6e 65 77 2d 63 61 74 61 2d 64 65 66 73 20 6e 65 new-cata-defs ne
51e0: 77 2d 64 6f 74 74 65 64 2d 76 61 72 73 29 0a 20 w-dotted-vars).
51f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5210: 28 63 6f 6d 70 69 6c 65 2d 61 74 74 72 2d 6c 69 (compile-attr-li
5220: 73 74 20 28 73 79 6e 74 61 78 20 72 73 74 29 0a st (syntax rst).
5230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5260: 20 20 20 20 62 6f 64 79 2d 6c 73 74 0a 20 20 20 body-lst.
5270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
52a0: 20 61 74 74 72 2d 65 78 70 0a 20 20 20 20 20 20 attr-exp.
52b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
52c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
52d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f bo
52e0: 64 79 2d 65 78 70 0a 20 20 20 20 20 20 20 20 20 dy-exp.
52f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5310: 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 (cons
5320: 20 28 73 79 6e 74 61 78 20 61 74 61 67 29 20 61 (syntax atag) a
5330: 74 74 72 2d 6b 65 79 2d 6c 73 74 29 0a 20 20 20 ttr-key-lst).
5340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5370: 20 6e 65 78 74 70 0a 20 20 20 20 20 20 20 20 20 nextp.
5380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
53a0: 20 20 20 20 20 20 20 20 20 20 20 66 61 69 6c 2d fail-
53b0: 6b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 k.
53c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
53d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
53e0: 20 20 20 20 20 20 28 61 64 64 2d 70 61 74 2d 76 (add-pat-v
53f0: 61 72 20 63 74 65 6d 70 20 70 76 61 72 2d 6c 73 ar ctemp pvar-ls
5400: 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 t).
5410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5430: 20 20 20 20 20 20 20 64 65 70 74 68 0a 20 20 20 depth.
5440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5470: 20 63 61 74 61 2d 66 75 6e 0a 20 20 20 20 20 20 cata-fun.
5480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
54a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 (a
54b0: 64 64 2d 63 61 74 61 2d 64 65 66 20 64 65 70 74 dd-cata-def dept
54c0: 68 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 h.
54d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
54e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
54f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5500: 20 20 20 20 28 73 79 6e 74 61 78 20 5b 63 76 61 (syntax [cva
5510: 72 20 2e 2e 2e 5d 29 0a 20 20 20 20 20 20 20 20 r ...]).
5520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5550: 20 20 20 20 20 20 20 20 20 20 63 61 74 61 2d 66 cata-f
5560: 75 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 un.
5570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
55a0: 20 20 20 20 20 63 74 65 6d 70 0a 20 20 20 20 20 ctemp.
55b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
55c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
55d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
55e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 cat
55f0: 61 2d 64 65 66 73 29 0a 20 20 20 20 20 20 20 20 a-defs).
5600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5620: 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 74 74 dott
5630: 65 64 2d 76 61 72 73 29 5d 29 0a 20 20 20 20 20 ed-vars)]).
5640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5650: 28 76 61 6c 75 65 73 20 28 77 69 74 68 2d 73 79 (values (with-sy
5660: 6e 74 61 78 20 28 5b 61 78 20 61 74 74 72 2d 65 ntax ([ax attr-e
5670: 78 70 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 xp].
5680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [
56a0: 63 74 20 63 74 65 6d 70 5d 0a 20 20 20 20 20 20 ct ctemp].
56b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
56c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
56d0: 20 20 20 20 20 5b 62 6f 64 79 20 74 65 73 74 73 [body tests
56e0: 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]).
56f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5700: 20 20 28 73 79 6e 74 61 78 20 28 6c 65 74 20 28 (syntax (let (
5710: 5b 62 69 6e 64 69 6e 67 20 28 6d 61 74 63 68 2d [binding (match-
5720: 78 6d 6c 2d 61 74 74 72 69 62 75 74 65 20 27 61 xml-attribute 'a
5730: 74 61 67 20 61 78 29 5d 29 0a 20 20 20 20 20 20 tag ax)]).
5740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5760: 20 20 20 28 6c 65 74 20 28 5b 63 74 20 28 69 66 (let ([ct (if
5770: 20 62 69 6e 64 69 6e 67 0a 20 20 20 20 20 20 20 binding.
5780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
57a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
57b0: 28 63 61 64 72 20 62 69 6e 64 69 6e 67 29 0a 20 (cadr binding).
57c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
57d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
57e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
57f0: 20 20 20 20 20 20 64 65 66 61 75 6c 74 29 5d 29 default)])
5800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
5810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5820: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 64 79 body
5830: 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 )))).
5840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5850: 20 20 6e 65 77 2d 70 76 61 72 2d 6c 73 74 0a 20 new-pvar-lst.
5860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5870: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 2d new-
5880: 63 61 74 61 2d 64 65 66 73 0a 20 20 20 20 20 20 cata-defs.
5890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
58a0: 20 20 20 20 20 20 20 6e 65 77 2d 64 6f 74 74 65 new-dotte
58b0: 64 2d 76 61 72 73 29 29 29 5d 0a 20 20 20 20 20 d-vars)))].
58c0: 20 20 20 20 20 20 20 20 20 20 20 5b 28 28 61 74 [((at
58d0: 61 67 20 5b 28 75 6e 71 75 6f 74 65 20 76 61 72 ag [(unquote var
58e0: 29 20 64 65 66 61 75 6c 74 5d 29 20 2e 20 72 73 ) default]) . rs
58f0: 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 t).
5900: 20 20 20 20 28 61 6e 64 20 28 69 64 65 6e 74 69 (and (identi
5910: 66 69 65 72 3f 20 28 73 79 6e 74 61 78 20 61 74 fier? (syntax at
5920: 61 67 29 29 20 28 69 64 65 6e 74 69 66 69 65 72 ag)) (identifier
5930: 3f 20 28 73 79 6e 74 61 78 20 76 61 72 29 29 29 ? (syntax var)))
5940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
5950: 20 20 28 6c 65 74 2d 76 61 6c 75 65 73 20 28 5b (let-values ([
5960: 28 74 65 73 74 73 20 6e 65 77 2d 70 76 61 72 2d (tests new-pvar-
5970: 6c 73 74 20 6e 65 77 2d 63 61 74 61 2d 64 65 66 lst new-cata-def
5980: 73 20 6e 65 77 2d 64 6f 74 74 65 64 2d 76 61 72 s new-dotted-var
5990: 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 s).
59a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
59b0: 20 20 28 63 6f 6d 70 69 6c 65 2d 61 74 74 72 2d (compile-attr-
59c0: 6c 69 73 74 20 28 73 79 6e 74 61 78 20 72 73 74 list (syntax rst
59d0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
59e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
59f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5a00: 20 20 20 20 62 6f 64 79 2d 6c 73 74 0a 20 20 20 body-lst.
5a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 a
5a40: 74 74 72 2d 65 78 70 0a 20 20 20 20 20 20 20 20 ttr-exp.
5a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5a70: 20 20 20 20 20 20 20 20 20 20 62 6f 64 79 2d 65 body-e
5a80: 78 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 xp.
5a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5ab0: 20 20 20 20 20 28 63 6f 6e 73 20 28 73 79 6e 74 (cons (synt
5ac0: 61 78 20 61 74 61 67 29 20 61 74 74 72 2d 6b 65 ax atag) attr-ke
5ad0: 79 2d 6c 73 74 29 0a 20 20 20 20 20 20 20 20 20 y-lst).
5ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5b00: 20 20 20 20 20 20 20 20 20 6e 65 78 74 70 0a 20 nextp.
5b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5b40: 20 66 61 69 6c 2d 6b 0a 20 20 20 20 20 20 20 20 fail-k.
5b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5b70: 20 20 20 20 20 20 20 20 20 20 28 61 64 64 2d 70 (add-p
5b80: 61 74 2d 76 61 72 20 28 73 79 6e 74 61 78 20 76 at-var (syntax v
5b90: 61 72 29 20 70 76 61 72 2d 6c 73 74 29 0a 20 20 ar) pvar-lst).
5ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5bd0: 64 65 70 74 68 0a 20 20 20 20 20 20 20 20 20 20 depth.
5be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5c00: 20 20 20 20 20 20 20 20 63 61 74 61 2d 66 75 6e cata-fun
5c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
5c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5c40: 20 20 20 63 61 74 61 2d 64 65 66 73 0a 20 20 20 cata-defs.
5c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
5c80: 6f 74 74 65 64 2d 76 61 72 73 29 5d 29 0a 20 20 otted-vars)]).
5c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5ca0: 20 28 76 61 6c 75 65 73 20 28 77 69 74 68 2d 73 (values (with-s
5cb0: 79 6e 74 61 78 20 28 5b 61 78 20 61 74 74 72 2d yntax ([ax attr-
5cc0: 65 78 70 5d 0a 20 20 20 20 20 20 20 20 20 20 20 exp].
5cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 62 [b
5cf0: 6f 64 79 20 74 65 73 74 73 5d 29 0a 20 20 20 20 ody tests]).
5d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5d10: 20 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 (syntax
5d20: 20 28 6c 65 74 20 28 5b 62 69 6e 64 69 6e 67 20 (let ([binding
5d30: 28 6d 61 74 63 68 2d 78 6d 6c 2d 61 74 74 72 69 (match-xml-attri
5d40: 62 75 74 65 20 27 61 74 61 67 20 61 78 29 5d 29 bute 'atag ax)])
5d50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
5d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5d70: 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 5b 76 (let ([v
5d80: 61 72 20 28 69 66 20 62 69 6e 64 69 6e 67 0a 20 ar (if binding.
5d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5dc0: 20 20 20 20 20 28 63 61 64 72 20 62 69 6e 64 69 (cadr bindi
5dd0: 6e 67 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 ng).
5de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5e00: 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c defaul
5e10: 74 29 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 t)]).
5e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f bo
5e40: 64 79 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 dy)))).
5e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5e60: 20 20 6e 65 77 2d 70 76 61 72 2d 6c 73 74 0a 20 new-pvar-lst.
5e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5e80: 20 20 20 20 20 20 20 20 20 20 6e 65 77 2d 63 61 new-ca
5e90: 74 61 2d 64 65 66 73 0a 20 20 20 20 20 20 20 20 ta-defs.
5ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5eb0: 20 20 20 6e 65 77 2d 64 6f 74 74 65 64 2d 76 61 new-dotted-va
5ec0: 72 73 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 rs))].
5ed0: 20 20 20 20 20 20 5b 28 28 61 74 61 67 20 28 75 [((atag (u
5ee0: 6e 71 75 6f 74 65 20 5b 63 61 74 61 20 2d 3e 20 nquote [cata ->
5ef0: 63 76 61 72 20 2e 2e 2e 5d 29 29 20 2e 20 72 73 cvar ...])) . rs
5f00: 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 t).
5f10: 20 20 20 20 28 69 64 65 6e 74 69 66 69 65 72 3f (identifier?
5f20: 20 28 73 79 6e 74 61 78 20 61 74 61 67 29 29 0a (syntax atag)).
5f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5f40: 20 28 6c 65 74 20 28 5b 63 74 65 6d 70 20 28 63 (let ([ctemp (c
5f50: 61 72 20 28 67 65 6e 65 72 61 74 65 2d 74 65 6d ar (generate-tem
5f60: 70 6f 72 61 72 69 65 73 20 28 73 79 6e 74 61 78 poraries (syntax
5f70: 20 28 5b 63 76 61 72 20 2e 2e 2e 5d 29 29 29 29 ([cvar ...]))))
5f80: 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]).
5f90: 20 20 20 20 20 20 28 6c 65 74 2d 76 61 6c 75 65 (let-value
5fa0: 73 20 28 5b 28 74 65 73 74 73 20 6e 65 77 2d 70 s ([(tests new-p
5fb0: 76 61 72 2d 6c 73 74 20 6e 65 77 2d 63 61 74 61 var-lst new-cata
5fc0: 2d 64 65 66 73 20 6e 65 77 2d 64 6f 74 74 65 64 -defs new-dotted
5fd0: 2d 76 61 72 73 29 0a 20 20 20 20 20 20 20 20 20 -vars).
5fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5ff0: 20 20 20 20 20 20 20 20 28 63 6f 6d 70 69 6c 65 (compile
6000: 2d 61 74 74 72 2d 6c 69 73 74 20 28 73 79 6e 74 -attr-list (synt
6010: 61 78 20 72 73 74 29 0a 20 20 20 20 20 20 20 20 ax rst).
6020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6040: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 64 79 body
6050: 2d 6c 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 -lst.
6060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6080: 20 20 20 20 20 20 20 20 20 61 74 74 72 2d 65 78 attr-ex
6090: 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 p.
60a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
60b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
60c0: 20 20 20 20 20 20 62 6f 64 79 2d 65 78 70 0a 20 body-exp.
60d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
60e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
60f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6100: 20 20 20 28 63 6f 6e 73 20 28 73 79 6e 74 61 78 (cons (syntax
6110: 20 61 74 61 67 29 20 61 74 74 72 2d 6b 65 79 2d atag) attr-key-
6120: 6c 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 lst).
6130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6150: 20 20 20 20 20 20 20 20 20 6e 65 78 74 70 0a 20 nextp.
6160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6190: 20 20 20 66 61 69 6c 2d 6b 0a 20 20 20 20 20 20 fail-k.
61a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
61b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
61c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 (a
61d0: 64 64 2d 70 61 74 2d 76 61 72 20 63 74 65 6d 70 dd-pat-var ctemp
61e0: 20 70 76 61 72 2d 6c 73 74 29 0a 20 20 20 20 20 pvar-lst).
61f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
6220: 65 70 74 68 0a 20 20 20 20 20 20 20 20 20 20 20 epth.
6230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6250: 20 20 20 20 20 20 20 20 20 63 61 74 61 2d 66 75 cata-fu
6260: 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 n.
6270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6290: 20 20 20 20 20 20 28 61 64 64 2d 63 61 74 61 2d (add-cata-
62a0: 64 65 66 20 64 65 70 74 68 0a 20 20 20 20 20 20 def depth.
62b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
62c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
62d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
62e0: 20 20 20 20 20 20 20 20 20 20 20 20 28 73 79 6e (syn
62f0: 74 61 78 20 5b 63 76 61 72 20 2e 2e 2e 5d 29 0a tax [cvar ...]).
6300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6340: 20 20 28 73 79 6e 74 61 78 20 63 61 74 61 29 0a (syntax cata).
6350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6390: 20 20 63 74 65 6d 70 0a 20 20 20 20 20 20 20 20 ctemp.
63a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
63b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
63c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
63d0: 20 20 20 20 20 20 20 20 20 20 63 61 74 61 2d 64 cata-d
63e0: 65 66 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 efs).
63f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6410: 20 20 20 20 20 20 20 20 20 64 6f 74 74 65 64 2d dotted-
6420: 76 61 72 73 29 5d 29 0a 20 20 20 20 20 20 20 20 vars)]).
6430: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 76 61 (va
6440: 6c 75 65 73 20 28 77 69 74 68 2d 73 79 6e 74 61 lues (with-synta
6450: 78 20 28 5b 61 78 20 61 74 74 72 2d 65 78 70 5d x ([ax attr-exp]
6460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6480: 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 74 20 [ct
6490: 63 74 65 6d 70 5d 0a 20 20 20 20 20 20 20 20 20 ctemp].
64a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
64b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
64c0: 20 20 5b 62 6f 64 79 20 74 65 73 74 73 5d 0a 20 [body tests].
64d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
64e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
64f0: 20 20 20 20 20 20 20 20 20 20 5b 66 61 69 6c 2d [fail-
6500: 74 6f 20 66 61 69 6c 2d 6b 5d 29 0a 20 20 20 20 to fail-k]).
6510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6520: 20 20 20 20 20 20 20 20 20 20 20 28 73 79 6e 74 (synt
6530: 61 78 20 28 6c 65 74 20 28 5b 62 69 6e 64 69 6e ax (let ([bindin
6540: 67 20 28 6d 61 74 63 68 2d 78 6d 6c 2d 61 74 74 g (match-xml-att
6550: 72 69 62 75 74 65 20 27 61 74 61 67 20 61 78 29 ribute 'atag ax)
6560: 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]).
6570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6580: 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 (if
6590: 62 69 6e 64 69 6e 67 0a 20 20 20 20 20 20 20 20 binding.
65a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
65b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
65c0: 20 20 20 20 20 28 6c 65 74 20 28 5b 63 74 20 28 (let ([ct (
65d0: 63 61 64 72 20 62 69 6e 64 69 6e 67 29 5d 29 0a cadr binding)]).
65e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
65f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 b
6610: 6f 64 79 29 0a 20 20 20 20 20 20 20 20 20 20 20 ody).
6620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6640: 20 20 28 66 61 69 6c 2d 74 6f 29 29 29 29 29 0a (fail-to))))).
6650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6660: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 new
6670: 2d 70 76 61 72 2d 6c 73 74 0a 20 20 20 20 20 20 -pvar-lst.
6680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6690: 20 20 20 20 20 20 20 6e 65 77 2d 63 61 74 61 2d new-cata-
66a0: 64 65 66 73 0a 20 20 20 20 20 20 20 20 20 20 20 defs.
66b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
66c0: 20 20 6e 65 77 2d 64 6f 74 74 65 64 2d 76 61 72 new-dotted-var
66d0: 73 29 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 s)))].
66e0: 20 20 20 20 20 20 5b 28 28 61 74 61 67 20 28 75 [((atag (u
66f0: 6e 71 75 6f 74 65 20 5b 63 76 61 72 20 2e 2e 2e nquote [cvar ...
6700: 5d 29 29 20 2e 20 72 73 74 29 0a 20 20 20 20 20 ])) . rst).
6710: 20 20 20 20 20 20 20 20 20 20 20 20 28 69 64 65 (ide
6720: 6e 74 69 66 69 65 72 3f 20 28 73 79 6e 74 61 78 ntifier? (syntax
6730: 20 61 74 61 67 29 29 0a 20 20 20 20 20 20 20 20 atag)).
6740: 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 28 5b (let ([
6750: 63 74 65 6d 70 20 28 63 61 72 20 28 67 65 6e 65 ctemp (car (gene
6760: 72 61 74 65 2d 74 65 6d 70 6f 72 61 72 69 65 73 rate-temporaries
6770: 20 28 73 79 6e 74 61 78 20 28 5b 63 76 61 72 20 (syntax ([cvar
6780: 2e 2e 2e 5d 29 29 29 29 5d 29 0a 20 20 20 20 20 ...]))))]).
6790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 (i
67a0: 66 20 28 6e 6f 74 20 63 61 74 61 2d 66 75 6e 29 f (not cata-fun)
67b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
67c0: 20 20 20 20 20 20 20 20 28 73 78 6d 6c 2d 6d 61 (sxml-ma
67d0: 74 63 68 2d 73 79 6e 74 61 78 2d 65 72 72 6f 72 tch-syntax-error
67e0: 20 22 73 78 6d 6c 2d 6d 61 74 63 68 20 70 61 74 "sxml-match pat
67f0: 74 65 72 6e 3a 20 63 61 74 61 6d 6f 72 70 68 69 tern: catamorphi
6800: 73 6d 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 69 sm not allowed i
6810: 6e 20 74 68 69 73 20 63 6f 6e 74 65 78 74 22 0a n this context".
6820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6850: 73 74 78 0a 20 20 20 20 20 20 20 20 20 20 20 20 stx.
6860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6880: 20 20 20 20 28 73 79 6e 74 61 78 20 5b 63 76 61 (syntax [cva
6890: 72 20 2e 2e 2e 5d 29 29 29 0a 20 20 20 20 20 20 r ...]))).
68a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 (le
68b0: 74 2d 76 61 6c 75 65 73 20 28 5b 28 74 65 73 74 t-values ([(test
68c0: 73 20 6e 65 77 2d 70 76 61 72 2d 6c 73 74 20 6e s new-pvar-lst n
68d0: 65 77 2d 63 61 74 61 2d 64 65 66 73 20 6e 65 77 ew-cata-defs new
68e0: 2d 64 6f 74 74 65 64 2d 76 61 72 73 29 0a 20 20 -dotted-vars).
68f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
6910: 63 6f 6d 70 69 6c 65 2d 61 74 74 72 2d 6c 69 73 compile-attr-lis
6920: 74 20 28 73 79 6e 74 61 78 20 72 73 74 29 0a 20 t (syntax rst).
6930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6960: 20 20 20 62 6f 64 79 2d 6c 73 74 0a 20 20 20 20 body-lst.
6970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
69a0: 61 74 74 72 2d 65 78 70 0a 20 20 20 20 20 20 20 attr-exp.
69b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
69c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
69d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 64 bod
69e0: 79 2d 65 78 70 0a 20 20 20 20 20 20 20 20 20 20 y-exp.
69f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6a10: 20 20 20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 (cons
6a20: 28 73 79 6e 74 61 78 20 61 74 61 67 29 20 61 74 (syntax atag) at
6a30: 74 72 2d 6b 65 79 2d 6c 73 74 29 0a 20 20 20 20 tr-key-lst).
6a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6a70: 6e 65 78 74 70 0a 20 20 20 20 20 20 20 20 20 20 nextp.
6a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6aa0: 20 20 20 20 20 20 20 20 20 20 66 61 69 6c 2d 6b fail-k
6ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6ae0: 20 20 20 20 20 28 61 64 64 2d 70 61 74 2d 76 61 (add-pat-va
6af0: 72 20 63 74 65 6d 70 20 70 76 61 72 2d 6c 73 74 r ctemp pvar-lst
6b00: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
6b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6b30: 20 20 20 20 20 20 64 65 70 74 68 0a 20 20 20 20 depth.
6b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6b70: 63 61 74 61 2d 66 75 6e 0a 20 20 20 20 20 20 20 cata-fun.
6b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 64 (ad
6bb0: 64 2d 63 61 74 61 2d 64 65 66 20 64 65 70 74 68 d-cata-def depth
6bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6c00: 20 20 20 28 73 79 6e 74 61 78 20 5b 63 76 61 72 (syntax [cvar
6c10: 20 2e 2e 2e 5d 29 0a 20 20 20 20 20 20 20 20 20 ...]).
6c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6c50: 20 20 20 20 20 20 20 20 20 63 61 74 61 2d 66 75 cata-fu
6c60: 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 n.
6c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6ca0: 20 20 20 20 63 74 65 6d 70 0a 20 20 20 20 20 20 ctemp.
6cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6ce0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 61 cata
6cf0: 2d 64 65 66 73 29 0a 20 20 20 20 20 20 20 20 20 -defs).
6d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6d20: 20 20 20 20 20 20 20 20 20 20 20 64 6f 74 74 65 dotte
6d30: 64 2d 76 61 72 73 29 5d 29 0a 20 20 20 20 20 20 d-vars)]).
6d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
6d50: 76 61 6c 75 65 73 20 28 77 69 74 68 2d 73 79 6e values (with-syn
6d60: 74 61 78 20 28 5b 61 78 20 61 74 74 72 2d 65 78 tax ([ax attr-ex
6d70: 70 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 p].
6d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 [c
6da0: 74 20 63 74 65 6d 70 5d 0a 20 20 20 20 20 20 20 t ctemp].
6db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6dd0: 20 20 20 20 5b 62 6f 64 79 20 74 65 73 74 73 5d [body tests]
6de0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
6df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6e00: 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 61 69 [fai
6e10: 6c 2d 74 6f 20 66 61 69 6c 2d 6b 5d 29 0a 20 20 l-to fail-k]).
6e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 79 (sy
6e40: 6e 74 61 78 20 28 6c 65 74 20 28 5b 62 69 6e 64 ntax (let ([bind
6e50: 69 6e 67 20 28 6d 61 74 63 68 2d 78 6d 6c 2d 61 ing (match-xml-a
6e60: 74 74 72 69 62 75 74 65 20 27 61 74 61 67 20 61 ttribute 'atag a
6e70: 78 29 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 x)]).
6e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 (i
6ea0: 66 20 62 69 6e 64 69 6e 67 0a 20 20 20 20 20 20 f binding.
6eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6ed0: 20 20 20 20 20 20 20 28 6c 65 74 20 28 5b 63 74 (let ([ct
6ee0: 20 28 63 61 64 72 20 62 69 6e 64 69 6e 67 29 5d (cadr binding)]
6ef0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
6f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6f20: 20 62 6f 64 79 29 0a 20 20 20 20 20 20 20 20 20 body).
6f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6f50: 20 20 20 20 28 66 61 69 6c 2d 74 6f 29 29 29 29 (fail-to))))
6f60: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
6f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e n
6f80: 65 77 2d 70 76 61 72 2d 6c 73 74 0a 20 20 20 20 ew-pvar-lst.
6f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6fa0: 20 20 20 20 20 20 20 20 20 6e 65 77 2d 63 61 74 new-cat
6fb0: 61 2d 64 65 66 73 0a 20 20 20 20 20 20 20 20 20 a-defs.
6fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
6fd0: 20 20 20 20 6e 65 77 2d 64 6f 74 74 65 64 2d 76 new-dotted-v
6fe0: 61 72 73 29 29 29 5d 0a 20 20 20 20 20 20 20 20 ars)))].
6ff0: 20 20 20 20 20 20 20 20 5b 28 28 61 74 61 67 20 [((atag
7000: 28 75 6e 71 75 6f 74 65 20 76 61 72 29 29 20 2e (unquote var)) .
7010: 20 72 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 rst).
7020: 20 20 20 20 20 20 20 28 61 6e 64 20 28 69 64 65 (and (ide
7030: 6e 74 69 66 69 65 72 3f 20 28 73 79 6e 74 61 78 ntifier? (syntax
7040: 20 61 74 61 67 29 29 20 28 69 64 65 6e 74 69 66 atag)) (identif
7050: 69 65 72 3f 20 28 73 79 6e 74 61 78 20 76 61 72 ier? (syntax var
7060: 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))).
7070: 20 20 20 20 20 28 6c 65 74 2d 76 61 6c 75 65 73 (let-values
7080: 20 28 5b 28 74 65 73 74 73 20 6e 65 77 2d 70 76 ([(tests new-pv
7090: 61 72 2d 6c 73 74 20 6e 65 77 2d 63 61 74 61 2d ar-lst new-cata-
70a0: 64 65 66 73 20 6e 65 77 2d 64 6f 74 74 65 64 2d defs new-dotted-
70b0: 76 61 72 73 29 0a 20 20 20 20 20 20 20 20 20 20 vars).
70c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
70d0: 20 20 20 20 20 28 63 6f 6d 70 69 6c 65 2d 61 74 (compile-at
70e0: 74 72 2d 6c 69 73 74 20 28 73 79 6e 74 61 78 20 tr-list (syntax
70f0: 72 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 rst).
7100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7120: 20 20 20 20 20 20 20 62 6f 64 79 2d 6c 73 74 0a body-lst.
7130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7160: 20 20 61 74 74 72 2d 65 78 70 0a 20 20 20 20 20 attr-exp.
7170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7190: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 64 bod
71a0: 79 2d 65 78 70 0a 20 20 20 20 20 20 20 20 20 20 y-exp.
71b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
71c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
71d0: 20 20 20 20 20 20 20 20 28 63 6f 6e 73 20 28 73 (cons (s
71e0: 79 6e 74 61 78 20 61 74 61 67 29 20 61 74 74 72 yntax atag) attr
71f0: 2d 6b 65 79 2d 6c 73 74 29 0a 20 20 20 20 20 20 -key-lst).
7200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7220: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 78 74 next
7230: 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 p.
7240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7260: 20 20 20 20 66 61 69 6c 2d 6b 0a 20 20 20 20 20 fail-k.
7270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7290: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 64 (ad
72a0: 64 2d 70 61 74 2d 76 61 72 20 28 73 79 6e 74 61 d-pat-var (synta
72b0: 78 20 76 61 72 29 20 70 76 61 72 2d 6c 73 74 29 x var) pvar-lst)
72c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
72d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
72e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
72f0: 20 20 20 64 65 70 74 68 0a 20 20 20 20 20 20 20 depth.
7300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7320: 20 20 20 20 20 20 20 20 20 20 20 63 61 74 61 2d cata-
7330: 66 75 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 fun.
7340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7360: 20 20 20 20 20 20 63 61 74 61 2d 64 65 66 73 0a cata-defs.
7370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
73a0: 20 20 64 6f 74 74 65 64 2d 76 61 72 73 29 5d 29 dotted-vars)])
73b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
73c0: 20 20 20 20 28 76 61 6c 75 65 73 20 28 77 69 74 (values (wit
73d0: 68 2d 73 79 6e 74 61 78 20 28 5b 61 78 20 61 74 h-syntax ([ax at
73e0: 74 72 2d 65 78 70 5d 0a 20 20 20 20 20 20 20 20 tr-exp].
73f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7410: 20 5b 62 6f 64 79 20 74 65 73 74 73 5d 0a 20 20 [body tests].
7420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7440: 20 20 20 20 20 20 20 5b 66 61 69 6c 2d 74 6f 20 [fail-to
7450: 66 61 69 6c 2d 6b 5d 29 0a 20 20 20 20 20 20 20 fail-k]).
7460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7470: 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 28 6c (syntax (l
7480: 65 74 20 28 5b 62 69 6e 64 69 6e 67 20 28 6d 61 et ([binding (ma
7490: 74 63 68 2d 78 6d 6c 2d 61 74 74 72 69 62 75 74 tch-xml-attribut
74a0: 65 20 27 61 74 61 67 20 61 78 29 5d 29 0a 20 20 e 'atag ax)]).
74b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
74c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
74d0: 20 20 20 20 20 28 69 66 20 62 69 6e 64 69 6e 67 (if binding
74e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
74f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7500: 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 (let
7510: 20 28 5b 76 61 72 20 28 63 61 64 72 20 62 69 6e ([var (cadr bin
7520: 64 69 6e 67 29 5d 29 0a 20 20 20 20 20 20 20 20 ding)]).
7530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7550: 20 20 20 20 20 62 6f 64 79 29 0a 20 20 20 20 20 body).
7560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7580: 20 20 20 20 20 20 28 66 61 69 6c 2d 74 6f 29 29 (fail-to))
7590: 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))).
75a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e n
75b0: 65 77 2d 70 76 61 72 2d 6c 73 74 0a 20 20 20 20 ew-pvar-lst.
75c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
75d0: 20 20 20 20 20 20 20 6e 65 77 2d 63 61 74 61 2d new-cata-
75e0: 64 65 66 73 0a 20 20 20 20 20 20 20 20 20 20 20 defs.
75f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7600: 6e 65 77 2d 64 6f 74 74 65 64 2d 76 61 72 73 29 new-dotted-vars)
7610: 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )].
7620: 20 20 20 5b 28 28 61 74 61 67 20 28 69 20 2e 2e [((atag (i ..
7630: 2e 29 29 20 2e 20 72 73 74 29 0a 20 20 20 20 20 .)) . rst).
7640: 20 20 20 20 20 20 20 20 20 20 20 20 28 69 64 65 (ide
7650: 6e 74 69 66 69 65 72 3f 20 28 73 79 6e 74 61 78 ntifier? (syntax
7660: 20 61 74 61 67 29 29 0a 20 20 20 20 20 20 20 20 atag)).
7670: 20 20 20 20 20 20 20 20 20 28 73 78 6d 6c 2d 6d (sxml-m
7680: 61 74 63 68 2d 73 79 6e 74 61 78 2d 65 72 72 6f atch-syntax-erro
7690: 72 20 22 62 61 64 20 61 74 74 72 69 62 75 74 65 r "bad attribute
76a0: 20 70 61 74 74 65 72 6e 22 0a 20 20 20 20 20 20 pattern".
76b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
76c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
76d0: 20 20 20 20 73 74 78 0a 20 20 20 20 20 20 20 20 stx.
76e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7700: 20 20 28 73 79 6e 74 61 78 20 28 6b 77 64 20 28 (syntax (kwd (
7710: 69 20 2e 2e 2e 29 29 29 29 5d 0a 20 20 20 20 20 i ...))))].
7720: 20 20 20 20 20 20 20 20 20 20 20 5b 28 28 61 74 [((at
7730: 61 67 20 69 29 20 2e 20 72 73 74 29 0a 20 20 20 ag i) . rst).
7740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 (a
7750: 6e 64 20 28 69 64 65 6e 74 69 66 69 65 72 3f 20 nd (identifier?
7760: 28 73 79 6e 74 61 78 20 61 74 61 67 29 29 20 28 (syntax atag)) (
7770: 69 64 65 6e 74 69 66 69 65 72 3f 20 28 73 79 6e identifier? (syn
7780: 74 61 78 20 69 29 29 29 0a 20 20 20 20 20 20 20 tax i))).
7790: 20 20 20 20 20 20 20 20 20 20 28 73 78 6d 6c 2d (sxml-
77a0: 6d 61 74 63 68 2d 73 79 6e 74 61 78 2d 65 72 72 match-syntax-err
77b0: 6f 72 20 22 62 61 64 20 61 74 74 72 69 62 75 74 or "bad attribut
77c0: 65 20 70 61 74 74 65 72 6e 22 0a 20 20 20 20 20 e pattern".
77d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
77e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
77f0: 20 20 20 20 20 73 74 78 0a 20 20 20 20 20 20 20 stx.
7800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7820: 20 20 20 28 73 79 6e 74 61 78 20 28 6b 77 64 20 (syntax (kwd
7830: 69 29 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 i)))].
7840: 20 20 20 20 20 20 5b 28 28 61 74 61 67 20 6c 69 [((atag li
7850: 74 65 72 61 6c 29 20 2e 20 72 73 74 29 0a 20 20 teral) . rst).
7860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
7870: 61 6e 64 20 28 69 64 65 6e 74 69 66 69 65 72 3f and (identifier?
7880: 20 28 73 79 6e 74 61 78 20 61 74 61 67 29 29 20 (syntax atag))
7890: 28 6c 69 74 65 72 61 6c 3f 20 28 73 79 6e 74 61 (literal? (synta
78a0: 78 20 6c 69 74 65 72 61 6c 29 29 29 0a 20 20 20 x literal))).
78b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c (l
78c0: 65 74 2d 76 61 6c 75 65 73 20 28 5b 28 74 65 73 et-values ([(tes
78d0: 74 73 20 6e 65 77 2d 70 76 61 72 2d 6c 73 74 20 ts new-pvar-lst
78e0: 6e 65 77 2d 63 61 74 61 2d 64 65 66 73 20 6e 65 new-cata-defs ne
78f0: 77 2d 64 6f 74 74 65 64 2d 76 61 72 73 29 0a 20 w-dotted-vars).
7900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 (c
7920: 6f 6d 70 69 6c 65 2d 61 74 74 72 2d 6c 69 73 74 ompile-attr-list
7930: 20 28 73 79 6e 74 61 78 20 72 73 74 29 0a 20 20 (syntax rst).
7940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7970: 62 6f 64 79 2d 6c 73 74 0a 20 20 20 20 20 20 20 body-lst.
7980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
79a0: 20 20 20 20 20 20 20 20 20 20 20 61 74 74 72 2d attr-
79b0: 65 78 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 exp.
79c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
79d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
79e0: 20 20 20 20 20 20 62 6f 64 79 2d 65 78 70 0a 20 body-exp.
79f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7a20: 20 28 63 6f 6e 73 20 28 73 79 6e 74 61 78 20 61 (cons (syntax a
7a30: 74 61 67 29 20 61 74 74 72 2d 6b 65 79 2d 6c 73 tag) attr-key-ls
7a40: 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 t).
7a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7a70: 20 20 20 20 20 6e 65 78 74 70 0a 20 20 20 20 20 nextp.
7a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61 69 fai
7ab0: 6c 2d 6b 0a 20 20 20 20 20 20 20 20 20 20 20 20 l-k.
7ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7ae0: 20 20 20 20 20 20 70 76 61 72 2d 6c 73 74 0a 20 pvar-lst.
7af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7b20: 20 64 65 70 74 68 0a 20 20 20 20 20 20 20 20 20 depth.
7b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7b50: 20 20 20 20 20 20 20 20 20 63 61 74 61 2d 66 75 cata-fu
7b60: 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 n.
7b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7b90: 20 20 20 20 63 61 74 61 2d 64 65 66 73 0a 20 20 cata-defs.
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7bd0: 64 6f 74 74 65 64 2d 76 61 72 73 29 5d 29 0a 20 dotted-vars)]).
7be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7bf0: 20 20 28 76 61 6c 75 65 73 20 28 77 69 74 68 2d (values (with-
7c00: 73 79 6e 74 61 78 20 28 5b 61 78 20 61 74 74 72 syntax ([ax attr
7c10: 2d 65 78 70 5d 0a 20 20 20 20 20 20 20 20 20 20 -exp].
7c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [
7c40: 62 6f 64 79 20 74 65 73 74 73 5d 0a 20 20 20 20 body tests].
7c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7c70: 20 20 20 20 20 5b 66 61 69 6c 2d 74 6f 20 66 61 [fail-to fa
7c80: 69 6c 2d 6b 5d 29 0a 20 20 20 20 20 20 20 20 20 il-k]).
7c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7ca0: 20 20 20 20 28 73 79 6e 74 61 78 20 28 6c 65 74 (syntax (let
7cb0: 20 28 5b 62 69 6e 64 69 6e 67 20 28 6d 61 74 63 ([binding (matc
7cc0: 68 2d 78 6d 6c 2d 61 74 74 72 69 62 75 74 65 20 h-xml-attribute
7cd0: 27 61 74 61 67 20 61 78 29 5d 29 0a 20 20 20 20 'atag ax)]).
7ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7d00: 20 20 20 28 69 66 20 62 69 6e 64 69 6e 67 0a 20 (if binding.
7d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7d30: 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 65 (if (e
7d40: 71 75 61 6c 3f 20 28 63 61 64 72 20 62 69 6e 64 qual? (cadr bind
7d50: 69 6e 67 29 20 6c 69 74 65 72 61 6c 29 0a 20 20 ing) literal).
7d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 64 bod
7d90: 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 y.
7da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7dc0: 20 28 66 61 69 6c 2d 74 6f 29 29 0a 20 20 20 20 (fail-to)).
7dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7df0: 20 20 20 20 20 20 20 28 66 61 69 6c 2d 74 6f 29 (fail-to)
7e00: 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 )))).
7e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7e20: 6e 65 77 2d 70 76 61 72 2d 6c 73 74 0a 20 20 20 new-pvar-lst.
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7e40: 20 20 20 20 20 20 20 20 6e 65 77 2d 63 61 74 61 new-cata
7e50: 2d 64 65 66 73 0a 20 20 20 20 20 20 20 20 20 20 -defs.
7e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7e70: 20 6e 65 77 2d 64 6f 74 74 65 64 2d 76 61 72 73 new-dotted-vars
7e80: 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))].
7e90: 20 20 20 20 5b 28 29 0a 20 20 20 20 20 20 20 20 [().
7ea0: 20 20 20 20 20 20 20 20 20 28 63 6f 6d 70 69 6c (compil
7eb0: 65 2d 69 74 65 6d 2d 6c 69 73 74 20 62 6f 64 79 e-item-list body
7ec0: 2d 6c 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 -lst.
7ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7ee0: 20 20 20 20 20 20 20 20 20 62 6f 64 79 2d 65 78 body-ex
7ef0: 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 p.
7f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7f10: 20 20 20 20 20 20 6e 65 78 74 70 0a 20 20 20 20 nextp.
7f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7f40: 66 61 69 6c 2d 6b 0a 20 20 20 20 20 20 20 20 20 fail-k.
7f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7f60: 20 20 20 20 20 20 20 20 20 20 20 23 74 0a 20 20 #t.
7f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7f90: 20 20 70 76 61 72 2d 6c 73 74 0a 20 20 20 20 20 pvar-lst.
7fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
7fc0: 65 70 74 68 0a 20 20 20 20 20 20 20 20 20 20 20 epth.
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
7fe0: 20 20 20 20 20 20 20 20 20 63 61 74 61 2d 66 75 cata-fu
7ff0: 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 n.
8000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8010: 20 20 20 20 20 20 63 61 74 61 2d 64 65 66 73 0a cata-defs.
8020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8040: 20 20 20 20 64 6f 74 74 65 64 2d 76 61 72 73 29 dotted-vars)
8050: 5d 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 ]))].
8060: 5b 63 6f 6d 70 69 6c 65 2d 69 74 65 6d 2d 6c 69 [compile-item-li
8070: 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 st. (
8080: 6c 61 6d 62 64 61 20 28 6c 73 74 20 65 78 70 20 lambda (lst exp
8090: 6e 65 78 74 70 20 66 61 69 6c 2d 6b 20 65 6c 6c nextp fail-k ell
80a0: 69 70 73 69 73 2d 61 6c 6c 6f 77 65 64 3f 20 70 ipsis-allowed? p
80b0: 76 61 72 2d 6c 73 74 20 64 65 70 74 68 20 63 61 var-lst depth ca
80c0: 74 61 2d 66 75 6e 20 63 61 74 61 2d 64 65 66 73 ta-fun cata-defs
80d0: 20 64 6f 74 74 65 64 2d 76 61 72 73 29 0a 20 20 dotted-vars).
80e0: 20 20 20 20 20 20 20 20 20 20 20 20 28 73 79 6e (syn
80f0: 74 61 78 2d 63 61 73 65 20 6c 73 74 20 28 75 6e tax-case lst (un
8100: 71 75 6f 74 65 20 2d 3e 29 0a 20 20 20 20 20 20 quote ->).
8110: 20 20 20 20 20 20 20 20 20 20 5b 28 29 20 28 63 [() (c
8120: 6f 6d 70 69 6c 65 2d 65 6e 64 2d 65 6c 65 6d 65 ompile-end-eleme
8130: 6e 74 20 65 78 70 20 6e 65 78 74 70 20 66 61 69 nt exp nextp fai
8140: 6c 2d 6b 20 70 76 61 72 2d 6c 73 74 20 63 61 74 l-k pvar-lst cat
8150: 61 2d 64 65 66 73 20 64 6f 74 74 65 64 2d 76 61 a-defs dotted-va
8160: 72 73 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 rs)].
8170: 20 20 20 20 20 5b 28 75 6e 71 75 6f 74 65 20 76 [(unquote v
8180: 61 72 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 ar).
8190: 20 20 20 20 20 28 69 64 65 6e 74 69 66 69 65 72 (identifier
81a0: 3f 20 28 73 79 6e 74 61 78 20 76 61 72 29 29 0a ? (syntax var)).
81b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
81c0: 20 28 69 66 20 28 6e 6f 74 20 65 6c 6c 69 70 73 (if (not ellips
81d0: 69 73 2d 61 6c 6c 6f 77 65 64 3f 29 0a 20 20 20 is-allowed?).
81e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
81f0: 20 20 28 73 78 6d 6c 2d 6d 61 74 63 68 2d 73 79 (sxml-match-sy
8200: 6e 74 61 78 2d 65 72 72 6f 72 20 22 69 6d 70 72 ntax-error "impr
8210: 6f 70 65 72 20 6c 69 73 74 20 70 61 74 74 65 72 oper list patter
8220: 6e 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 69 6e n not allowed in
8230: 20 74 68 69 73 20 63 6f 6e 74 65 78 74 22 0a 20 this context".
8240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8260: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 78 stx
8270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
8280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
82a0: 73 79 6e 74 61 78 20 64 6f 74 73 29 29 0a 20 20 syntax dots)).
82b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
82c0: 20 20 20 28 6c 65 74 2d 76 61 6c 75 65 73 20 28 (let-values (
82d0: 5b 28 6e 65 78 74 2d 74 65 73 74 73 20 6e 65 77 [(next-tests new
82e0: 2d 70 76 61 72 2d 6c 73 74 20 6e 65 77 2d 63 61 -pvar-lst new-ca
82f0: 74 61 2d 64 65 66 73 20 6e 65 77 2d 64 6f 74 74 ta-defs new-dott
8300: 65 64 2d 76 61 72 73 29 0a 20 20 20 20 20 20 20 ed-vars).
8310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8320: 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 65 78 (nex
8330: 74 70 20 28 61 64 64 2d 70 61 74 2d 76 61 72 20 tp (add-pat-var
8340: 28 73 79 6e 74 61 78 20 76 61 72 29 20 70 76 61 (syntax var) pva
8350: 72 2d 6c 73 74 29 20 63 61 74 61 2d 64 65 66 73 r-lst) cata-defs
8360: 20 64 6f 74 74 65 64 2d 76 61 72 73 29 5d 29 0a dotted-vars)]).
8370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8380: 20 20 20 20 20 20 20 28 76 61 6c 75 65 73 20 28 (values (
8390: 77 69 74 68 2d 73 79 6e 74 61 78 20 28 5b 78 20 with-syntax ([x
83a0: 65 78 70 5d 0a 20 20 20 20 20 20 20 20 20 20 20 exp].
83b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
83c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
83d0: 20 20 5b 62 6f 64 79 20 6e 65 78 74 2d 74 65 73 [body next-tes
83e0: 74 73 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 ts]).
83f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8400: 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 28 6c (syntax (l
8410: 65 74 20 28 5b 76 61 72 20 78 5d 29 20 62 6f 64 et ([var x]) bod
8420: 79 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 y))).
8430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8440: 20 20 20 20 6e 65 77 2d 70 76 61 72 2d 6c 73 74 new-pvar-lst
8450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
8460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8470: 6e 65 77 2d 63 61 74 61 2d 64 65 66 73 0a 20 20 new-cata-defs.
8480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8490: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 new
84a0: 2d 64 6f 74 74 65 64 2d 76 61 72 73 29 29 29 5d -dotted-vars)))]
84b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
84c0: 20 5b 28 75 6e 71 75 6f 74 65 20 5b 63 61 74 61 [(unquote [cata
84d0: 20 2d 3e 20 63 76 61 72 20 2e 2e 2e 5d 29 0a 20 -> cvar ...]).
84e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
84f0: 28 69 66 20 28 6e 6f 74 20 65 6c 6c 69 70 73 69 (if (not ellipsi
8500: 73 2d 61 6c 6c 6f 77 65 64 3f 29 0a 20 20 20 20 s-allowed?).
8510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8520: 20 28 73 78 6d 6c 2d 6d 61 74 63 68 2d 73 79 6e (sxml-match-syn
8530: 74 61 78 2d 65 72 72 6f 72 20 22 69 6d 70 72 6f tax-error "impro
8540: 70 65 72 20 6c 69 73 74 20 70 61 74 74 65 72 6e per list pattern
8550: 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 69 6e 20 not allowed in
8560: 74 68 69 73 20 63 6f 6e 74 65 78 74 22 0a 20 20 this context".
8570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8590: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 78 0a stx.
85a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
85b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
85c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 (s
85d0: 79 6e 74 61 78 20 64 6f 74 73 29 29 0a 20 20 20 yntax dots)).
85e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
85f0: 20 20 28 6c 65 74 20 28 5b 63 74 65 6d 70 20 28 (let ([ctemp (
8600: 63 61 72 20 28 67 65 6e 65 72 61 74 65 2d 74 65 car (generate-te
8610: 6d 70 6f 72 61 72 69 65 73 20 28 73 79 6e 74 61 mporaries (synta
8620: 78 20 28 5b 63 76 61 72 20 2e 2e 2e 5d 29 29 29 x ([cvar ...])))
8630: 29 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 )]).
8640: 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 2d (let-
8650: 76 61 6c 75 65 73 20 28 5b 28 6e 65 78 74 2d 74 values ([(next-t
8660: 65 73 74 73 20 6e 65 77 2d 70 76 61 72 2d 6c 73 ests new-pvar-ls
8670: 74 20 6e 65 77 2d 63 61 74 61 2d 64 65 66 73 20 t new-cata-defs
8680: 6e 65 77 2d 64 6f 74 74 65 64 2d 76 61 72 73 29 new-dotted-vars)
8690: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
86a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
86b0: 20 20 20 20 20 20 28 6e 65 78 74 70 20 28 61 64 (nextp (ad
86c0: 64 2d 70 61 74 2d 76 61 72 20 63 74 65 6d 70 20 d-pat-var ctemp
86d0: 70 76 61 72 2d 6c 73 74 29 0a 20 20 20 20 20 20 pvar-lst).
86e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
86f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8700: 20 20 20 20 20 20 28 61 64 64 2d 63 61 74 61 2d (add-cata-
8710: 64 65 66 20 64 65 70 74 68 0a 20 20 20 20 20 20 def depth.
8720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8750: 20 20 20 20 28 73 79 6e 74 61 78 20 5b 63 76 61 (syntax [cva
8760: 72 20 2e 2e 2e 5d 29 0a 20 20 20 20 20 20 20 20 r ...]).
8770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
87a0: 20 20 28 73 79 6e 74 61 78 20 63 61 74 61 29 0a (syntax cata).
87b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
87c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
87d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
87e0: 20 20 20 20 20 20 20 20 20 20 63 74 65 6d 70 0a ctemp.
87f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8820: 20 20 20 20 20 20 20 20 20 20 63 61 74 61 2d 64 cata-d
8830: 65 66 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 efs).
8840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8860: 20 64 6f 74 74 65 64 2d 76 61 72 73 29 5d 29 0a dotted-vars)]).
8870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8880: 20 20 20 20 20 20 20 20 20 28 76 61 6c 75 65 73 (values
8890: 20 28 77 69 74 68 2d 73 79 6e 74 61 78 20 28 5b (with-syntax ([
88a0: 63 74 20 63 74 65 6d 70 5d 0a 20 20 20 20 20 20 ct ctemp].
88b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
88c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
88d0: 20 20 20 20 20 20 20 20 20 5b 78 20 65 78 70 5d [x exp]
88e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
88f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8910: 5b 62 6f 64 79 20 6e 65 78 74 2d 74 65 73 74 73 [body next-tests
8920: 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]).
8930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8940: 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 28 6c (syntax (l
8950: 65 74 20 28 5b 63 74 20 78 5d 29 20 62 6f 64 79 et ([ct x]) body
8960: 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))).
8970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8980: 20 20 20 20 20 6e 65 77 2d 70 76 61 72 2d 6c 73 new-pvar-ls
8990: 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 t.
89a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
89b0: 20 20 20 6e 65 77 2d 63 61 74 61 2d 64 65 66 73 new-cata-defs
89c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
89d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
89e0: 20 20 6e 65 77 2d 64 6f 74 74 65 64 2d 76 61 72 new-dotted-var
89f0: 73 29 29 29 29 5d 0a 20 20 20 20 20 20 20 20 20 s))))].
8a00: 20 20 20 20 20 20 20 5b 28 75 6e 71 75 6f 74 65 [(unquote
8a10: 20 5b 63 76 61 72 20 2e 2e 2e 5d 29 0a 20 20 20 [cvar ...]).
8a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c (l
8a30: 65 74 20 28 5b 63 74 65 6d 70 20 28 63 61 72 20 et ([ctemp (car
8a40: 28 67 65 6e 65 72 61 74 65 2d 74 65 6d 70 6f 72 (generate-tempor
8a50: 61 72 69 65 73 20 28 73 79 6e 74 61 78 20 28 5b aries (syntax ([
8a60: 63 76 61 72 20 2e 2e 2e 5d 29 29 29 29 5d 29 0a cvar ...]))))]).
8a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8a80: 20 20 20 28 69 66 20 28 6e 6f 74 20 63 61 74 61 (if (not cata
8a90: 2d 66 75 6e 29 0a 20 20 20 20 20 20 20 20 20 20 -fun).
8aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 78 (sx
8ab0: 6d 6c 2d 6d 61 74 63 68 2d 73 79 6e 74 61 78 2d ml-match-syntax-
8ac0: 65 72 72 6f 72 20 22 73 78 6d 6c 2d 6d 61 74 63 error "sxml-matc
8ad0: 68 20 70 61 74 74 65 72 6e 3a 20 63 61 74 61 6d h pattern: catam
8ae0: 6f 72 70 68 69 73 6d 20 6e 6f 74 20 61 6c 6c 6f orphism not allo
8af0: 77 65 64 20 69 6e 20 74 68 69 73 20 63 6f 6e 74 wed in this cont
8b00: 65 78 74 22 0a 20 20 20 20 20 20 20 20 20 20 20 ext".
8b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8b30: 20 20 20 20 20 73 74 78 0a 20 20 20 20 20 20 20 stx.
8b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8b60: 20 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 (syntax
8b70: 20 5b 63 76 61 72 20 2e 2e 2e 5d 29 29 29 0a 20 [cvar ...]))).
8b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8b90: 20 20 28 6c 65 74 2d 76 61 6c 75 65 73 20 28 5b (let-values ([
8ba0: 28 6e 65 78 74 2d 74 65 73 74 73 20 6e 65 77 2d (next-tests new-
8bb0: 70 76 61 72 2d 6c 73 74 20 6e 65 77 2d 63 61 74 pvar-lst new-cat
8bc0: 61 2d 64 65 66 73 20 6e 65 77 2d 64 6f 74 74 65 a-defs new-dotte
8bd0: 64 2d 76 61 72 73 29 0a 20 20 20 20 20 20 20 20 d-vars).
8be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8bf0: 20 20 20 20 20 20 20 20 20 28 6e 65 78 74 70 20 (nextp
8c00: 28 61 64 64 2d 70 61 74 2d 76 61 72 20 63 74 65 (add-pat-var cte
8c10: 6d 70 20 70 76 61 72 2d 6c 73 74 29 0a 20 20 20 mp pvar-lst).
8c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8c40: 20 20 20 20 20 28 61 64 64 2d 63 61 74 61 2d 64 (add-cata-d
8c50: 65 66 20 64 65 70 74 68 0a 20 20 20 20 20 20 20 ef depth.
8c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
8c90: 73 79 6e 74 61 78 20 5b 63 76 61 72 20 2e 2e 2e syntax [cvar ...
8ca0: 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]).
8cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8cd0: 20 20 20 20 20 20 20 20 20 63 61 74 61 2d 66 75 cata-fu
8ce0: 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 n.
8cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8d10: 20 20 20 20 20 20 20 20 63 74 65 6d 70 0a 20 20 ctemp.
8d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8d50: 20 20 20 20 63 61 74 61 2d 64 65 66 73 29 0a 20 cata-defs).
8d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8d80: 20 20 20 20 20 20 20 64 6f 74 74 65 64 2d 76 61 dotted-va
8d90: 72 73 29 5d 29 0a 20 20 20 20 20 20 20 20 20 20 rs)]).
8da0: 20 20 20 20 20 20 20 20 20 20 20 28 76 61 6c 75 (valu
8db0: 65 73 20 28 77 69 74 68 2d 73 79 6e 74 61 78 20 es (with-syntax
8dc0: 28 5b 63 74 20 63 74 65 6d 70 5d 0a 20 20 20 20 ([ct ctemp].
8dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8df0: 20 20 20 20 20 20 20 5b 78 20 65 78 70 5d 0a 20 [x exp].
8e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8e20: 20 20 20 20 20 20 20 20 20 20 5b 62 6f 64 79 20 [body
8e30: 6e 65 78 74 2d 74 65 73 74 73 5d 29 0a 20 20 20 next-tests]).
8e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8e50: 20 20 20 20 20 20 20 20 20 20 20 20 28 73 79 6e (syn
8e60: 74 61 78 20 28 6c 65 74 20 28 5b 63 74 20 78 5d tax (let ([ct x]
8e70: 29 20 62 6f 64 79 29 29 29 0a 20 20 20 20 20 20 ) body))).
8e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8e90: 20 20 20 20 20 20 20 6e 65 77 2d 70 76 61 72 2d new-pvar-
8ea0: 6c 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 lst.
8eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8ec0: 20 6e 65 77 2d 63 61 74 61 2d 64 65 66 73 0a 20 new-cata-defs.
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8ee0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 2d new-
8ef0: 64 6f 74 74 65 64 2d 76 61 72 73 29 29 29 5d 0a dotted-vars)))].
8f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8f10: 5b 28 69 74 65 6d 20 64 6f 74 73 20 2e 20 72 73 [(item dots . rs
8f20: 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 t).
8f30: 20 20 20 20 28 65 6c 6c 69 70 73 69 73 3f 20 28 (ellipsis? (
8f40: 73 79 6e 74 61 78 20 64 6f 74 73 29 29 0a 20 20 syntax dots)).
8f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
8f60: 69 66 20 28 6e 6f 74 20 65 6c 6c 69 70 73 69 73 if (not ellipsis
8f70: 2d 61 6c 6c 6f 77 65 64 3f 29 0a 20 20 20 20 20 -allowed?).
8f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8f90: 28 73 78 6d 6c 2d 6d 61 74 63 68 2d 73 79 6e 74 (sxml-match-synt
8fa0: 61 78 2d 65 72 72 6f 72 20 22 65 6c 6c 69 70 73 ax-error "ellips
8fb0: 65 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 69 es not allowed i
8fc0: 6e 20 74 68 69 73 20 63 6f 6e 74 65 78 74 22 0a n this context".
8fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
8ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 st
9000: 78 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 x.
9010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9030: 28 73 79 6e 74 61 78 20 64 6f 74 73 29 29 0a 20 (syntax dots)).
9040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9050: 20 20 20 20 28 63 6f 6d 70 69 6c 65 2d 64 6f 74 (compile-dot
9060: 74 65 64 2d 70 61 74 74 65 72 6e 2d 6c 69 73 74 ted-pattern-list
9070: 20 28 73 79 6e 74 61 78 20 69 74 65 6d 29 0a 20 (syntax item).
9080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
90a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
90b0: 20 28 73 79 6e 74 61 78 20 72 73 74 29 0a 20 20 (syntax rst).
90c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
90d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
90e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
90f0: 65 78 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 exp.
9100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9120: 20 20 20 20 20 20 6e 65 78 74 70 0a 20 20 20 20 nextp.
9130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61 fa
9160: 69 6c 2d 6b 0a 20 20 20 20 20 20 20 20 20 20 20 il-k.
9170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9190: 20 20 20 20 20 20 20 70 76 61 72 2d 6c 73 74 0a pvar-lst.
91a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
91b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
91c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
91d0: 20 20 64 65 70 74 68 0a 20 20 20 20 20 20 20 20 depth.
91e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
91f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9200: 20 20 20 20 20 20 20 20 20 20 63 61 74 61 2d 66 cata-f
9210: 75 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 un.
9220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9240: 20 20 20 20 20 63 61 74 61 2d 64 65 66 73 0a 20 cata-defs.
9250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9280: 20 64 6f 74 74 65 64 2d 76 61 72 73 29 29 5d 0a dotted-vars))].
9290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
92a0: 5b 28 69 74 65 6d 20 2e 20 72 73 74 29 0a 20 20 [(item . rst).
92b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
92c0: 63 6f 6d 70 69 6c 65 2d 69 74 65 6d 20 28 73 79 compile-item (sy
92d0: 6e 74 61 78 20 69 74 65 6d 29 0a 20 20 20 20 20 ntax item).
92e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
92f0: 20 20 20 20 20 20 20 20 20 20 65 78 70 0a 20 20 exp.
9300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9310: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 (la
9320: 6d 62 64 61 20 28 6e 65 77 2d 65 78 70 20 6e 65 mbda (new-exp ne
9330: 77 2d 70 76 61 72 2d 6c 73 74 20 6e 65 77 2d 63 w-pvar-lst new-c
9340: 61 74 61 2d 64 65 66 73 20 6e 65 77 2d 64 6f 74 ata-defs new-dot
9350: 74 65 64 2d 76 61 72 73 29 0a 20 20 20 20 20 20 ted-vars).
9360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9370: 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6d 70 (comp
9380: 69 6c 65 2d 69 74 65 6d 2d 6c 69 73 74 20 28 73 ile-item-list (s
9390: 79 6e 74 61 78 20 72 73 74 29 0a 20 20 20 20 20 yntax rst).
93a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
93b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
93c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e n
93d0: 65 77 2d 65 78 70 0a 20 20 20 20 20 20 20 20 20 ew-exp.
93e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
93f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9400: 20 20 20 20 20 20 20 20 20 20 20 6e 65 78 74 70 nextp
9410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
9420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9440: 20 20 20 20 20 66 61 69 6c 2d 6b 0a 20 20 20 20 fail-k.
9450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9480: 65 6c 6c 69 70 73 69 73 2d 61 6c 6c 6f 77 65 64 ellipsis-allowed
9490: 3f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ?.
94a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
94b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
94c0: 20 20 20 20 20 20 6e 65 77 2d 70 76 61 72 2d 6c new-pvar-l
94d0: 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 st.
94e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
94f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9500: 20 20 20 20 20 20 20 64 65 70 74 68 0a 20 20 20 depth.
9510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9540: 20 63 61 74 61 2d 66 75 6e 0a 20 20 20 20 20 20 cata-fun.
9550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 ne
9580: 77 2d 63 61 74 61 2d 64 65 66 73 0a 20 20 20 20 w-cata-defs.
9590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
95a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
95b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
95c0: 6e 65 77 2d 64 6f 74 74 65 64 2d 76 61 72 73 29 new-dotted-vars)
95d0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
95e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
95f0: 20 66 61 69 6c 2d 6b 0a 20 20 20 20 20 20 20 20 fail-k.
9600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9610: 20 20 20 20 20 20 20 70 76 61 72 2d 6c 73 74 0a pvar-lst.
9620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
9640: 65 70 74 68 0a 20 20 20 20 20 20 20 20 20 20 20 epth.
9650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9660: 20 20 20 20 63 61 74 61 2d 66 75 6e 0a 20 20 20 cata-fun.
9670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9680: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 61 cata
9690: 2d 64 65 66 73 0a 20 20 20 20 20 20 20 20 20 20 -defs.
96a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
96b0: 20 20 20 20 20 64 6f 74 74 65 64 2d 76 61 72 73 dotted-vars
96c0: 29 5d 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 )]))].
96d0: 20 5b 63 6f 6d 70 69 6c 65 2d 64 6f 74 74 65 64 [compile-dotted
96e0: 2d 70 61 74 74 65 72 6e 2d 6c 69 73 74 0a 20 20 -pattern-list.
96f0: 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 (lambd
9700: 61 20 28 69 74 65 6d 0a 20 20 20 20 20 20 20 20 a (item.
9710: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 61 69 tai
9720: 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 l.
9730: 20 20 20 20 20 20 20 65 78 70 0a 20 20 20 20 20 exp.
9740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9750: 6e 65 78 74 70 0a 20 20 20 20 20 20 20 20 20 20 nextp.
9760: 20 20 20 20 20 20 20 20 20 20 20 66 61 69 6c 2d fail-
9770: 6b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 k.
9780: 20 20 20 20 20 20 20 70 76 61 72 2d 6c 73 74 0a pvar-lst.
9790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
97a0: 20 20 20 20 20 64 65 70 74 68 0a 20 20 20 20 20 depth.
97b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
97c0: 63 61 74 61 2d 66 75 6e 0a 20 20 20 20 20 20 20 cata-fun.
97d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 ca
97e0: 74 61 2d 64 65 66 73 0a 20 20 20 20 20 20 20 20 ta-defs.
97f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 74 dot
9800: 74 65 64 2d 76 61 72 73 29 0a 20 20 20 20 20 20 ted-vars).
9810: 20 20 20 20 20 20 20 20 28 6c 65 74 2d 76 61 6c (let-val
9820: 75 65 73 20 28 5b 28 74 61 69 6c 2d 74 65 73 74 ues ([(tail-test
9830: 73 20 74 61 69 6c 2d 70 76 61 72 2d 6c 73 74 20 s tail-pvar-lst
9840: 74 61 69 6c 2d 63 61 74 61 2d 64 65 66 73 20 74 tail-cata-defs t
9850: 61 69 6c 2d 64 6f 74 74 65 64 2d 76 61 72 73 29 ail-dotted-vars)
9860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
9870: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f (co
9880: 6d 70 69 6c 65 2d 69 74 65 6d 2d 6c 69 73 74 20 mpile-item-list
9890: 74 61 69 6c 0a 20 20 20 20 20 20 20 20 20 20 20 tail.
98a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
98b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
98c0: 20 20 20 20 28 73 79 6e 74 61 78 20 6c 73 74 29 (syntax lst)
98d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
98e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
98f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9900: 28 6c 61 6d 62 64 61 20 28 6e 65 77 2d 70 76 61 (lambda (new-pva
9910: 72 2d 6c 73 74 20 6e 65 77 2d 63 61 74 61 2d 64 r-lst new-cata-d
9920: 65 66 73 20 6e 65 77 2d 64 6f 74 74 65 64 2d 76 efs new-dotted-v
9930: 61 72 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 ars).
9940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9960: 20 20 20 20 20 20 28 76 61 6c 75 65 73 20 28 77 (values (w
9970: 69 74 68 2d 73 79 6e 74 61 78 20 28 5b 28 6e 70 ith-syntax ([(np
9980: 76 20 2e 2e 2e 29 20 6e 65 77 2d 70 76 61 72 2d v ...) new-pvar-
9990: 6c 73 74 5d 29 0a 20 20 20 20 20 20 20 20 20 20 lst]).
99a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
99b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
99c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
99d0: 20 28 73 79 6e 74 61 78 20 28 76 61 6c 75 65 73 (syntax (values
99e0: 20 23 74 20 6e 70 76 20 2e 2e 2e 29 29 29 0a 20 #t npv ...))).
99f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9a20: 20 20 20 20 20 20 20 20 6e 65 77 2d 70 76 61 72 new-pvar
9a30: 2d 6c 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 -lst.
9a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 ne
9a70: 77 2d 63 61 74 61 2d 64 65 66 73 0a 20 20 20 20 w-cata-defs.
9a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9ab0: 20 20 20 20 20 6e 65 77 2d 64 6f 74 74 65 64 2d new-dotted-
9ac0: 76 61 72 73 29 29 0a 20 20 20 20 20 20 20 20 20 vars)).
9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9af0: 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 66 61 (syntax fa
9b00: 69 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 il).
9b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9b30: 20 20 20 23 66 0a 20 20 20 20 20 20 20 20 20 20 #f.
9b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9b60: 20 20 20 20 20 27 28 29 0a 20 20 20 20 20 20 20 '().
9b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9b90: 20 20 20 20 20 20 20 20 64 65 70 74 68 0a 20 20 depth.
9ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 27 28 29 '()
9bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
9be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9c00: 27 28 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 '().
9c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9c30: 20 20 20 64 6f 74 74 65 64 2d 76 61 72 73 29 5d dotted-vars)]
9c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
9c50: 20 20 20 20 20 20 20 20 20 20 20 20 5b 28 69 74 [(it
9c60: 65 6d 2d 74 65 73 74 73 20 69 74 65 6d 2d 70 76 em-tests item-pv
9c70: 61 72 2d 6c 73 74 20 69 74 65 6d 2d 63 61 74 61 ar-lst item-cata
9c80: 2d 64 65 66 73 20 69 74 65 6d 2d 64 6f 74 74 65 -defs item-dotte
9c90: 64 2d 76 61 72 73 29 0a 20 20 20 20 20 20 20 20 d-vars).
9ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9cb0: 20 20 20 20 28 63 6f 6d 70 69 6c 65 2d 69 74 65 (compile-ite
9cc0: 6d 20 69 74 65 6d 0a 20 20 20 20 20 20 20 20 20 m item.
9cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9cf0: 20 28 73 79 6e 74 61 78 20 6c 73 74 29 0a 20 20 (syntax lst).
9d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9d20: 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 (lambda
9d30: 28 6e 65 77 2d 65 78 70 20 6e 65 77 2d 70 76 61 (new-exp new-pva
9d40: 72 2d 6c 73 74 20 6e 65 77 2d 63 61 74 61 2d 64 r-lst new-cata-d
9d50: 65 66 73 20 6e 65 77 2d 64 6f 74 74 65 64 2d 76 efs new-dotted-v
9d60: 61 72 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 ars).
9d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9d90: 20 28 76 61 6c 75 65 73 20 28 77 69 74 68 2d 73 (values (with-s
9da0: 79 6e 74 61 78 20 28 5b 28 6e 70 76 20 2e 2e 2e yntax ([(npv ...
9db0: 29 20 6e 65 77 2d 70 76 61 72 2d 6c 73 74 5d 29 ) new-pvar-lst])
9dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
9dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9df0: 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 28 (syntax (
9e00: 76 61 6c 75 65 73 20 23 74 20 28 63 64 72 20 6c values #t (cdr l
9e10: 73 74 29 20 6e 70 76 20 2e 2e 2e 29 29 29 0a 20 st) npv ...))).
9e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9e50: 20 20 20 6e 65 77 2d 70 76 61 72 2d 6c 73 74 0a new-pvar-lst.
9e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9e90: 20 20 20 20 6e 65 77 2d 63 61 74 61 2d 64 65 66 new-cata-def
9ea0: 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 s.
9eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9ed0: 20 20 20 20 20 20 6e 65 77 2d 64 6f 74 74 65 64 new-dotted
9ee0: 2d 76 61 72 73 29 29 0a 20 20 20 20 20 20 20 20 -vars)).
9ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9f10: 20 20 28 73 79 6e 74 61 78 20 66 61 69 6c 29 0a (syntax fail).
9f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9f40: 20 20 20 20 20 20 20 20 20 20 27 28 29 0a 20 20 '().
9f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9f70: 20 20 20 20 20 20 20 20 28 2b 20 31 20 64 65 70 (+ 1 dep
9f80: 74 68 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 th).
9f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 ca
9fb0: 74 61 2d 66 75 6e 0a 20 20 20 20 20 20 20 20 20 ta-fun.
9fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
9fe0: 20 27 28 29 0a 20 20 20 20 20 20 20 20 20 20 20 '().
9ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
a010: 6f 74 74 65 64 2d 76 61 72 73 29 5d 29 0a 20 20 otted-vars)]).
a020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 ;
a030: 6d 6f 72 65 20 68 65 72 65 3a 20 63 68 65 63 6b more here: check
a040: 20 66 6f 72 20 64 75 70 6c 69 63 61 74 65 20 70 for duplicate p
a050: 61 74 2d 76 61 72 73 2c 20 63 61 74 61 2d 64 65 at-vars, cata-de
a060: 66 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 fs.
a070: 20 20 20 28 6c 65 74 2d 76 61 6c 75 65 73 20 28 (let-values (
a080: 5b 28 66 69 6e 61 6c 2d 74 65 73 74 73 20 66 69 [(final-tests fi
a090: 6e 61 6c 2d 70 76 61 72 2d 6c 73 74 20 66 69 6e nal-pvar-lst fin
a0a0: 61 6c 2d 63 61 74 61 2d 64 65 66 73 20 66 69 6e al-cata-defs fin
a0b0: 61 6c 2d 64 6f 74 74 65 64 2d 76 61 72 73 29 0a al-dotted-vars).
a0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e (n
a0e0: 65 78 74 70 20 28 61 70 70 65 6e 64 20 74 61 69 extp (append tai
a0f0: 6c 2d 70 76 61 72 2d 6c 73 74 20 69 74 65 6d 2d l-pvar-lst item-
a100: 70 76 61 72 2d 6c 73 74 20 70 76 61 72 2d 6c 73 pvar-lst pvar-ls
a110: 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 t).
a120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a130: 20 20 20 20 20 20 20 20 28 61 70 70 65 6e 64 20 (append
a140: 74 61 69 6c 2d 63 61 74 61 2d 64 65 66 73 20 69 tail-cata-defs i
a150: 74 65 6d 2d 63 61 74 61 2d 64 65 66 73 20 63 61 tem-cata-defs ca
a160: 74 61 2d 64 65 66 73 29 0a 20 20 20 20 20 20 20 ta-defs).
a170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 61 (a
a190: 70 70 65 6e 64 20 69 74 65 6d 2d 70 76 61 72 2d ppend item-pvar-
a1a0: 6c 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 lst.
a1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a1d0: 20 28 63 61 74 61 2d 64 65 66 73 2d 3e 70 76 61 (cata-defs->pva
a1e0: 72 2d 6c 73 74 20 69 74 65 6d 2d 63 61 74 61 2d r-lst item-cata-
a1f0: 64 65 66 73 29 0a 20 20 20 20 20 20 20 20 20 20 defs).
a200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a220: 20 20 20 74 61 69 6c 2d 64 6f 74 74 65 64 2d 76 tail-dotted-v
a230: 61 72 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 ars.
a240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a260: 20 64 6f 74 74 65 64 2d 76 61 72 73 29 29 5d 29 dotted-vars))])
a270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
a280: 20 20 20 28 6c 65 74 20 28 5b 74 65 6d 70 2d 69 (let ([temp-i
a290: 74 65 6d 2d 70 76 61 72 2d 6c 73 74 20 28 67 65 tem-pvar-lst (ge
a2a0: 6e 65 72 61 74 65 2d 74 65 6d 70 6f 72 61 72 69 nerate-temporari
a2b0: 65 73 20 69 74 65 6d 2d 70 76 61 72 2d 6c 73 74 es item-pvar-lst
a2c0: 29 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 )]).
a2d0: 20 20 20 20 20 20 20 20 28 76 61 6c 75 65 73 0a (values.
a2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a2f0: 20 20 20 20 20 28 77 69 74 68 2d 73 79 6e 74 61 (with-synta
a300: 78 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 x.
a310: 20 20 20 20 20 20 20 20 20 20 20 28 5b 78 20 65 ([x e
a320: 78 70 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 xp].
a330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 [f
a340: 61 69 6c 2d 74 6f 20 66 61 69 6c 2d 6b 5d 0a 20 ail-to fail-k].
a350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a360: 20 20 20 20 20 20 20 20 20 5b 74 61 69 6c 2d 62 [tail-b
a370: 6f 64 79 20 74 61 69 6c 2d 74 65 73 74 73 5d 0a ody tail-tests].
a380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a390: 20 20 20 20 20 20 20 20 20 20 5b 69 74 65 6d 2d [item-
a3a0: 62 6f 64 79 20 69 74 65 6d 2d 74 65 73 74 73 5d body item-tests]
a3b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
a3c0: 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6e 61 [fina
a3d0: 6c 2d 62 6f 64 79 20 66 69 6e 61 6c 2d 74 65 73 l-body final-tes
a3e0: 74 73 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ts].
a3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 28 [(
a400: 69 70 76 20 2e 2e 2e 29 20 69 74 65 6d 2d 70 76 ipv ...) item-pv
a410: 61 72 2d 6c 73 74 5d 0a 20 20 20 20 20 20 20 20 ar-lst].
a420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a430: 20 20 5b 28 67 70 76 20 2e 2e 2e 29 20 74 65 6d [(gpv ...) tem
a440: 70 2d 69 74 65 6d 2d 70 76 61 72 2d 6c 73 74 5d p-item-pvar-lst]
a450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
a460: 20 20 20 20 20 20 20 20 20 20 20 5b 28 74 70 76 [(tpv
a470: 20 2e 2e 2e 29 20 74 61 69 6c 2d 70 76 61 72 2d ...) tail-pvar-
a480: 6c 73 74 5d 0a 20 20 20 20 20 20 20 20 20 20 20 lst].
a490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [
a4a0: 28 69 74 65 6d 2d 76 6f 69 64 20 2e 2e 2e 29 20 (item-void ...)
a4b0: 28 6d 61 70 20 28 6c 61 6d 62 64 61 20 28 69 29 (map (lambda (i)
a4c0: 20 28 73 79 6e 74 61 78 20 28 76 6f 69 64 29 29 (syntax (void))
a4d0: 29 20 69 74 65 6d 2d 70 76 61 72 2d 6c 73 74 29 ) item-pvar-lst)
a4e0: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ].
a4f0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 28 74 61 [(ta
a500: 69 6c 2d 76 6f 69 64 20 2e 2e 2e 29 20 28 6d 61 il-void ...) (ma
a510: 70 20 28 6c 61 6d 62 64 61 20 28 69 29 20 28 73 p (lambda (i) (s
a520: 79 6e 74 61 78 20 28 76 6f 69 64 29 29 29 20 74 yntax (void))) t
a530: 61 69 6c 2d 70 76 61 72 2d 6c 73 74 29 5d 0a 20 ail-pvar-lst)].
a540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a550: 20 20 20 20 20 20 20 20 20 5b 28 69 74 65 6d 2d [(item-
a560: 6e 75 6c 6c 20 2e 2e 2e 29 20 28 6d 61 70 20 28 null ...) (map (
a570: 6c 61 6d 62 64 61 20 28 69 29 20 28 73 79 6e 74 lambda (i) (synt
a580: 61 78 20 27 28 29 29 29 20 69 74 65 6d 2d 70 76 ax '())) item-pv
a590: 61 72 2d 6c 73 74 29 5d 0a 20 20 20 20 20 20 20 ar-lst)].
a5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a5b0: 20 20 20 5b 28 69 74 65 6d 2d 63 6f 6e 73 20 2e [(item-cons .
a5c0: 2e 2e 29 20 28 6d 61 70 20 28 6c 61 6d 62 64 61 ..) (map (lambda
a5d0: 20 28 61 20 62 29 0a 20 20 20 20 20 20 20 20 20 (a b).
a5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a600: 20 20 20 20 20 20 20 20 20 28 77 69 74 68 2d 73 (with-s
a610: 79 6e 74 61 78 20 28 5b 78 61 20 61 5d 0a 20 20 yntax ([xa a].
a620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 78 [x
a660: 62 20 62 5d 29 0a 20 20 20 20 20 20 20 20 20 20 b b]).
a670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a690: 20 20 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 (synta
a6a0: 78 20 28 63 6f 6e 73 20 78 61 20 78 62 29 29 29 x (cons xa xb)))
a6b0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
a6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a6e0: 20 20 69 74 65 6d 2d 70 76 61 72 2d 6c 73 74 0a item-pvar-lst.
a6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a720: 74 65 6d 70 2d 69 74 65 6d 2d 70 76 61 72 2d 6c temp-item-pvar-l
a730: 73 74 29 5d 29 0a 20 20 20 20 20 20 20 20 20 20 st)]).
a740: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 79 (sy
a750: 6e 74 61 78 20 28 6c 65 74 72 65 63 20 28 5b 6d ntax (letrec ([m
a760: 61 74 63 68 2d 74 61 69 6c 0a 20 20 20 20 20 20 atch-tail.
a770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a790: 20 20 20 28 6c 61 6d 62 64 61 20 28 6c 73 74 20 (lambda (lst
a7a0: 66 61 69 6c 29 0a 20 20 20 20 20 20 20 20 20 20 fail).
a7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a7d0: 20 74 61 69 6c 2d 62 6f 64 79 29 5d 0a 20 20 20 tail-body)].
a7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a800: 20 20 20 20 20 5b 6d 61 74 63 68 2d 69 74 65 6d [match-item
a810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
a820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a830: 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 (lambd
a840: 61 20 28 6c 73 74 29 0a 20 20 20 20 20 20 20 20 a (lst).
a850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a870: 20 20 20 28 6c 65 74 20 28 5b 66 61 69 6c 20 28 (let ([fail (
a880: 6c 61 6d 62 64 61 20 28 29 0a 20 20 20 20 20 20 lambda ().
a890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a8c0: 20 20 20 28 76 61 6c 75 65 73 20 23 66 0a 20 20 (values #f.
a8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c l
a910: 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 st.
a920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a950: 20 20 20 20 69 74 65 6d 2d 76 6f 69 64 20 2e 2e item-void ..
a960: 2e 29 29 5d 29 0a 20 20 20 20 20 20 20 20 20 20 .))]).
a970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a990: 20 20 20 69 74 65 6d 2d 62 6f 64 79 29 29 5d 0a item-body))].
a9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a9c0: 20 20 20 20 20 20 20 20 5b 6d 61 74 63 68 2d 64 [match-d
a9d0: 6f 74 74 65 64 0a 20 20 20 20 20 20 20 20 20 20 otted.
a9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
a9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
aa00: 6c 61 6d 62 64 61 20 28 78 29 0a 20 20 20 20 20 lambda (x).
aa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
aa20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
aa30: 20 20 20 20 20 20 28 6c 65 74 2d 76 61 6c 75 65 (let-value
aa40: 73 20 28 5b 28 74 61 69 6c 2d 72 65 73 20 74 70 s ([(tail-res tp
aa50: 76 20 2e 2e 2e 29 0a 20 20 20 20 20 20 20 20 20 v ...).
aa60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
aa70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
aa80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
aa90: 28 6d 61 74 63 68 2d 74 61 69 6c 20 78 0a 20 20 (match-tail x.
aaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
aab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
aac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
aad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
aae0: 20 20 20 28 6c 61 6d 62 64 61 20 28 29 0a 20 20 (lambda ().
aaf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ab00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ab10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ab30: 20 20 20 20 20 28 76 61 6c 75 65 73 20 23 66 0a (values #f.
ab40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ab50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ab60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ab70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ab80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t
ab90: 61 69 6c 2d 76 6f 69 64 20 2e 2e 2e 29 29 29 5d ail-void ...)))]
aba0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
abb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
abc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
abd0: 69 66 20 74 61 69 6c 2d 72 65 73 0a 20 20 20 20 if tail-res.
abe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
abf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ac00: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 76 61 (va
ac10: 6c 75 65 73 20 69 74 65 6d 2d 6e 75 6c 6c 20 2e lues item-null .
ac20: 2e 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ...
ac30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ac40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ac50: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 76 20 tpv
ac60: 2e 2e 2e 29 0a 20 20 20 20 20 20 20 20 20 20 20 ...).
ac70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ac80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ac90: 20 20 20 20 20 20 28 6c 65 74 2d 76 61 6c 75 65 (let-value
aca0: 73 20 28 5b 28 72 65 73 20 6e 65 77 2d 78 20 69 s ([(res new-x i
acb0: 70 76 20 2e 2e 2e 29 20 28 6d 61 74 63 68 2d 69 pv ...) (match-i
acc0: 74 65 6d 20 78 29 5d 29 0a 20 20 20 20 20 20 20 tem x)]).
acd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ace0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
acf0: 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 20 (if
ad00: 72 65 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 res.
ad10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ad20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ad30: 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 2d (let-
ad40: 76 61 6c 75 65 73 20 28 5b 28 67 70 76 20 2e 2e values ([(gpv ..
ad50: 2e 20 74 70 76 20 2e 2e 2e 29 0a 20 20 20 20 20 . tpv ...).
ad60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ad70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ad80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ad90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ada0: 28 6d 61 74 63 68 2d 64 6f 74 74 65 64 20 6e 65 (match-dotted ne
adb0: 77 2d 78 29 5d 29 0a 20 20 20 20 20 20 20 20 20 w-x)]).
adc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
add0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ade0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
adf0: 28 76 61 6c 75 65 73 20 69 74 65 6d 2d 63 6f 6e (values item-con
ae00: 73 20 2e 2e 2e 20 74 70 76 20 2e 2e 2e 29 29 0a s ... tpv ...)).
ae10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ae20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ae30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ae40: 20 20 20 20 20 20 20 28 6c 65 74 2d 76 61 6c 75 (let-valu
ae50: 65 73 20 28 5b 28 6c 61 73 74 2d 74 61 69 6c 2d es ([(last-tail-
ae60: 72 65 73 20 74 70 76 20 2e 2e 2e 29 0a 20 20 20 res tpv ...).
ae70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ae80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ae90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
aea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
aeb0: 20 20 28 6d 61 74 63 68 2d 74 61 69 6c 20 78 20 (match-tail x
aec0: 66 61 69 6c 2d 74 6f 29 5d 29 0a 20 20 20 20 20 fail-to)]).
aed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
aee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
aef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
af00: 20 20 20 20 28 76 61 6c 75 65 73 20 69 74 65 6d (values item
af10: 2d 6e 75 6c 6c 20 2e 2e 2e 20 74 70 76 20 2e 2e -null ... tpv ..
af20: 2e 29 29 29 29 29 29 29 5d 29 0a 20 20 20 20 20 .)))))))]).
af30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
af40: 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 (let
af50: 2d 76 61 6c 75 65 73 20 28 5b 28 69 70 76 20 2e -values ([(ipv .
af60: 2e 2e 20 74 70 76 20 2e 2e 2e 29 0a 20 20 20 20 .. tpv ...).
af70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
af80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
af90: 20 20 20 20 20 20 20 20 20 20 20 28 6d 61 74 63 (matc
afa0: 68 2d 64 6f 74 74 65 64 20 78 29 5d 29 0a 20 20 h-dotted x)]).
afb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
afc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
afd0: 20 66 69 6e 61 6c 2d 62 6f 64 79 29 29 29 29 0a final-body)))).
afe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
aff0: 20 20 20 20 20 66 69 6e 61 6c 2d 70 76 61 72 2d final-pvar-
b000: 6c 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 lst.
b010: 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 2d 63 final-c
b020: 61 74 61 2d 64 65 66 73 0a 20 20 20 20 20 20 20 ata-defs.
b030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 fi
b040: 6e 61 6c 2d 64 6f 74 74 65 64 2d 76 61 72 73 29 nal-dotted-vars)
b050: 29 29 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 ))))].
b060: 20 5b 63 6f 6d 70 69 6c 65 2d 69 74 65 6d 0a 20 [compile-item.
b070: 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 (lamb
b080: 64 61 20 28 69 74 65 6d 20 65 78 70 20 6e 65 78 da (item exp nex
b090: 74 70 20 66 61 69 6c 2d 6b 20 70 76 61 72 2d 6c tp fail-k pvar-l
b0a0: 73 74 20 64 65 70 74 68 20 63 61 74 61 2d 66 75 st depth cata-fu
b0b0: 6e 20 63 61 74 61 2d 64 65 66 73 20 64 6f 74 74 n cata-defs dott
b0c0: 65 64 2d 76 61 72 73 29 0a 20 20 20 20 20 20 20 ed-vars).
b0d0: 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 2d 63 (syntax-c
b0e0: 61 73 65 20 69 74 65 6d 20 28 75 6e 71 75 6f 74 ase item (unquot
b0f0: 65 20 2d 3e 29 0a 20 20 20 20 20 20 20 20 20 20 e ->).
b100: 20 20 20 20 20 20 3b 20 6e 6f 72 6d 61 6c 20 70 ; normal p
b110: 61 74 74 65 72 6e 20 76 61 72 0a 20 20 20 20 20 attern var.
b120: 20 20 20 20 20 20 20 20 20 20 20 5b 28 75 6e 71 [(unq
b130: 75 6f 74 65 20 76 61 72 29 0a 20 20 20 20 20 20 uote var).
b140: 20 20 20 20 20 20 20 20 20 20 20 28 69 64 65 6e (iden
b150: 74 69 66 69 65 72 3f 20 28 73 79 6e 74 61 78 20 tifier? (syntax
b160: 76 61 72 29 29 0a 20 20 20 20 20 20 20 20 20 20 var)).
b170: 20 20 20 20 20 20 20 28 6c 65 74 20 28 5b 6e 65 (let ([ne
b180: 77 2d 65 78 70 20 28 63 61 72 20 28 67 65 6e 65 w-exp (car (gene
b190: 72 61 74 65 2d 74 65 6d 70 6f 72 61 72 69 65 73 rate-temporaries
b1a0: 20 28 6c 69 73 74 20 65 78 70 29 29 29 5d 29 0a (list exp)))]).
b1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b1c0: 20 20 20 28 6c 65 74 2d 76 61 6c 75 65 73 20 28 (let-values (
b1d0: 5b 28 6e 65 78 74 2d 74 65 73 74 73 20 6e 65 77 [(next-tests new
b1e0: 2d 70 76 61 72 2d 6c 73 74 20 6e 65 77 2d 63 61 -pvar-lst new-ca
b1f0: 74 61 2d 64 65 66 73 20 6e 65 77 2d 64 6f 74 74 ta-defs new-dott
b200: 65 64 2d 76 61 72 73 29 0a 20 20 20 20 20 20 20 ed-vars).
b210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b220: 20 20 20 20 20 20 20 20 20 20 28 6e 65 78 74 70 (nextp
b230: 20 6e 65 77 2d 65 78 70 20 28 61 64 64 2d 70 61 new-exp (add-pa
b240: 74 2d 76 61 72 20 28 73 79 6e 74 61 78 20 76 61 t-var (syntax va
b250: 72 29 20 70 76 61 72 2d 6c 73 74 29 20 63 61 74 r) pvar-lst) cat
b260: 61 2d 64 65 66 73 20 64 6f 74 74 65 64 2d 76 61 a-defs dotted-va
b270: 72 73 29 5d 29 0a 20 20 20 20 20 20 20 20 20 20 rs)]).
b280: 20 20 20 20 20 20 20 20 20 20 20 28 76 61 6c 75 (valu
b290: 65 73 20 28 77 69 74 68 2d 73 79 6e 74 61 78 20 es (with-syntax
b2a0: 28 5b 78 20 65 78 70 5d 0a 20 20 20 20 20 20 20 ([x exp].
b2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b2d0: 20 20 20 20 5b 6e 78 20 6e 65 77 2d 65 78 70 5d [nx new-exp]
b2e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
b2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b300: 20 20 20 20 20 20 20 20 20 20 20 20 5b 62 6f 64 [bod
b310: 79 20 6e 65 78 74 2d 74 65 73 74 73 5d 0a 20 20 y next-tests].
b320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b340: 20 20 20 20 20 20 20 20 20 5b 66 61 69 6c 2d 74 [fail-t
b350: 6f 20 66 61 69 6c 2d 6b 5d 29 0a 20 20 20 20 20 o fail-k]).
b360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b370: 20 20 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 (synta
b380: 78 20 28 69 66 20 28 70 61 69 72 3f 20 78 29 0a x (if (pair? x).
b390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b3b0: 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 (let
b3c0: 28 5b 6e 78 20 28 63 64 72 20 78 29 5d 0a 20 20 ([nx (cdr x)].
b3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [
b400: 76 61 72 20 28 63 61 72 20 78 29 5d 29 0a 20 20 var (car x)]).
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b430: 20 20 20 20 20 20 20 20 20 20 20 62 6f 64 79 29 body)
b440: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
b450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b460: 20 20 20 20 20 20 20 20 20 20 20 20 28 66 61 69 (fai
b470: 6c 2d 74 6f 29 29 29 29 0a 20 20 20 20 20 20 20 l-to)))).
b480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b490: 20 20 20 20 20 20 6e 65 77 2d 70 76 61 72 2d 6c new-pvar-l
b4a0: 73 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 st.
b4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b4c0: 6e 65 77 2d 63 61 74 61 2d 64 65 66 73 0a 20 20 new-cata-defs.
b4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b4e0: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 2d 64 new-d
b4f0: 6f 74 74 65 64 2d 76 61 72 73 29 29 29 5d 0a 20 otted-vars)))].
b500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b ;
b510: 20 6e 61 6d 65 64 20 63 61 74 61 6d 6f 72 70 68 named catamorph
b520: 69 73 6d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ism.
b530: 20 20 20 20 5b 28 75 6e 71 75 6f 74 65 20 5b 63 [(unquote [c
b540: 61 74 61 20 2d 3e 20 63 76 61 72 20 2e 2e 2e 5d ata -> cvar ...]
b550: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
b560: 20 20 20 28 6c 65 74 20 28 5b 6e 65 77 2d 65 78 (let ([new-ex
b570: 70 20 28 63 61 72 20 28 67 65 6e 65 72 61 74 65 p (car (generate
b580: 2d 74 65 6d 70 6f 72 61 72 69 65 73 20 28 6c 69 -temporaries (li
b590: 73 74 20 65 78 70 29 29 29 5d 0a 20 20 20 20 20 st exp)))].
b5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b5b0: 20 20 5b 63 74 65 6d 70 20 28 63 61 72 20 28 67 [ctemp (car (g
b5c0: 65 6e 65 72 61 74 65 2d 74 65 6d 70 6f 72 61 72 enerate-temporar
b5d0: 69 65 73 20 28 73 79 6e 74 61 78 20 28 5b 63 76 ies (syntax ([cv
b5e0: 61 72 20 2e 2e 2e 5d 29 29 29 29 5d 29 0a 20 20 ar ...]))))]).
b5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b600: 20 28 6c 65 74 2d 76 61 6c 75 65 73 20 28 5b 28 (let-values ([(
b610: 6e 65 78 74 2d 74 65 73 74 73 20 6e 65 77 2d 70 next-tests new-p
b620: 76 61 72 2d 6c 73 74 20 6e 65 77 2d 63 61 74 61 var-lst new-cata
b630: 2d 64 65 66 73 20 6e 65 77 2d 64 6f 74 74 65 64 -defs new-dotted
b640: 2d 76 61 72 73 29 0a 20 20 20 20 20 20 20 20 20 -vars).
b650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b660: 20 20 20 20 20 20 20 20 28 6e 65 78 74 70 20 6e (nextp n
b670: 65 77 2d 65 78 70 0a 20 20 20 20 20 20 20 20 20 ew-exp.
b680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
b6a0: 61 64 64 2d 70 61 74 2d 76 61 72 20 63 74 65 6d add-pat-var ctem
b6b0: 70 20 70 76 61 72 2d 6c 73 74 29 0a 20 20 20 20 p pvar-lst).
b6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b6e0: 20 20 20 20 28 61 64 64 2d 63 61 74 61 2d 64 65 (add-cata-de
b6f0: 66 20 64 65 70 74 68 0a 20 20 20 20 20 20 20 20 f depth.
b700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 (s
b730: 79 6e 74 61 78 20 5b 63 76 61 72 20 2e 2e 2e 5d yntax [cvar ...]
b740: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
b750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b770: 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 (syntax
b780: 63 61 74 61 29 0a 20 20 20 20 20 20 20 20 20 20 cata).
b790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b7b0: 20 20 20 20 20 20 20 20 20 20 20 20 63 74 65 6d ctem
b7c0: 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 p.
b7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b7f0: 20 20 20 20 20 20 20 20 63 61 74 61 2d 64 65 66 cata-def
b800: 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 s).
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b820: 20 20 20 20 20 20 20 20 20 20 20 64 6f 74 74 65 dotte
b830: 64 2d 76 61 72 73 29 5d 29 0a 20 20 20 20 20 20 d-vars)]).
b840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
b850: 76 61 6c 75 65 73 20 28 77 69 74 68 2d 73 79 6e values (with-syn
b860: 74 61 78 20 28 5b 78 20 65 78 70 5d 0a 20 20 20 tax ([x exp].
b870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b890: 20 20 20 20 20 20 20 20 5b 6e 78 20 6e 65 77 2d [nx new-
b8a0: 65 78 70 5d 0a 20 20 20 20 20 20 20 20 20 20 20 exp].
b8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b8d0: 5b 63 74 20 63 74 65 6d 70 5d 0a 20 20 20 20 20 [ct ctemp].
b8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b900: 20 20 20 20 20 20 5b 62 6f 64 79 20 6e 65 78 74 [body next
b910: 2d 74 65 73 74 73 5d 0a 20 20 20 20 20 20 20 20 -tests].
b920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b940: 20 20 20 5b 66 61 69 6c 2d 74 6f 20 66 61 69 6c [fail-to fail
b950: 2d 6b 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 -k]).
b960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b970: 20 20 20 20 28 73 79 6e 74 61 78 20 28 69 66 20 (syntax (if
b980: 28 70 61 69 72 3f 20 78 29 0a 20 20 20 20 20 20 (pair? x).
b990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b9b0: 20 20 20 20 20 28 6c 65 74 20 28 5b 6e 78 20 28 (let ([nx (
b9c0: 63 64 72 20 78 29 5d 0a 20 20 20 20 20 20 20 20 cdr x)].
b9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b9f0: 20 20 20 20 20 20 20 20 20 5b 63 74 20 28 63 61 [ct (ca
ba00: 72 20 78 29 5d 29 0a 20 20 20 20 20 20 20 20 20 r x)]).
ba10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ba20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ba30: 20 20 20 20 62 6f 64 79 29 0a 20 20 20 20 20 20 body).
ba40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ba50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ba60: 20 20 20 20 20 28 66 61 69 6c 2d 74 6f 29 29 29 (fail-to)))
ba70: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
ba80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e n
ba90: 65 77 2d 70 76 61 72 2d 6c 73 74 0a 20 20 20 20 ew-pvar-lst.
baa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bab0: 20 20 20 20 20 20 20 20 20 6e 65 77 2d 63 61 74 new-cat
bac0: 61 2d 64 65 66 73 0a 20 20 20 20 20 20 20 20 20 a-defs.
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bae0: 20 20 20 20 6e 65 77 2d 64 6f 74 74 65 64 2d 76 new-dotted-v
baf0: 61 72 73 29 29 29 5d 0a 20 20 20 20 20 20 20 20 ars)))].
bb00: 20 20 20 20 20 20 20 20 3b 20 62 61 73 69 63 20 ; basic
bb10: 63 61 74 61 6d 6f 72 70 68 69 73 6d 0a 20 20 20 catamorphism.
bb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 28 75 [(u
bb30: 6e 71 75 6f 74 65 20 5b 63 76 61 72 20 2e 2e 2e nquote [cvar ...
bb40: 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]).
bb50: 20 20 20 20 28 6c 65 74 20 28 5b 6e 65 77 2d 65 (let ([new-e
bb60: 78 70 20 28 63 61 72 20 28 67 65 6e 65 72 61 74 xp (car (generat
bb70: 65 2d 74 65 6d 70 6f 72 61 72 69 65 73 20 28 6c e-temporaries (l
bb80: 69 73 74 20 65 78 70 29 29 29 5d 0a 20 20 20 20 ist exp)))].
bb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bba0: 20 20 20 5b 63 74 65 6d 70 20 28 63 61 72 20 28 [ctemp (car (
bbb0: 67 65 6e 65 72 61 74 65 2d 74 65 6d 70 6f 72 61 generate-tempora
bbc0: 72 69 65 73 20 28 73 79 6e 74 61 78 20 28 5b 63 ries (syntax ([c
bbd0: 76 61 72 20 2e 2e 2e 5d 29 29 29 29 5d 29 0a 20 var ...]))))]).
bbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bbf0: 20 20 28 69 66 20 28 6e 6f 74 20 63 61 74 61 2d (if (not cata-
bc00: 66 75 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 fun).
bc10: 20 20 20 20 20 20 20 20 20 20 20 20 28 73 78 6d (sxm
bc20: 6c 2d 6d 61 74 63 68 2d 73 79 6e 74 61 78 2d 65 l-match-syntax-e
bc30: 72 72 6f 72 20 22 73 78 6d 6c 2d 6d 61 74 63 68 rror "sxml-match
bc40: 20 70 61 74 74 65 72 6e 3a 20 63 61 74 61 6d 6f pattern: catamo
bc50: 72 70 68 69 73 6d 20 6e 6f 74 20 61 6c 6c 6f 77 rphism not allow
bc60: 65 64 20 69 6e 20 74 68 69 73 20 63 6f 6e 74 65 ed in this conte
bc70: 78 74 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 xt".
bc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bca0: 20 20 20 20 73 74 78 0a 20 20 20 20 20 20 20 20 stx.
bcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bcd0: 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 (syntax
bce0: 5b 63 76 61 72 20 2e 2e 2e 5d 29 29 29 0a 20 20 [cvar ...]))).
bcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bd00: 20 28 6c 65 74 2d 76 61 6c 75 65 73 20 28 5b 28 (let-values ([(
bd10: 6e 65 78 74 2d 74 65 73 74 73 20 6e 65 77 2d 70 next-tests new-p
bd20: 76 61 72 2d 6c 73 74 20 6e 65 77 2d 63 61 74 61 var-lst new-cata
bd30: 2d 64 65 66 73 20 6e 65 77 2d 64 6f 74 74 65 64 -defs new-dotted
bd40: 2d 76 61 72 73 29 0a 20 20 20 20 20 20 20 20 20 -vars).
bd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bd60: 20 20 20 20 20 20 20 20 28 6e 65 78 74 70 20 6e (nextp n
bd70: 65 77 2d 65 78 70 0a 20 20 20 20 20 20 20 20 20 ew-exp.
bd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
bda0: 61 64 64 2d 70 61 74 2d 76 61 72 20 63 74 65 6d add-pat-var ctem
bdb0: 70 20 70 76 61 72 2d 6c 73 74 29 0a 20 20 20 20 p pvar-lst).
bdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bde0: 20 20 20 20 28 61 64 64 2d 63 61 74 61 2d 64 65 (add-cata-de
bdf0: 66 20 64 65 70 74 68 0a 20 20 20 20 20 20 20 20 f depth.
be00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
be10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
be20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 (s
be30: 79 6e 74 61 78 20 5b 63 76 61 72 20 2e 2e 2e 5d yntax [cvar ...]
be40: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
be50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
be60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
be70: 20 20 20 20 20 20 20 20 63 61 74 61 2d 66 75 6e cata-fun
be80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
be90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
beb0: 20 20 20 20 20 20 20 63 74 65 6d 70 0a 20 20 20 ctemp.
bec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bef0: 20 20 20 63 61 74 61 2d 64 65 66 73 29 0a 20 20 cata-defs).
bf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bf20: 20 20 20 20 20 20 64 6f 74 74 65 64 2d 76 61 72 dotted-var
bf30: 73 29 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 s)]).
bf40: 20 20 20 20 20 20 20 20 20 20 28 76 61 6c 75 65 (value
bf50: 73 20 28 77 69 74 68 2d 73 79 6e 74 61 78 20 28 s (with-syntax (
bf60: 5b 78 20 65 78 70 5d 0a 20 20 20 20 20 20 20 20 [x exp].
bf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bf80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bf90: 20 20 20 5b 6e 78 20 6e 65 77 2d 65 78 70 5d 0a [nx new-exp].
bfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bfc0: 20 20 20 20 20 20 20 20 20 20 20 5b 63 74 20 63 [ct c
bfd0: 74 65 6d 70 5d 0a 20 20 20 20 20 20 20 20 20 20 temp].
bfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c000: 20 5b 62 6f 64 79 20 6e 65 78 74 2d 74 65 73 74 [body next-test
c010: 73 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 s].
c020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 [f
c040: 61 69 6c 2d 74 6f 20 66 61 69 6c 2d 6b 5d 29 0a ail-to fail-k]).
c050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
c070: 73 79 6e 74 61 78 20 28 69 66 20 28 70 61 69 72 syntax (if (pair
c080: 3f 20 78 29 0a 20 20 20 20 20 20 20 20 20 20 20 ? x).
c090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c0b0: 28 6c 65 74 20 28 5b 6e 78 20 28 63 64 72 20 78 (let ([nx (cdr x
c0c0: 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )].
c0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c0f0: 20 20 20 20 5b 63 74 20 28 63 61 72 20 78 29 5d [ct (car x)]
c100: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
c110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 b
c130: 6f 64 79 29 0a 20 20 20 20 20 20 20 20 20 20 20 ody).
c140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c160: 28 66 61 69 6c 2d 74 6f 29 29 29 29 0a 20 20 20 (fail-to)))).
c170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c180: 20 20 20 20 20 20 20 20 20 20 6e 65 77 2d 70 76 new-pv
c190: 61 72 2d 6c 73 74 0a 20 20 20 20 20 20 20 20 20 ar-lst.
c1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c1b0: 20 20 20 20 6e 65 77 2d 63 61 74 61 2d 64 65 66 new-cata-def
c1c0: 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 s.
c1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e n
c1e0: 65 77 2d 64 6f 74 74 65 64 2d 76 61 72 73 29 29 ew-dotted-vars))
c1f0: 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )].
c200: 20 20 20 5b 28 74 61 67 20 69 74 65 6d 20 2e 2e [(tag item ..
c210: 2e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 .).
c220: 20 20 20 20 28 69 64 65 6e 74 69 66 69 65 72 3f (identifier?
c230: 20 28 73 79 6e 74 61 78 20 74 61 67 29 29 0a 20 (syntax tag)).
c240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c250: 28 6c 65 74 20 28 5b 6e 65 77 2d 65 78 70 20 28 (let ([new-exp (
c260: 63 61 72 20 28 67 65 6e 65 72 61 74 65 2d 74 65 car (generate-te
c270: 6d 70 6f 72 61 72 69 65 73 20 28 6c 69 73 74 20 mporaries (list
c280: 65 78 70 29 29 29 5d 29 0a 20 20 20 20 20 20 20 exp)))]).
c290: 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 (let
c2a0: 2d 76 61 6c 75 65 73 20 28 5b 28 61 66 74 65 72 -values ([(after
c2b0: 2d 74 65 73 74 73 20 61 66 74 65 72 2d 70 76 61 -tests after-pva
c2c0: 72 2d 6c 73 74 20 61 66 74 65 72 2d 63 61 74 61 r-lst after-cata
c2d0: 2d 64 65 66 73 20 61 66 74 65 72 2d 64 6f 74 74 -defs after-dott
c2e0: 65 64 2d 76 61 72 73 29 0a 20 20 20 20 20 20 20 ed-vars).
c2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c300: 20 20 20 20 20 20 20 20 20 20 28 63 6f 6d 70 69 (compi
c310: 6c 65 2d 65 6c 65 6d 65 6e 74 2d 70 61 74 20 28 le-element-pat (
c320: 73 79 6e 74 61 78 20 28 74 61 67 20 69 74 65 6d syntax (tag item
c330: 20 2e 2e 2e 29 29 0a 20 20 20 20 20 20 20 20 20 ...)).
c340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c360: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 69 (wi
c370: 74 68 2d 73 79 6e 74 61 78 20 28 5b 78 20 65 78 th-syntax ([x ex
c380: 70 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 p]).
c390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c3b0: 20 20 20 20 20 20 20 20 20 20 20 20 28 73 79 6e (syn
c3c0: 74 61 78 20 28 63 61 72 20 78 29 29 29 0a 20 20 tax (car x))).
c3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c400: 20 20 20 20 28 6c 61 6d 62 64 61 20 28 6d 6f 72 (lambda (mor
c410: 65 2d 70 76 61 72 2d 6c 73 74 20 6d 6f 72 65 2d e-pvar-lst more-
c420: 63 61 74 61 2d 64 65 66 73 20 6d 6f 72 65 2d 64 cata-defs more-d
c430: 6f 74 74 65 64 2d 76 61 72 73 29 0a 20 20 20 20 otted-vars).
c440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c470: 20 20 20 20 28 6c 65 74 2d 76 61 6c 75 65 73 20 (let-values
c480: 28 5b 28 6e 65 78 74 2d 74 65 73 74 73 20 6e 65 ([(next-tests ne
c490: 77 2d 70 76 61 72 2d 6c 73 74 0a 20 20 20 20 20 w-pvar-lst.
c4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 new
c4f0: 2d 63 61 74 61 2d 64 65 66 73 0a 20 20 20 20 20 -cata-defs.
c500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c540: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 new
c550: 2d 64 6f 74 74 65 64 2d 76 61 72 73 29 0a 20 20 -dotted-vars).
c560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c5a0: 20 20 20 20 28 6e 65 78 74 70 20 6e 65 77 2d 65 (nextp new-e
c5b0: 78 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 xp.
c5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c600: 6d 6f 72 65 2d 70 76 61 72 2d 6c 73 74 0a 20 20 more-pvar-lst.
c610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c650: 20 20 20 20 20 20 20 20 20 20 20 6d 6f 72 65 2d more-
c660: 63 61 74 61 2d 64 65 66 73 0a 20 20 20 20 20 20 cata-defs.
c670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c6b0: 20 20 20 20 20 20 20 6d 6f 72 65 2d 64 6f 74 74 more-dott
c6c0: 65 64 2d 76 61 72 73 29 5d 29 0a 20 20 20 20 20 ed-vars)]).
c6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c700: 20 20 20 20 20 28 76 61 6c 75 65 73 20 28 77 69 (values (wi
c710: 74 68 2d 73 79 6e 74 61 78 20 28 5b 78 20 65 78 th-syntax ([x ex
c720: 70 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 p].
c730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c770: 20 20 20 5b 6e 78 20 6e 65 77 2d 65 78 70 5d 0a [nx new-exp].
c780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c7d0: 5b 62 6f 64 79 20 6e 65 78 74 2d 74 65 73 74 73 [body next-tests
c7e0: 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]).
c7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c820: 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 28 (syntax (
c830: 6c 65 74 20 28 5b 6e 78 20 28 63 64 72 20 78 29 let ([nx (cdr x)
c840: 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ]).
c850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c890: 20 62 6f 64 79 29 29 29 0a 20 20 20 20 20 20 20 body))).
c8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c8d0: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 2d 70 new-p
c8e0: 76 61 72 2d 6c 73 74 0a 20 20 20 20 20 20 20 20 var-lst.
c8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c920: 20 20 20 20 20 20 20 20 20 20 6e 65 77 2d 63 61 new-ca
c930: 74 61 2d 64 65 66 73 0a 20 20 20 20 20 20 20 20 ta-defs.
c940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c970: 20 20 20 20 20 20 20 20 20 20 6e 65 77 2d 64 6f new-do
c980: 74 74 65 64 2d 76 61 72 73 29 29 29 0a 20 20 20 tted-vars))).
c990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c9c0: 20 20 20 66 61 69 6c 2d 6b 0a 20 20 20 20 20 20 fail-k.
c9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ca00: 70 76 61 72 2d 6c 73 74 0a 20 20 20 20 20 20 20 pvar-lst.
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ca20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ca30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 d
ca40: 65 70 74 68 0a 20 20 20 20 20 20 20 20 20 20 20 epth.
ca50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ca60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ca70: 20 20 20 20 20 20 20 20 20 20 20 63 61 74 61 2d cata-
ca80: 66 75 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 fun.
ca90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
caa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cab0: 20 20 20 20 20 20 20 20 20 20 63 61 74 61 2d 64 cata-d
cac0: 65 66 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 efs.
cad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
caf0: 20 20 20 20 20 20 20 20 20 20 64 6f 74 74 65 64 dotted
cb00: 2d 76 61 72 73 29 5d 29 0a 20 20 20 20 20 20 20 -vars)]).
cb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 ;
cb20: 74 65 73 74 20 74 68 61 74 20 77 65 20 61 72 65 test that we are
cb30: 20 6e 6f 74 20 61 74 20 74 68 65 20 65 6e 64 20 not at the end
cb40: 6f 66 20 61 6e 20 69 74 65 6d 2d 6c 69 73 74 2c of an item-list,
cb50: 20 42 45 46 4f 52 45 0a 20 20 20 20 20 20 20 20 BEFORE.
cb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 65 ; e
cb70: 6e 74 65 72 69 6e 67 20 74 65 73 74 73 20 66 6f ntering tests fo
cb80: 72 20 74 68 65 20 65 6c 65 6d 65 6e 74 20 70 61 r the element pa
cb90: 74 74 65 72 6e 20 28 61 67 61 69 6e 73 74 20 74 ttern (against t
cba0: 68 65 20 27 63 61 72 27 20 6f 66 20 74 68 65 20 he 'car' of the
cbb0: 69 74 65 6d 2d 6c 69 73 74 29 0a 20 20 20 20 20 item-list).
cbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cbd0: 28 76 61 6c 75 65 73 20 28 77 69 74 68 2d 73 79 (values (with-sy
cbe0: 6e 74 61 78 20 28 5b 78 20 65 78 70 5d 0a 20 20 ntax ([x exp].
cbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cc10: 20 20 20 20 20 20 20 20 20 5b 62 6f 64 79 20 61 [body a
cc20: 66 74 65 72 2d 74 65 73 74 73 5d 0a 20 20 20 20 fter-tests].
cc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cc50: 20 20 20 20 20 20 20 5b 66 61 69 6c 2d 74 6f 20 [fail-to
cc60: 66 61 69 6c 2d 6b 5d 29 0a 20 20 20 20 20 20 20 fail-k]).
cc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cc80: 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 (syntax
cc90: 28 69 66 20 28 70 61 69 72 3f 20 78 29 0a 20 20 (if (pair? x).
cca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ccb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ccc0: 20 20 20 20 20 20 20 20 20 62 6f 64 79 0a 20 20 body.
ccd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ccf0: 20 20 20 20 20 20 20 20 20 28 66 61 69 6c 2d 74 (fail-t
cd00: 6f 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 o)))).
cd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cd20: 20 20 20 61 66 74 65 72 2d 70 76 61 72 2d 6c 73 after-pvar-ls
cd30: 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 t.
cd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 a
cd50: 66 74 65 72 2d 63 61 74 61 2d 64 65 66 73 0a 20 fter-cata-defs.
cd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cd70: 20 20 20 20 20 20 20 20 20 20 20 20 61 66 74 65 afte
cd80: 72 2d 64 6f 74 74 65 64 2d 76 61 72 73 29 29 29 r-dotted-vars)))
cd90: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ].
cda0: 20 20 5b 28 69 20 2e 2e 2e 29 0a 20 20 20 20 20 [(i ...).
cdb0: 20 20 20 20 20 20 20 20 20 20 20 20 28 73 78 6d (sxm
cdc0: 6c 2d 6d 61 74 63 68 2d 73 79 6e 74 61 78 2d 65 l-match-syntax-e
cdd0: 72 72 6f 72 20 22 62 61 64 20 70 61 74 74 65 72 rror "bad patter
cde0: 6e 20 73 79 6e 74 61 78 20 28 6e 6f 74 20 61 6e n syntax (not an
cdf0: 20 65 6c 65 6d 65 6e 74 20 70 61 74 74 65 72 6e element pattern
ce00: 29 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )".
ce10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ce20: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 78 stx
ce30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
ce40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ce50: 20 20 20 20 20 20 20 20 20 20 20 28 73 79 6e 74 (synt
ce60: 61 78 20 28 69 20 2e 2e 2e 29 29 29 5d 0a 20 20 ax (i ...)))].
ce70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 69 [i
ce80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
ce90: 20 20 28 69 64 65 6e 74 69 66 69 65 72 3f 20 28 (identifier? (
cea0: 73 79 6e 74 61 78 20 69 29 29 0a 20 20 20 20 20 syntax i)).
ceb0: 20 20 20 20 20 20 20 20 20 20 20 20 28 73 78 6d (sxm
cec0: 6c 2d 6d 61 74 63 68 2d 73 79 6e 74 61 78 2d 65 l-match-syntax-e
ced0: 72 72 6f 72 20 22 62 61 64 20 70 61 74 74 65 72 rror "bad patter
cee0: 6e 20 73 79 6e 74 61 78 20 28 73 79 6d 62 6f 6c n syntax (symbol
cef0: 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 69 6e 20 not allowed in
cf00: 74 68 69 73 20 63 6f 6e 74 65 78 74 29 22 0a 20 this context)".
cf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cf20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cf30: 20 20 20 20 20 20 20 20 20 73 74 78 0a 20 20 20 stx.
cf40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cf50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
cf60: 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 69 (syntax i
cf70: 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))].
cf80: 20 20 20 20 5b 6c 69 74 65 72 61 6c 0a 20 20 20 [literal.
cf90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c (l
cfa0: 69 74 65 72 61 6c 3f 20 28 73 79 6e 74 61 78 20 iteral? (syntax
cfb0: 6c 69 74 65 72 61 6c 29 29 0a 20 20 20 20 20 20 literal)).
cfc0: 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20 (let
cfd0: 28 5b 6e 65 77 2d 65 78 70 20 28 63 61 72 20 28 ([new-exp (car (
cfe0: 67 65 6e 65 72 61 74 65 2d 74 65 6d 70 6f 72 61 generate-tempora
cff0: 72 69 65 73 20 28 6c 69 73 74 20 65 78 70 29 29 ries (list exp))
d000: 29 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 )]).
d010: 20 20 20 20 20 20 20 28 6c 65 74 2d 76 61 6c 75 (let-valu
d020: 65 73 20 28 5b 28 6e 65 78 74 2d 74 65 73 74 73 es ([(next-tests
d030: 20 6e 65 77 2d 70 76 61 72 2d 6c 73 74 20 6e 65 new-pvar-lst ne
d040: 77 2d 63 61 74 61 2d 64 65 66 73 20 6e 65 77 2d w-cata-defs new-
d050: 64 6f 74 74 65 64 2d 76 61 72 73 29 0a 20 20 20 dotted-vars).
d060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e (n
d080: 65 78 74 70 20 6e 65 77 2d 65 78 70 20 70 76 61 extp new-exp pva
d090: 72 2d 6c 73 74 20 63 61 74 61 2d 64 65 66 73 20 r-lst cata-defs
d0a0: 64 6f 74 74 65 64 2d 76 61 72 73 29 5d 29 0a 20 dotted-vars)]).
d0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d0c0: 20 20 20 20 28 76 61 6c 75 65 73 20 28 77 69 74 (values (wit
d0d0: 68 2d 73 79 6e 74 61 78 20 28 5b 78 20 65 78 70 h-syntax ([x exp
d0e0: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ].
d0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d100: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 6e 78 [nx
d110: 20 6e 65 77 2d 65 78 70 5d 0a 20 20 20 20 20 20 new-exp].
d120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d140: 20 20 20 20 20 5b 62 6f 64 79 20 6e 65 78 74 2d [body next-
d150: 74 65 73 74 73 5d 0a 20 20 20 20 20 20 20 20 20 tests].
d160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d180: 20 20 5b 66 61 69 6c 2d 74 6f 20 66 61 69 6c 2d [fail-to fail-
d190: 6b 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 k]).
d1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d1b0: 20 20 20 28 73 79 6e 74 61 78 20 28 69 66 20 28 (syntax (if (
d1c0: 61 6e 64 20 28 70 61 69 72 3f 20 78 29 20 28 65 and (pair? x) (e
d1d0: 71 75 61 6c 3f 20 6c 69 74 65 72 61 6c 20 28 63 qual? literal (c
d1e0: 61 72 20 78 29 29 29 0a 20 20 20 20 20 20 20 20 ar x))).
d1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d210: 20 20 20 28 6c 65 74 20 28 5b 6e 78 20 28 63 64 (let ([nx (cd
d220: 72 20 78 29 5d 29 0a 20 20 20 20 20 20 20 20 20 r x)]).
d230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d250: 20 20 20 20 62 6f 64 79 29 0a 20 20 20 20 20 20 body).
d260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d280: 20 20 20 20 20 28 66 61 69 6c 2d 74 6f 29 29 29 (fail-to)))
d290: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
d2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e n
d2b0: 65 77 2d 70 76 61 72 2d 6c 73 74 0a 20 20 20 20 ew-pvar-lst.
d2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d2d0: 20 20 20 20 20 20 20 20 20 6e 65 77 2d 63 61 74 new-cat
d2e0: 61 2d 64 65 66 73 0a 20 20 20 20 20 20 20 20 20 a-defs.
d2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d300: 20 20 20 20 6e 65 77 2d 64 6f 74 74 65 64 2d 76 new-dotted-v
d310: 61 72 73 29 29 29 5d 29 29 5d 29 0a 20 20 20 20 ars)))]))]).
d320: 20 20 20 20 28 6c 65 74 20 28 5b 66 61 69 6c 2d (let ([fail-
d330: 6b 20 28 73 79 6e 74 61 78 20 66 61 69 6c 75 72 k (syntax failur
d340: 65 29 5d 29 0a 20 20 20 20 20 20 20 20 20 20 28 e)]). (
d350: 73 79 6e 74 61 78 2d 63 61 73 65 20 73 74 78 20 syntax-case stx
d360: 28 75 6e 71 75 6f 74 65 20 67 75 61 72 64 20 2d (unquote guard -
d370: 3e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b >). [
d380: 28 63 6f 6d 70 69 6c 65 2d 63 6c 61 75 73 65 20 (compile-clause
d390: 28 28 75 6e 71 75 6f 74 65 20 76 61 72 29 20 28 ((unquote var) (
d3a0: 67 75 61 72 64 20 67 65 78 70 20 2e 2e 2e 29 20 guard gexp ...)
d3b0: 61 63 74 69 6f 6e 30 20 61 63 74 69 6f 6e 20 2e action0 action .
d3c0: 2e 2e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 ..).
d3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d3e0: 20 65 78 70 0a 20 20 20 20 20 20 20 20 20 20 20 exp.
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d400: 20 20 63 61 74 61 2d 66 75 6e 0a 20 20 20 20 20 cata-fun.
d410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d420: 20 20 20 20 20 20 20 20 66 61 69 6c 2d 65 78 70 fail-exp
d430: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 ). (
d440: 69 64 65 6e 74 69 66 69 65 72 3f 20 28 73 79 6e identifier? (syn
d450: 74 61 78 20 76 61 72 29 29 0a 20 20 20 20 20 20 tax var)).
d460: 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 28 (syntax (
d470: 6c 65 74 20 28 5b 76 61 72 20 65 78 70 5d 29 0a let ([var exp]).
d480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d490: 20 20 20 20 20 20 20 28 69 66 20 28 61 6e 64 20 (if (and
d4a0: 67 65 78 70 20 2e 2e 2e 29 0a 20 20 20 20 20 20 gexp ...).
d4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d4c0: 20 20 20 20 20 28 62 65 67 69 6e 20 61 63 74 69 (begin acti
d4d0: 6f 6e 30 20 61 63 74 69 6f 6e 20 2e 2e 2e 29 0a on0 action ...).
d4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d4f0: 20 20 20 20 20 20 20 20 20 20 20 28 66 61 69 6c (fail
d500: 2d 65 78 70 29 29 29 29 5d 0a 20 20 20 20 20 20 -exp))))].
d510: 20 20 20 20 20 20 5b 28 63 6f 6d 70 69 6c 65 2d [(compile-
d520: 63 6c 61 75 73 65 20 28 28 75 6e 71 75 6f 74 65 clause ((unquote
d530: 20 5b 63 61 74 61 20 2d 3e 20 63 76 61 72 20 2e [cata -> cvar .
d540: 2e 2e 5d 29 20 28 67 75 61 72 64 20 67 65 78 70 ..]) (guard gexp
d550: 20 2e 2e 2e 29 20 61 63 74 69 6f 6e 30 20 61 63 ...) action0 ac
d560: 74 69 6f 6e 20 2e 2e 2e 29 0a 20 20 20 20 20 20 tion ...).
d570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d580: 20 20 20 20 20 20 20 65 78 70 0a 20 20 20 20 20 exp.
d590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d5a0: 20 20 20 20 20 20 20 20 63 61 74 61 2d 66 75 6e cata-fun
d5b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
d5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61 fa
d5d0: 69 6c 2d 65 78 70 29 0a 20 20 20 20 20 20 20 20 il-exp).
d5e0: 20 20 20 20 20 28 73 79 6e 74 61 78 20 28 69 66 (syntax (if
d5f0: 20 28 61 6e 64 20 67 65 78 70 20 2e 2e 2e 29 0a (and gexp ...).
d600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d610: 20 20 20 20 20 20 20 20 20 28 6c 65 74 2d 76 61 (let-va
d620: 6c 75 65 73 20 28 5b 28 63 76 61 72 20 2e 2e 2e lues ([(cvar ...
d630: 29 20 28 63 61 74 61 20 65 78 70 29 5d 29 0a 20 ) (cata exp)]).
d640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d650: 20 20 20 20 20 20 20 20 20 20 28 62 65 67 69 6e (begin
d660: 20 61 63 74 69 6f 6e 30 20 61 63 74 69 6f 6e 20 action0 action
d670: 2e 2e 2e 29 29 0a 20 20 20 20 20 20 20 20 20 20 ...)).
d680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
d690: 66 61 69 6c 2d 65 78 70 29 29 29 5d 0a 20 20 20 fail-exp)))].
d6a0: 20 20 20 20 20 20 20 20 20 5b 28 63 6f 6d 70 69 [(compi
d6b0: 6c 65 2d 63 6c 61 75 73 65 20 28 28 75 6e 71 75 le-clause ((unqu
d6c0: 6f 74 65 20 5b 63 76 61 72 20 2e 2e 2e 5d 29 20 ote [cvar ...])
d6d0: 28 67 75 61 72 64 20 67 65 78 70 20 2e 2e 2e 29 (guard gexp ...)
d6e0: 20 61 63 74 69 6f 6e 30 20 61 63 74 69 6f 6e 20 action0 action
d6f0: 2e 2e 2e 29 0a 20 20 20 20 20 20 20 20 20 20 20 ...).
d700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d710: 20 20 65 78 70 0a 20 20 20 20 20 20 20 20 20 20 exp.
d720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d730: 20 20 20 63 61 74 61 2d 66 75 6e 0a 20 20 20 20 cata-fun.
d740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d750: 20 20 20 20 20 20 20 20 20 66 61 69 6c 2d 65 78 fail-ex
d760: 70 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 p).
d770: 28 69 66 20 28 6e 6f 74 20 28 65 78 74 72 61 63 (if (not (extrac
d780: 74 2d 63 61 74 61 2d 66 75 6e 20 28 73 79 6e 74 t-cata-fun (synt
d790: 61 78 20 63 61 74 61 2d 66 75 6e 29 29 29 0a 20 ax cata-fun))).
d7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d7b0: 28 73 78 6d 6c 2d 6d 61 74 63 68 2d 73 79 6e 74 (sxml-match-synt
d7c0: 61 78 2d 65 72 72 6f 72 20 22 73 78 6d 6c 2d 6d ax-error "sxml-m
d7d0: 61 74 63 68 20 70 61 74 74 65 72 6e 3a 20 63 61 atch pattern: ca
d7e0: 74 61 6d 6f 72 70 68 69 73 6d 20 6e 6f 74 20 61 tamorphism not a
d7f0: 6c 6c 6f 77 65 64 20 69 6e 20 74 68 69 73 20 63 llowed in this c
d800: 6f 6e 74 65 78 74 22 0a 20 20 20 20 20 20 20 20 ontext".
d810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d830: 20 20 73 74 78 0a 20 20 20 20 20 20 20 20 20 20 stx.
d840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d860: 28 73 79 6e 74 61 78 20 5b 63 76 61 72 20 2e 2e (syntax [cvar ..
d870: 2e 5d 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 .])).
d880: 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 28 69 (syntax (i
d890: 66 20 28 61 6e 64 20 67 65 78 70 20 2e 2e 2e 29 f (and gexp ...)
d8a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
d8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c (l
d8c0: 65 74 2d 76 61 6c 75 65 73 20 28 5b 28 63 76 61 et-values ([(cva
d8d0: 72 20 2e 2e 2e 29 20 28 63 61 74 61 2d 66 75 6e r ...) (cata-fun
d8e0: 20 65 78 70 29 5d 29 0a 20 20 20 20 20 20 20 20 exp)]).
d8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d900: 20 20 20 20 20 20 20 28 62 65 67 69 6e 20 61 63 (begin ac
d910: 74 69 6f 6e 30 20 61 63 74 69 6f 6e 20 2e 2e 2e tion0 action ...
d920: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )).
d930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
d940: 28 66 61 69 6c 2d 65 78 70 29 29 29 29 5d 0a 20 (fail-exp))))].
d950: 20 20 20 20 20 20 20 20 20 20 20 5b 28 63 6f 6d [(com
d960: 70 69 6c 65 2d 63 6c 61 75 73 65 20 28 28 75 6e pile-clause ((un
d970: 71 75 6f 74 65 20 76 61 72 29 20 61 63 74 69 6f quote var) actio
d980: 6e 30 20 61 63 74 69 6f 6e 20 2e 2e 2e 29 20 65 n0 action ...) e
d990: 78 70 20 63 61 74 61 2d 66 75 6e 20 66 61 69 6c xp cata-fun fail
d9a0: 2d 65 78 70 29 0a 20 20 20 20 20 20 20 20 20 20 -exp).
d9b0: 20 20 20 28 69 64 65 6e 74 69 66 69 65 72 3f 20 (identifier?
d9c0: 28 73 79 6e 74 61 78 20 76 61 72 29 29 0a 20 20 (syntax var)).
d9d0: 20 20 20 20 20 20 20 20 20 20 20 28 73 79 6e 74 (synt
d9e0: 61 78 20 28 6c 65 74 20 28 5b 76 61 72 20 65 78 ax (let ([var ex
d9f0: 70 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 p]).
da00: 20 20 20 20 20 20 20 20 20 20 20 61 63 74 69 6f actio
da10: 6e 30 20 61 63 74 69 6f 6e 20 2e 2e 2e 29 29 5d n0 action ...))]
da20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 28 63 . [(c
da30: 6f 6d 70 69 6c 65 2d 63 6c 61 75 73 65 20 28 28 ompile-clause ((
da40: 75 6e 71 75 6f 74 65 20 5b 63 61 74 61 20 2d 3e unquote [cata ->
da50: 20 63 76 61 72 20 2e 2e 2e 5d 29 20 61 63 74 69 cvar ...]) acti
da60: 6f 6e 30 20 61 63 74 69 6f 6e 20 2e 2e 2e 29 20 on0 action ...)
da70: 65 78 70 20 63 61 74 61 2d 66 75 6e 20 66 61 69 exp cata-fun fai
da80: 6c 2d 65 78 70 29 0a 20 20 20 20 20 20 20 20 20 l-exp).
da90: 20 20 20 20 28 73 79 6e 74 61 78 20 28 6c 65 74 (syntax (let
daa0: 2d 76 61 6c 75 65 73 20 28 5b 28 63 76 61 72 20 -values ([(cvar
dab0: 2e 2e 2e 29 20 28 63 61 74 61 20 65 78 70 29 5d ...) (cata exp)]
dac0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
dad0: 20 20 20 20 20 20 20 20 20 61 63 74 69 6f 6e 30 action0
dae0: 20 61 63 74 69 6f 6e 20 2e 2e 2e 29 29 5d 0a 20 action ...))].
daf0: 20 20 20 20 20 20 20 20 20 20 20 5b 28 63 6f 6d [(com
db00: 70 69 6c 65 2d 63 6c 61 75 73 65 20 28 28 75 6e pile-clause ((un
db10: 71 75 6f 74 65 20 5b 63 76 61 72 20 2e 2e 2e 5d quote [cvar ...]
db20: 29 20 61 63 74 69 6f 6e 30 20 61 63 74 69 6f 6e ) action0 action
db30: 20 2e 2e 2e 29 20 65 78 70 20 63 61 74 61 2d 66 ...) exp cata-f
db40: 75 6e 20 66 61 69 6c 2d 65 78 70 29 0a 20 20 20 un fail-exp).
db50: 20 20 20 20 20 20 20 20 20 20 28 69 66 20 28 6e (if (n
db60: 6f 74 20 28 65 78 74 72 61 63 74 2d 63 61 74 61 ot (extract-cata
db70: 2d 66 75 6e 20 28 73 79 6e 74 61 78 20 63 61 74 -fun (syntax cat
db80: 61 2d 66 75 6e 29 29 29 0a 20 20 20 20 20 20 20 a-fun))).
db90: 20 20 20 20 20 20 20 20 20 20 28 73 78 6d 6c 2d (sxml-
dba0: 6d 61 74 63 68 2d 73 79 6e 74 61 78 2d 65 72 72 match-syntax-err
dbb0: 6f 72 20 22 73 78 6d 6c 2d 6d 61 74 63 68 20 70 or "sxml-match p
dbc0: 61 74 74 65 72 6e 3a 20 63 61 74 61 6d 6f 72 70 attern: catamorp
dbd0: 68 69 73 6d 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 hism not allowed
dbe0: 20 69 6e 20 74 68 69 73 20 63 6f 6e 74 65 78 74 in this context
dbf0: 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ".
dc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dc10: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 78 0a stx.
dc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dc40: 20 20 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 (synta
dc50: 78 20 5b 63 76 61 72 20 2e 2e 2e 5d 29 29 0a 20 x [cvar ...])).
dc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dc70: 28 73 79 6e 74 61 78 20 28 6c 65 74 2d 76 61 6c (syntax (let-val
dc80: 75 65 73 20 28 5b 28 63 76 61 72 20 2e 2e 2e 29 ues ([(cvar ...)
dc90: 20 28 63 61 74 61 2d 66 75 6e 20 65 78 70 29 5d (cata-fun exp)]
dca0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
dcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 63 74 act
dcc0: 69 6f 6e 30 20 61 63 74 69 6f 6e 20 2e 2e 2e 29 ion0 action ...)
dcd0: 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))].
dce0: 5b 28 63 6f 6d 70 69 6c 65 2d 63 6c 61 75 73 65 [(compile-clause
dcf0: 20 28 28 6c 73 74 20 2e 20 72 73 74 29 20 28 67 ((lst . rst) (g
dd00: 75 61 72 64 20 67 65 78 70 20 2e 2e 2e 29 20 61 uard gexp ...) a
dd10: 63 74 69 6f 6e 30 20 61 63 74 69 6f 6e 20 2e 2e ction0 action ..
dd20: 2e 29 20 65 78 70 20 63 61 74 61 2d 66 75 6e 20 .) exp cata-fun
dd30: 66 61 69 6c 2d 65 78 70 29 0a 20 20 20 20 20 20 fail-exp).
dd40: 20 20 20 20 20 20 20 28 61 6e 64 20 28 69 64 65 (and (ide
dd50: 6e 74 69 66 69 65 72 3f 20 28 73 79 6e 74 61 78 ntifier? (syntax
dd60: 20 6c 73 74 29 29 20 28 65 71 3f 20 27 6c 69 73 lst)) (eq? 'lis
dd70: 74 20 28 73 79 6e 74 61 78 2d 6f 62 6a 65 63 74 t (syntax-object
dd80: 2d 3e 64 61 74 75 6d 20 28 73 79 6e 74 61 78 20 ->datum (syntax
dd90: 6c 73 74 29 29 29 29 0a 20 20 20 20 20 20 20 20 lst)))).
dda0: 20 20 20 20 20 28 6c 65 74 2d 76 61 6c 75 65 73 (let-values
ddb0: 20 28 5b 28 72 65 73 75 6c 74 20 70 76 61 72 2d ([(result pvar-
ddc0: 6c 73 74 20 63 61 74 61 2d 64 65 66 73 20 64 6f lst cata-defs do
ddd0: 74 74 65 64 2d 76 61 72 73 29 0a 20 20 20 20 20 tted-vars).
dde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ddf0: 20 20 20 20 20 20 28 63 6f 6d 70 69 6c 65 2d 69 (compile-i
de00: 74 65 6d 2d 6c 69 73 74 20 28 73 79 6e 74 61 78 tem-list (syntax
de10: 20 72 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 rst).
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
de30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
de40: 20 20 20 20 28 73 79 6e 74 61 78 20 65 78 70 29 (syntax exp)
de50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
de60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
de70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
de80: 6c 61 6d 62 64 61 20 28 6e 65 77 2d 70 76 61 72 lambda (new-pvar
de90: 2d 6c 73 74 20 6e 65 77 2d 63 61 74 61 2d 64 65 -lst new-cata-de
dea0: 66 73 20 6e 65 77 2d 64 6f 74 74 65 64 2d 76 61 fs new-dotted-va
deb0: 72 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 rs).
dec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ded0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dee0: 20 20 20 20 28 76 61 6c 75 65 73 0a 20 20 20 20 (values.
def0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
df00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
df10: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 69 (wi
df20: 74 68 2d 73 79 6e 74 61 78 0a 20 20 20 20 20 20 th-syntax.
df30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
df40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
df50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
df60: 5b 65 78 70 2d 62 6f 64 79 20 28 70 72 6f 63 65 [exp-body (proce
df70: 73 73 2d 63 61 74 61 2d 64 65 66 73 20 6e 65 77 ss-cata-defs new
df80: 2d 63 61 74 61 2d 64 65 66 73 0a 20 20 20 20 20 -cata-defs.
df90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
dfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 (p
dfe0: 72 6f 63 65 73 73 2d 6f 75 74 70 75 74 2d 61 63 rocess-output-ac
dff0: 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 tion.
e000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e040: 20 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 (syntax
e050: 20 28 62 65 67 69 6e 20 61 63 74 69 6f 6e 30 0a (begin action0.
e060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e0c0: 20 20 20 61 63 74 69 6f 6e 20 2e 2e 2e 29 29 0a action ...)).
e0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e120: 20 20 20 20 6e 65 77 2d 64 6f 74 74 65 64 2d 76 new-dotted-v
e130: 61 72 73 29 29 5d 0a 20 20 20 20 20 20 20 20 20 ars))].
e140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e160: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 61 [fa
e170: 69 6c 2d 74 6f 20 66 61 69 6c 2d 6b 5d 29 0a 20 il-to fail-k]).
e180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e1b0: 20 20 28 73 79 6e 74 61 78 20 28 69 66 20 28 61 (syntax (if (a
e1c0: 6e 64 20 67 65 78 70 20 2e 2e 2e 29 20 65 78 70 nd gexp ...) exp
e1d0: 2d 62 6f 64 79 20 28 66 61 69 6c 2d 74 6f 29 29 -body (fail-to))
e1e0: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )).
e1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e210: 20 20 20 20 6e 65 77 2d 70 76 61 72 2d 6c 73 74 new-pvar-lst
e220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
e230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e250: 20 20 6e 65 77 2d 63 61 74 61 2d 64 65 66 73 0a new-cata-defs.
e260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e290: 20 6e 65 77 2d 64 6f 74 74 65 64 2d 76 61 72 73 new-dotted-vars
e2a0: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )).
e2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e2d0: 20 66 61 69 6c 2d 6b 0a 20 20 20 20 20 20 20 20 fail-k.
e2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e300: 20 20 20 20 20 20 23 74 0a 20 20 20 20 20 20 20 #t.
e310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e330: 20 20 20 20 20 20 20 27 28 29 0a 20 20 20 20 20 '().
e340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e360: 20 20 20 20 20 20 20 20 20 30 0a 20 20 20 20 20 0.
e370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e390: 20 20 20 20 20 20 20 20 20 28 65 78 74 72 61 63 (extrac
e3a0: 74 2d 63 61 74 61 2d 66 75 6e 20 28 73 79 6e 74 t-cata-fun (synt
e3b0: 61 78 20 63 61 74 61 2d 66 75 6e 29 29 0a 20 20 ax cata-fun)).
e3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e3e0: 20 20 20 20 20 20 20 20 20 20 20 20 27 28 29 0a '().
e3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 28 '(
e420: 29 29 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 ))]).
e430: 20 20 20 20 28 77 69 74 68 2d 73 79 6e 74 61 78 (with-syntax
e440: 20 28 5b 66 61 69 6c 2d 74 6f 20 66 61 69 6c 2d ([fail-to fail-
e450: 6b 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 k].
e460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e470: 5b 62 6f 64 79 20 72 65 73 75 6c 74 5d 29 0a 20 [body result]).
e480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e490: 28 73 79 6e 74 61 78 20 28 6c 65 74 20 28 5b 66 (syntax (let ([f
e4a0: 61 69 6c 2d 74 6f 20 66 61 69 6c 2d 65 78 70 5d ail-to fail-exp]
e4b0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
e4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 66 (if
e4d0: 20 28 6e 6f 64 65 73 65 74 3f 20 65 78 70 29 0a (nodeset? exp).
e4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 b
e500: 6f 64 79 0a 20 20 20 20 20 20 20 20 20 20 20 20 ody.
e510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e520: 20 20 20 28 66 61 69 6c 2d 74 6f 29 29 29 29 29 (fail-to)))))
e530: 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b )]. [
e540: 28 63 6f 6d 70 69 6c 65 2d 63 6c 61 75 73 65 20 (compile-clause
e550: 28 28 6c 73 74 20 2e 20 72 73 74 29 20 61 63 74 ((lst . rst) act
e560: 69 6f 6e 30 20 61 63 74 69 6f 6e 20 2e 2e 2e 29 ion0 action ...)
e570: 20 65 78 70 20 63 61 74 61 2d 66 75 6e 20 66 61 exp cata-fun fa
e580: 69 6c 2d 65 78 70 29 0a 20 20 20 20 20 20 20 20 il-exp).
e590: 20 20 20 20 20 28 61 6e 64 20 28 69 64 65 6e 74 (and (ident
e5a0: 69 66 69 65 72 3f 20 28 73 79 6e 74 61 78 20 6c ifier? (syntax l
e5b0: 73 74 29 29 20 28 65 71 3f 20 27 6c 69 73 74 20 st)) (eq? 'list
e5c0: 28 73 79 6e 74 61 78 2d 6f 62 6a 65 63 74 2d 3e (syntax-object->
e5d0: 64 61 74 75 6d 20 28 73 79 6e 74 61 78 20 6c 73 datum (syntax ls
e5e0: 74 29 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 t)))).
e5f0: 20 20 20 28 6c 65 74 2d 76 61 6c 75 65 73 20 28 (let-values (
e600: 5b 28 72 65 73 75 6c 74 20 70 76 61 72 2d 6c 73 [(result pvar-ls
e610: 74 20 63 61 74 61 2d 64 65 66 73 20 64 6f 74 74 t cata-defs dott
e620: 65 64 2d 76 61 72 73 29 0a 20 20 20 20 20 20 20 ed-vars).
e630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e640: 20 20 20 20 28 63 6f 6d 70 69 6c 65 2d 69 74 65 (compile-ite
e650: 6d 2d 6c 69 73 74 20 28 73 79 6e 74 61 78 20 72 m-list (syntax r
e660: 73 74 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 st).
e670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e690: 20 20 28 73 79 6e 74 61 78 20 65 78 70 29 0a 20 (syntax exp).
e6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 61 (la
e6d0: 6d 62 64 61 20 28 6e 65 77 2d 70 76 61 72 2d 6c mbda (new-pvar-l
e6e0: 73 74 20 6e 65 77 2d 63 61 74 61 2d 64 65 66 73 st new-cata-defs
e6f0: 20 6e 65 77 2d 64 6f 74 74 65 64 2d 76 61 72 73 new-dotted-vars
e700: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
e710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e730: 20 20 28 76 61 6c 75 65 73 20 28 70 72 6f 63 65 (values (proce
e740: 73 73 2d 63 61 74 61 2d 64 65 66 73 20 6e 65 77 ss-cata-defs new
e750: 2d 63 61 74 61 2d 64 65 66 73 0a 20 20 20 20 20 -cata-defs.
e760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e7a0: 20 20 20 20 20 20 28 70 72 6f 63 65 73 73 2d 6f (process-o
e7b0: 75 74 70 75 74 2d 61 63 74 69 6f 6e 0a 20 20 20 utput-action.
e7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e800: 20 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 (syntax
e810: 20 28 62 65 67 69 6e 20 61 63 74 69 6f 6e 30 0a (begin action0.
e820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e870: 20 20 20 20 20 20 20 20 20 20 20 61 63 74 69 6f actio
e880: 6e 20 2e 2e 2e 29 29 0a 20 20 20 20 20 20 20 20 n ...)).
e890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e8d0: 20 20 20 20 6e 65 77 2d 64 6f 74 74 65 64 2d 76 new-dotted-v
e8e0: 61 72 73 29 29 0a 20 20 20 20 20 20 20 20 20 20 ars)).
e8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 ne
e920: 77 2d 70 76 61 72 2d 6c 73 74 0a 20 20 20 20 20 w-pvar-lst.
e930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e960: 20 20 20 6e 65 77 2d 63 61 74 61 2d 64 65 66 73 new-cata-defs
e970: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
e980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e9a0: 20 20 20 20 20 20 20 20 20 6e 65 77 2d 64 6f 74 new-dot
e9b0: 74 65 64 2d 76 61 72 73 29 29 0a 20 20 20 20 20 ted-vars)).
e9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
e9e0: 20 20 20 20 20 20 20 20 20 66 61 69 6c 2d 6b 0a fail-k.
e9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ea00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ea10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 74 #t
ea20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
ea30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ea40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 '
ea50: 28 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ().
ea60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ea70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ea80: 20 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 0.
ea90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
eaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
eab0: 20 28 65 78 74 72 61 63 74 2d 63 61 74 61 2d 66 (extract-cata-f
eac0: 75 6e 20 28 73 79 6e 74 61 78 20 63 61 74 61 2d un (syntax cata-
ead0: 66 75 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 fun)).
eae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
eaf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
eb00: 20 20 20 20 27 28 29 0a 20 20 20 20 20 20 20 20 '().
eb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
eb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
eb30: 20 20 20 20 20 20 27 28 29 29 5d 29 0a 20 20 20 '())]).
eb40: 20 20 20 20 20 20 20 20 20 20 20 20 28 77 69 74 (wit
eb50: 68 2d 73 79 6e 74 61 78 20 28 5b 62 6f 64 79 20 h-syntax ([body
eb60: 72 65 73 75 6c 74 5d 0a 20 20 20 20 20 20 20 20 result].
eb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
eb80: 20 20 20 20 20 5b 66 61 69 6c 2d 74 6f 20 66 61 [fail-to fa
eb90: 69 6c 2d 6b 5d 29 0a 20 20 20 20 20 20 20 20 20 il-k]).
eba0: 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 (syntax
ebb0: 28 6c 65 74 20 28 5b 66 61 69 6c 2d 74 6f 20 66 (let ([fail-to f
ebc0: 61 69 6c 2d 65 78 70 5d 29 0a 20 20 20 20 20 20 ail-exp]).
ebd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ebe0: 20 20 20 20 20 28 69 66 20 28 6e 6f 64 65 73 65 (if (nodese
ebf0: 74 3f 20 65 78 70 29 0a 20 20 20 20 20 20 20 20 t? exp).
ec00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ec10: 20 20 20 20 20 20 20 62 6f 64 79 0a 20 20 20 20 body.
ec20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ec30: 20 20 20 20 20 20 20 20 20 20 20 28 66 61 69 6c (fail
ec40: 2d 74 6f 29 29 29 29 29 29 5d 0a 20 20 20 20 20 -to))))))].
ec50: 20 20 20 20 20 20 20 5b 28 63 6f 6d 70 69 6c 65 [(compile
ec60: 2d 63 6c 61 75 73 65 20 28 28 66 73 74 20 2e 20 -clause ((fst .
ec70: 72 73 74 29 20 28 67 75 61 72 64 20 67 65 78 70 rst) (guard gexp
ec80: 20 2e 2e 2e 29 20 61 63 74 69 6f 6e 30 20 61 63 ...) action0 ac
ec90: 74 69 6f 6e 20 2e 2e 2e 29 20 65 78 70 20 63 61 tion ...) exp ca
eca0: 74 61 2d 66 75 6e 20 66 61 69 6c 2d 65 78 70 29 ta-fun fail-exp)
ecb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 . (i
ecc0: 64 65 6e 74 69 66 69 65 72 3f 20 28 73 79 6e 74 dentifier? (synt
ecd0: 61 78 20 66 73 74 29 29 0a 20 20 20 20 20 20 20 ax fst)).
ece0: 20 20 20 20 20 20 28 6c 65 74 2d 76 61 6c 75 65 (let-value
ecf0: 73 20 28 5b 28 72 65 73 75 6c 74 20 70 76 61 72 s ([(result pvar
ed00: 2d 6c 73 74 20 63 61 74 61 2d 64 65 66 73 20 64 -lst cata-defs d
ed10: 6f 74 74 65 64 2d 76 61 72 73 29 0a 20 20 20 20 otted-vars).
ed20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ed30: 20 20 20 20 20 20 20 28 63 6f 6d 70 69 6c 65 2d (compile-
ed40: 65 6c 65 6d 65 6e 74 2d 70 61 74 20 28 73 79 6e element-pat (syn
ed50: 74 61 78 20 28 66 73 74 20 2e 20 72 73 74 29 29 tax (fst . rst))
ed60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
ed70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ed80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ed90: 20 28 73 79 6e 74 61 78 20 65 78 70 29 0a 20 20 (syntax exp).
eda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
edb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
edc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c (l
edd0: 61 6d 62 64 61 20 28 6e 65 77 2d 70 76 61 72 2d ambda (new-pvar-
ede0: 6c 73 74 20 6e 65 77 2d 63 61 74 61 2d 64 65 66 lst new-cata-def
edf0: 73 20 6e 65 77 2d 64 6f 74 74 65 64 2d 76 61 72 s new-dotted-var
ee00: 73 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 s).
ee10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ee20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ee30: 20 20 20 20 20 28 76 61 6c 75 65 73 0a 20 20 20 (values.
ee40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ee50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ee60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ee70: 28 77 69 74 68 2d 73 79 6e 74 61 78 0a 20 20 20 (with-syntax.
ee80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ee90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
eea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
eeb0: 20 20 20 20 28 5b 62 6f 64 79 20 28 70 72 6f 63 ([body (proc
eec0: 65 73 73 2d 63 61 74 61 2d 64 65 66 73 20 6e 65 ess-cata-defs ne
eed0: 77 2d 63 61 74 61 2d 64 65 66 73 0a 20 20 20 20 w-cata-defs.
eee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
eef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ef00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ef10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ef20: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70 72 (pr
ef30: 6f 63 65 73 73 2d 6f 75 74 70 75 74 2d 61 63 74 ocess-output-act
ef40: 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 ion.
ef50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ef60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ef70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ef80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ef90: 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 28 62 (syntax (b
efa0: 65 67 69 6e 20 61 63 74 69 6f 6e 30 0a 20 20 20 egin action0.
efb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
efc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
efd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
efe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
eff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 63 ac
f010: 74 69 6f 6e 20 2e 2e 2e 29 29 0a 20 20 20 20 20 tion ...)).
f020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f060: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 new
f070: 2d 64 6f 74 74 65 64 2d 76 61 72 73 29 29 5d 0a -dotted-vars))].
f080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f0b0: 20 20 20 20 20 20 20 20 5b 66 61 69 6c 2d 74 6f [fail-to
f0c0: 20 66 61 69 6c 2d 6b 5d 29 0a 20 20 20 20 20 20 fail-k]).
f0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
f100: 73 79 6e 74 61 78 20 28 69 66 20 28 61 6e 64 20 syntax (if (and
f110: 67 65 78 70 20 2e 2e 2e 29 20 62 6f 64 79 20 28 gexp ...) body (
f120: 66 61 69 6c 2d 74 6f 29 29 29 29 0a 20 20 20 20 fail-to)))).
f130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e n
f160: 65 77 2d 70 76 61 72 2d 6c 73 74 0a 20 20 20 20 ew-pvar-lst.
f170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e n
f1a0: 65 77 2d 63 61 74 61 2d 64 65 66 73 0a 20 20 20 ew-cata-defs.
f1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f1e0: 6e 65 77 2d 64 6f 74 74 65 64 2d 76 61 72 73 29 new-dotted-vars)
f1f0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ).
f200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f220: 20 20 66 61 69 6c 2d 6b 0a 20 20 20 20 20 20 20 fail-k.
f230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f250: 20 20 20 20 20 20 20 20 20 27 28 29 0a 20 20 20 '().
f260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f280: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 0a 20 0.
f290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 (
f2c0: 65 78 74 72 61 63 74 2d 63 61 74 61 2d 66 75 6e extract-cata-fun
f2d0: 20 28 73 79 6e 74 61 78 20 63 61 74 61 2d 66 75 (syntax cata-fu
f2e0: 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 n)).
f2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f310: 20 20 20 20 27 28 29 0a 20 20 20 20 20 20 20 20 '().
f320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f340: 20 20 20 20 20 20 20 20 27 28 29 29 5d 29 0a 20 '())]).
f350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 (w
f360: 69 74 68 2d 73 79 6e 74 61 78 20 28 5b 66 61 69 ith-syntax ([fai
f370: 6c 2d 74 6f 20 66 61 69 6c 2d 6b 5d 0a 20 20 20 l-to fail-k].
f380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f390: 20 20 20 20 20 20 20 20 20 20 5b 62 6f 64 79 20 [body
f3a0: 72 65 73 75 6c 74 5d 29 0a 20 20 20 20 20 20 20 result]).
f3b0: 20 20 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 (synta
f3c0: 78 20 28 6c 65 74 20 28 5b 66 61 69 6c 2d 74 6f x (let ([fail-to
f3d0: 20 66 61 69 6c 2d 65 78 70 5d 29 0a 20 20 20 20 fail-exp]).
f3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f3f0: 20 20 20 20 20 20 20 62 6f 64 79 29 29 29 29 5d body))))]
f400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 28 63 . [(c
f410: 6f 6d 70 69 6c 65 2d 63 6c 61 75 73 65 20 28 28 ompile-clause ((
f420: 66 73 74 20 2e 20 72 73 74 29 20 61 63 74 69 6f fst . rst) actio
f430: 6e 30 20 61 63 74 69 6f 6e 20 2e 2e 2e 29 20 65 n0 action ...) e
f440: 78 70 20 63 61 74 61 2d 66 75 6e 20 66 61 69 6c xp cata-fun fail
f450: 2d 65 78 70 29 0a 20 20 20 20 20 20 20 20 20 20 -exp).
f460: 20 20 20 28 69 64 65 6e 74 69 66 69 65 72 3f 20 (identifier?
f470: 28 73 79 6e 74 61 78 20 66 73 74 29 29 0a 20 20 (syntax fst)).
f480: 20 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 2d (let-
f490: 76 61 6c 75 65 73 20 28 5b 28 72 65 73 75 6c 74 values ([(result
f4a0: 20 70 76 61 72 2d 6c 73 74 20 63 61 74 61 2d 64 pvar-lst cata-d
f4b0: 65 66 73 20 64 6f 74 74 65 64 2d 76 61 72 73 29 efs dotted-vars)
f4c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
f4d0: 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f 6d (com
f4e0: 70 69 6c 65 2d 65 6c 65 6d 65 6e 74 2d 70 61 74 pile-element-pat
f4f0: 20 28 73 79 6e 74 61 78 20 28 66 73 74 20 2e 20 (syntax (fst .
f500: 72 73 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 rst)).
f510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f530: 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 65 78 (syntax ex
f540: 70 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 p).
f550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f570: 20 20 20 28 6c 61 6d 62 64 61 20 28 6e 65 77 2d (lambda (new-
f580: 70 76 61 72 2d 6c 73 74 20 6e 65 77 2d 63 61 74 pvar-lst new-cat
f590: 61 2d 64 65 66 73 20 6e 65 77 2d 64 6f 74 74 65 a-defs new-dotte
f5a0: 64 2d 76 61 72 73 29 0a 20 20 20 20 20 20 20 20 d-vars).
f5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f5d0: 20 20 20 20 20 20 20 20 20 20 28 76 61 6c 75 65 (value
f5e0: 73 20 28 70 72 6f 63 65 73 73 2d 63 61 74 61 2d s (process-cata-
f5f0: 64 65 66 73 20 6e 65 77 2d 63 61 74 61 2d 64 65 defs new-cata-de
f600: 66 73 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 fs.
f610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f650: 28 70 72 6f 63 65 73 73 2d 6f 75 74 70 75 74 2d (process-output-
f660: 61 63 74 69 6f 6e 0a 20 20 20 20 20 20 20 20 20 action.
f670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f6b0: 20 20 20 20 20 28 73 79 6e 74 61 78 20 28 62 65 (syntax (be
f6c0: 67 69 6e 20 61 63 74 69 6f 6e 30 0a 20 20 20 20 gin action0.
f6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f720: 20 20 20 20 20 20 20 20 20 61 63 74 69 6f 6e 20 action
f730: 2e 2e 2e 29 29 0a 20 20 20 20 20 20 20 20 20 20 ...)).
f740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f780: 20 20 20 20 6e 65 77 2d 64 6f 74 74 65 64 2d 76 new-dotted-v
f790: 61 72 73 29 29 0a 20 20 20 20 20 20 20 20 20 20 ars)).
f7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f7d0: 6e 65 77 2d 70 76 61 72 2d 6c 73 74 0a 20 20 20 new-pvar-lst.
f7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f810: 20 20 20 20 20 20 20 6e 65 77 2d 63 61 74 61 2d new-cata-
f820: 64 65 66 73 0a 20 20 20 20 20 20 20 20 20 20 20 defs.
f830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e n
f860: 65 77 2d 64 6f 74 74 65 64 2d 76 61 72 73 29 29 ew-dotted-vars))
f870: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
f880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f8a0: 20 66 61 69 6c 2d 6b 0a 20 20 20 20 20 20 20 20 fail-k.
f8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f8d0: 20 20 20 20 20 20 20 20 27 28 29 0a 20 20 20 20 '().
f8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f900: 20 20 20 20 20 20 20 20 20 20 20 20 30 0a 20 20 0.
f910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 65 (e
f940: 78 74 72 61 63 74 2d 63 61 74 61 2d 66 75 6e 20 xtract-cata-fun
f950: 28 73 79 6e 74 61 78 20 63 61 74 61 2d 66 75 6e (syntax cata-fun
f960: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )).
f970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f990: 20 20 20 27 28 29 0a 20 20 20 20 20 20 20 20 20 '().
f9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
f9c0: 20 20 20 20 20 20 20 27 28 29 29 5d 29 0a 20 20 '())]).
f9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 69 (wi
f9e0: 74 68 2d 73 79 6e 74 61 78 20 28 5b 66 61 69 6c th-syntax ([fail
f9f0: 2d 74 6f 20 66 61 69 6c 2d 6b 5d 0a 20 20 20 20 -to fail-k].
fa00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
fa10: 20 20 20 20 20 20 20 20 20 5b 62 6f 64 79 20 72 [body r
fa20: 65 73 75 6c 74 5d 29 0a 20 20 20 20 20 20 20 20 esult]).
fa30: 20 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 (syntax
fa40: 20 28 6c 65 74 20 28 5b 66 61 69 6c 2d 74 6f 20 (let ([fail-to
fa50: 66 61 69 6c 2d 65 78 70 5d 29 0a 20 20 20 20 20 fail-exp]).
fa60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
fa70: 20 20 20 20 20 20 62 6f 64 79 29 29 29 29 5d 0a body))))].
fa80: 20 20 20 20 20 20 20 20 20 20 20 20 5b 28 63 6f [(co
fa90: 6d 70 69 6c 65 2d 63 6c 61 75 73 65 20 28 28 69 mpile-clause ((i
faa0: 20 2e 2e 2e 29 20 28 67 75 61 72 64 20 67 65 78 ...) (guard gex
fab0: 70 20 2e 2e 2e 29 20 61 63 74 69 6f 6e 30 20 61 p ...) action0 a
fac0: 63 74 69 6f 6e 20 2e 2e 2e 29 20 65 78 70 20 63 ction ...) exp c
fad0: 61 74 61 2d 66 75 6e 20 66 61 69 6c 2d 65 78 70 ata-fun fail-exp
fae0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 ). (
faf0: 73 78 6d 6c 2d 6d 61 74 63 68 2d 73 79 6e 74 61 sxml-match-synta
fb00: 78 2d 65 72 72 6f 72 20 22 62 61 64 20 70 61 74 x-error "bad pat
fb10: 74 65 72 6e 20 73 79 6e 74 61 78 20 28 6e 6f 74 tern syntax (not
fb20: 20 61 6e 20 65 6c 65 6d 65 6e 74 20 70 61 74 74 an element patt
fb30: 65 72 6e 29 22 0a 20 20 20 20 20 20 20 20 20 20 ern)".
fb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
fb50: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 78 0a stx.
fb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
fb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
fb80: 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 28 69 (syntax (i
fb90: 20 2e 2e 2e 29 29 29 5d 0a 20 20 20 20 20 20 20 ...)))].
fba0: 20 20 20 20 20 5b 28 63 6f 6d 70 69 6c 65 2d 63 [(compile-c
fbb0: 6c 61 75 73 65 20 28 28 69 20 2e 2e 2e 29 20 61 lause ((i ...) a
fbc0: 63 74 69 6f 6e 30 20 61 63 74 69 6f 6e 20 2e 2e ction0 action ..
fbd0: 2e 29 20 65 78 70 20 63 61 74 61 2d 66 75 6e 20 .) exp cata-fun
fbe0: 66 61 69 6c 2d 65 78 70 29 0a 20 20 20 20 20 20 fail-exp).
fbf0: 20 20 20 20 20 20 20 28 73 78 6d 6c 2d 6d 61 74 (sxml-mat
fc00: 63 68 2d 73 79 6e 74 61 78 2d 65 72 72 6f 72 20 ch-syntax-error
fc10: 22 62 61 64 20 70 61 74 74 65 72 6e 20 73 79 6e "bad pattern syn
fc20: 74 61 78 20 28 6e 6f 74 20 61 6e 20 65 6c 65 6d tax (not an elem
fc30: 65 6e 74 20 70 61 74 74 65 72 6e 29 22 0a 20 20 ent pattern)".
fc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
fc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
fc60: 20 20 20 20 73 74 78 0a 20 20 20 20 20 20 20 20 stx.
fc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
fc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 (s
fc90: 79 6e 74 61 78 20 28 69 20 2e 2e 2e 29 29 29 5d yntax (i ...)))]
fca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 28 63 . [(c
fcb0: 6f 6d 70 69 6c 65 2d 63 6c 61 75 73 65 20 28 70 ompile-clause (p
fcc0: 61 74 20 28 67 75 61 72 64 20 67 65 78 70 20 2e at (guard gexp .
fcd0: 2e 2e 29 20 61 63 74 69 6f 6e 30 20 61 63 74 69 ..) action0 acti
fce0: 6f 6e 20 2e 2e 2e 29 20 65 78 70 20 63 61 74 61 on ...) exp cata
fcf0: 2d 66 75 6e 20 66 61 69 6c 2d 65 78 70 29 0a 20 -fun fail-exp).
fd00: 20 20 20 20 20 20 20 20 20 20 20 20 28 69 64 65 (ide
fd10: 6e 74 69 66 69 65 72 3f 20 28 73 79 6e 74 61 78 ntifier? (syntax
fd20: 20 70 61 74 29 29 0a 20 20 20 20 20 20 20 20 20 pat)).
fd30: 20 20 20 20 28 73 78 6d 6c 2d 6d 61 74 63 68 2d (sxml-match-
fd40: 73 79 6e 74 61 78 2d 65 72 72 6f 72 20 22 62 61 syntax-error "ba
fd50: 64 20 70 61 74 74 65 72 6e 20 73 79 6e 74 61 78 d pattern syntax
fd60: 20 28 73 79 6d 62 6f 6c 20 6e 6f 74 20 61 6c 6c (symbol not all
fd70: 6f 77 65 64 20 69 6e 20 74 68 69 73 20 63 6f 6e owed in this con
fd80: 74 65 78 74 29 22 0a 20 20 20 20 20 20 20 20 20 text)".
fd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
fda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 78 stx
fdb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
fdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
fdd0: 20 20 20 20 20 20 20 28 73 79 6e 74 61 78 20 70 (syntax p
fde0: 61 74 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 at))].
fdf0: 20 20 5b 28 63 6f 6d 70 69 6c 65 2d 63 6c 61 75 [(compile-clau
fe00: 73 65 20 28 70 61 74 20 61 63 74 69 6f 6e 30 20 se (pat action0
fe10: 61 63 74 69 6f 6e 20 2e 2e 2e 29 20 65 78 70 20 action ...) exp
fe20: 63 61 74 61 2d 66 75 6e 20 66 61 69 6c 2d 65 78 cata-fun fail-ex
fe30: 70 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 p).
fe40: 28 69 64 65 6e 74 69 66 69 65 72 3f 20 28 73 79 (identifier? (sy
fe50: 6e 74 61 78 20 70 61 74 29 29 0a 20 20 20 20 20 ntax pat)).
fe60: 20 20 20 20 20 20 20 20 28 73 78 6d 6c 2d 6d 61 (sxml-ma
fe70: 74 63 68 2d 73 79 6e 74 61 78 2d 65 72 72 6f 72 tch-syntax-error
fe80: 20 22 62 61 64 20 70 61 74 74 65 72 6e 20 73 79 "bad pattern sy
fe90: 6e 74 61 78 20 28 73 79 6d 62 6f 6c 20 6e 6f 74 ntax (symbol not
fea0: 20 61 6c 6c 6f 77 65 64 20 69 6e 20 74 68 69 73 allowed in this
feb0: 20 63 6f 6e 74 65 78 74 29 22 0a 20 20 20 20 20 context)".
fec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
fed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
fee0: 20 73 74 78 0a 20 20 20 20 20 20 20 20 20 20 20 stx.
fef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
ff00: 20 20 20 20 20 20 20 20 20 20 20 28 73 79 6e 74 (synt
ff10: 61 78 20 70 61 74 29 29 5d 0a 20 20 20 20 20 20 ax pat))].
ff20: 20 20 20 20 20 20 5b 28 63 6f 6d 70 69 6c 65 2d [(compile-
ff30: 63 6c 61 75 73 65 20 28 6c 69 74 65 72 61 6c 20 clause (literal
ff40: 28 67 75 61 72 64 20 67 65 78 70 20 2e 2e 2e 29 (guard gexp ...)
ff50: 20 61 63 74 69 6f 6e 30 20 61 63 74 69 6f 6e 20 action0 action
ff60: 2e 2e 2e 29 20 65 78 70 20 63 61 74 61 2d 66 75 ...) exp cata-fu
ff70: 6e 20 66 61 69 6c 2d 65 78 70 29 0a 20 20 20 20 n fail-exp).
ff80: 20 20 20 20 20 20 20 20 20 28 6c 69 74 65 72 61 (litera
ff90: 6c 3f 20 28 73 79 6e 74 61 78 20 6c 69 74 65 72 l? (syntax liter
ffa0: 61 6c 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 al)).
ffb0: 20 20 28 73 79 6e 74 61 78 20 28 69 66 20 28 61 (syntax (if (a
ffc0: 6e 64 20 28 65 71 75 61 6c 3f 20 6c 69 74 65 72 nd (equal? liter
ffd0: 61 6c 20 65 78 70 29 20 28 61 6e 64 20 67 65 78 al exp) (and gex
ffe0: 70 20 2e 2e 2e 29 29 0a 20 20 20 20 20 20 20 20 p ...)).
fff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10000 20 28 62 65 67 69 6e 20 61 63 74 69 6f 6e 30 20 (begin action0
10010 61 63 74 69 6f 6e 20 2e 2e 2e 29 0a 20 20 20 20 action ...).
10020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10030 20 20 20 20 20 28 66 61 69 6c 2d 65 78 70 29 29 (fail-exp))
10040 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b )]. [
10050 28 63 6f 6d 70 69 6c 65 2d 63 6c 61 75 73 65 20 (compile-clause
10060 28 6c 69 74 65 72 61 6c 20 61 63 74 69 6f 6e 30 (literal action0
10070 20 61 63 74 69 6f 6e 20 2e 2e 2e 29 20 65 78 70 action ...) exp
10080 20 63 61 74 61 2d 66 75 6e 20 66 61 69 6c 2d 65 cata-fun fail-e
10090 78 70 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 xp).
100a0 20 28 6c 69 74 65 72 61 6c 3f 20 28 73 79 6e 74 (literal? (synt
100b0 61 78 20 6c 69 74 65 72 61 6c 29 29 0a 20 20 20 ax literal)).
100c0 20 20 20 20 20 20 20 20 20 20 28 73 79 6e 74 61 (synta
100d0 78 20 28 69 66 20 28 65 71 75 61 6c 3f 20 6c 69 x (if (equal? li
100e0 74 65 72 61 6c 20 65 78 70 29 0a 20 20 20 20 20 teral exp).
100f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10100 20 20 20 20 28 62 65 67 69 6e 20 61 63 74 69 6f (begin actio
10110 6e 30 20 61 63 74 69 6f 6e 20 2e 2e 2e 29 0a 20 n0 action ...).
10120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10130 20 20 20 20 20 20 20 20 28 66 61 69 6c 2d 65 78 (fail-ex
10140 70 29 29 29 5d 29 29 29 29 29 0a 20 20 0a 20 20 p)))]))))). .
10150 29 0a 0a 28 6d 6f 64 75 6c 65 20 6d 61 74 63 68 )..(module match
10160 65 72 2d 68 65 6c 70 65 72 20 28 73 78 6d 6c 2d er-helper (sxml-
10170 6d 61 74 63 68 31 29 0a 20 20 0a 20 20 28 69 6d match1). . (im
10180 70 6f 72 74 20 70 6f 72 74 61 62 69 6c 69 74 79 port portability
10190 29 0a 20 20 28 69 6d 70 6f 72 74 20 69 6e 74 65 ). (import inte
101a0 72 6e 61 6c 2d 63 6f 6d 70 69 6c 65 2d 63 6c 61 rnal-compile-cla
101b0 75 73 65 29 0a 20 20 0a 20 20 28 64 65 66 69 6e use). . (defin
101c0 65 2d 73 79 6e 74 61 78 20 73 78 6d 6c 2d 6d 61 e-syntax sxml-ma
101d0 74 63 68 31 0a 20 20 20 20 28 73 79 6e 74 61 78 tch1. (syntax
101e0 2d 72 75 6c 65 73 20 28 29 0a 20 20 20 20 20 20 -rules ().
101f0 5b 28 73 78 6d 6c 2d 6d 61 74 63 68 31 20 65 78 [(sxml-match1 ex
10200 70 20 63 61 74 61 2d 66 75 6e 20 63 6c 61 75 73 p cata-fun claus
10210 65 29 0a 20 20 20 20 20 20 20 28 63 6f 6d 70 69 e). (compi
10220 6c 65 2d 63 6c 61 75 73 65 20 63 6c 61 75 73 65 le-clause clause
10230 20 65 78 70 20 63 61 74 61 2d 66 75 6e 0a 20 20 exp cata-fun.
10240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10250 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 29 20 (lambda ()
10260 28 65 72 72 6f 72 20 27 73 78 6d 6c 2d 6d 61 74 (error 'sxml-mat
10270 63 68 20 22 6e 6f 20 6d 61 74 63 68 69 6e 67 20 ch "no matching
10280 63 6c 61 75 73 65 20 66 6f 75 6e 64 22 29 29 29 clause found")))
10290 5d 0a 20 20 20 20 20 20 5b 28 73 78 6d 6c 2d 6d ]. [(sxml-m
102a0 61 74 63 68 31 20 65 78 70 20 63 61 74 61 2d 66 atch1 exp cata-f
102b0 75 6e 20 63 6c 61 75 73 65 30 20 63 6c 61 75 73 un clause0 claus
102c0 65 20 2e 2e 2e 29 0a 20 20 20 20 20 20 20 28 6c e ...). (l
102d0 65 74 2f 65 63 20 65 73 63 61 70 65 0a 20 20 20 et/ec escape.
102e0 20 20 20 20 20 20 28 63 6f 6d 70 69 6c 65 2d 63 (compile-c
102f0 6c 61 75 73 65 20 63 6c 61 75 73 65 30 20 65 78 lause clause0 ex
10300 70 20 63 61 74 61 2d 66 75 6e 0a 20 20 20 20 20 p cata-fun.
10310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10320 20 20 20 20 28 6c 61 6d 62 64 61 20 28 29 20 28 (lambda () (
10330 65 73 63 61 70 65 20 28 73 78 6d 6c 2d 6d 61 74 escape (sxml-mat
10340 63 68 31 20 65 78 70 20 63 61 74 61 2d 66 75 6e ch1 exp cata-fun
10350 20 63 6c 61 75 73 65 20 2e 2e 2e 29 29 29 29 29 clause ...)))))
10360 5d 29 29 0a 20 20 29 0a 0a 28 6d 6f 64 75 6c 65 ])). )..(module
10370 20 6d 61 74 63 68 2d 6c 65 74 2d 6d 65 74 61 2d match-let-meta-
10380 68 65 6c 70 65 72 20 28 73 78 6d 6c 2d 6d 61 74 helper (sxml-mat
10390 63 68 2d 6c 65 74 31 29 0a 20 20 0a 20 20 28 69 ch-let1). . (i
103a0 6d 70 6f 72 74 20 69 6e 74 65 72 6e 61 6c 2d 63 mport internal-c
103b0 6f 6d 70 69 6c 65 2d 63 6c 61 75 73 65 29 0a 20 ompile-clause).
103c0 20 0a 20 20 28 64 65 66 69 6e 65 2d 73 79 6e 74 . (define-synt
103d0 61 78 20 73 78 6d 6c 2d 6d 61 74 63 68 2d 6c 65 ax sxml-match-le
103e0 74 31 0a 20 20 20 20 28 73 79 6e 74 61 78 2d 72 t1. (syntax-r
103f0 75 6c 65 73 20 28 29 0a 20 20 20 20 20 20 5b 28 ules (). [(
10400 73 78 6d 6c 2d 6d 61 74 63 68 2d 6c 65 74 31 20 sxml-match-let1
10410 73 79 6e 74 61 67 20 73 79 6e 66 6f 72 6d 20 28 syntag synform (
10420 29 20 62 6f 64 79 30 20 62 6f 64 79 20 2e 2e 2e ) body0 body ...
10430 29 0a 20 20 20 20 20 20 20 28 6c 65 74 20 28 29 ). (let ()
10440 20 62 6f 64 79 30 20 62 6f 64 79 20 2e 2e 2e 29 body0 body ...)
10450 5d 0a 20 20 20 20 20 20 5b 28 73 78 6d 6c 2d 6d ]. [(sxml-m
10460 61 74 63 68 2d 6c 65 74 31 20 73 79 6e 74 61 67 atch-let1 syntag
10470 20 73 79 6e 66 6f 72 6d 20 28 5b 70 61 74 20 65 synform ([pat e
10480 78 70 5d 29 20 62 6f 64 79 30 20 62 6f 64 79 20 xp]) body0 body
10490 2e 2e 2e 29 0a 20 20 20 20 20 20 20 28 63 6f 6d ...). (com
104a0 70 69 6c 65 2d 63 6c 61 75 73 65 20 28 70 61 74 pile-clause (pat
104b0 20 28 6c 65 74 20 28 29 20 62 6f 64 79 30 20 62 (let () body0 b
104c0 6f 64 79 20 2e 2e 2e 29 29 0a 20 20 20 20 20 20 ody ...)).
104d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
104e0 20 65 78 70 0a 20 20 20 20 20 20 20 20 20 20 20 exp.
104f0 20 20 20 20 20 20 20 20 20 20 20 20 23 66 0a 20 #f.
10500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10510 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 29 (lambda ()
10520 20 28 65 72 72 6f 72 20 27 73 79 6e 74 61 67 20 (error 'syntag
10530 22 63 6f 75 6c 64 20 6e 6f 74 20 6d 61 74 63 68 "could not match
10540 20 70 61 74 74 65 72 6e 20 7e 73 22 20 27 70 61 pattern ~s" 'pa
10550 74 29 29 29 5d 0a 20 20 20 20 20 20 5b 28 73 78 t)))]. [(sx
10560 6d 6c 2d 6d 61 74 63 68 2d 6c 65 74 31 20 73 79 ml-match-let1 sy
10570 6e 74 61 67 20 73 79 6e 66 6f 72 6d 20 28 5b 70 ntag synform ([p
10580 61 74 30 20 65 78 70 30 5d 20 5b 70 61 74 20 65 at0 exp0] [pat e
10590 78 70 5d 20 2e 2e 2e 29 20 62 6f 64 79 30 20 62 xp] ...) body0 b
105a0 6f 64 79 20 2e 2e 2e 29 0a 20 20 20 20 20 20 20 ody ...).
105b0 28 63 6f 6d 70 69 6c 65 2d 63 6c 61 75 73 65 20 (compile-clause
105c0 28 70 61 74 30 20 28 73 78 6d 6c 2d 6d 61 74 63 (pat0 (sxml-matc
105d0 68 2d 6c 65 74 31 20 73 79 6e 74 61 67 20 73 79 h-let1 syntag sy
105e0 6e 66 6f 72 6d 20 28 5b 70 61 74 20 65 78 70 5d nform ([pat exp]
105f0 20 2e 2e 2e 29 20 62 6f 64 79 30 20 62 6f 64 79 ...) body0 body
10600 20 2e 2e 2e 29 29 0a 20 20 20 20 20 20 20 20 20 ...)).
10610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78 ex
10620 70 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 p0.
10630 20 20 20 20 20 20 20 20 20 20 23 66 0a 20 20 20 #f.
10640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10650 20 20 20 20 28 6c 61 6d 62 64 61 20 28 29 20 28 (lambda () (
10660 65 72 72 6f 72 20 27 73 79 6e 74 61 67 20 22 63 error 'syntag "c
10670 6f 75 6c 64 20 6e 6f 74 20 6d 61 74 63 68 20 70 ould not match p
10680 61 74 74 65 72 6e 20 7e 73 22 20 27 70 61 74 30 attern ~s" 'pat0
10690 29 29 29 5d 29 29 0a 20 20 0a 20 20 29 0a 0a 28 )))])). . )..(
106a0 6d 6f 64 75 6c 65 20 6d 61 74 63 68 2d 6c 65 74 module match-let
106b0 2d 68 65 6c 70 65 72 20 28 73 78 6d 6c 2d 6d 61 -helper (sxml-ma
106c0 74 63 68 2d 6c 65 74 2d 68 65 6c 70 29 0a 20 20 tch-let-help).
106d0 0a 20 20 28 69 6d 70 6f 72 74 20 6d 61 74 63 68 . (import match
106e0 2d 6c 65 74 2d 6d 65 74 61 2d 68 65 6c 70 65 72 -let-meta-helper
106f0 29 0a 20 20 0a 20 20 28 64 65 66 69 6e 65 2d 73 ). . (define-s
10700 79 6e 74 61 78 20 73 78 6d 6c 2d 6d 61 74 63 68 yntax sxml-match
10710 2d 6c 65 74 2d 68 65 6c 70 0a 20 20 20 20 28 6c -let-help. (l
10720 61 6d 62 64 61 20 28 73 74 78 29 0a 20 20 20 20 ambda (stx).
10730 20 20 28 73 79 6e 74 61 78 2d 63 61 73 65 20 73 (syntax-case s
10740 74 78 20 28 29 0a 20 20 20 20 20 20 20 20 5b 28 tx (). [(
10750 73 78 6d 6c 2d 6d 61 74 63 68 2d 6c 65 74 2d 68 sxml-match-let-h
10760 65 6c 70 20 73 79 6e 74 61 67 20 73 79 6e 66 6f elp syntag synfo
10770 72 6d 20 28 5b 70 61 74 20 65 78 70 5d 20 2e 2e rm ([pat exp] ..
10780 2e 29 20 62 6f 64 79 30 20 62 6f 64 79 20 2e 2e .) body0 body ..
10790 2e 29 0a 20 20 20 20 20 20 20 20 20 28 77 69 74 .). (wit
107a0 68 2d 73 79 6e 74 61 78 20 28 5b 28 74 65 6d 70 h-syntax ([(temp
107b0 2d 6e 61 6d 65 20 2e 2e 2e 29 20 28 67 65 6e 65 -name ...) (gene
107c0 72 61 74 65 2d 74 65 6d 70 6f 72 61 72 69 65 73 rate-temporaries
107d0 20 28 73 79 6e 74 61 78 20 28 65 78 70 20 2e 2e (syntax (exp ..
107e0 2e 29 29 29 5d 29 0a 20 20 20 20 20 20 20 20 20 .)))]).
107f0 20 20 28 73 79 6e 74 61 78 20 28 6c 65 74 20 28 (syntax (let (
10800 5b 74 65 6d 70 2d 6e 61 6d 65 20 65 78 70 5d 20 [temp-name exp]
10810 2e 2e 2e 29 0a 20 20 20 20 20 20 20 20 20 20 20 ...).
10820 20 20 20 20 20 20 20 20 20 20 28 73 78 6d 6c 2d (sxml-
10830 6d 61 74 63 68 2d 6c 65 74 31 20 73 79 6e 74 61 match-let1 synta
10840 67 20 73 79 6e 66 6f 72 6d 20 28 5b 70 61 74 20 g synform ([pat
10850 74 65 6d 70 2d 6e 61 6d 65 5d 20 2e 2e 2e 29 20 temp-name] ...)
10860 62 6f 64 79 30 20 62 6f 64 79 20 2e 2e 2e 29 29 body0 body ...))
10870 29 29 5d 29 29 29 0a 20 20 0a 20 20 29 0a 0a 28 ))]))). . )..(
10880 6d 6f 64 75 6c 65 20 73 78 6d 6c 2d 6d 61 74 63 module sxml-matc
10890 68 65 72 20 28 73 78 6d 6c 2d 6d 61 74 63 68 20 her (sxml-match
108a0 73 78 6d 6c 2d 6d 61 74 63 68 2d 6c 65 74 20 73 sxml-match-let s
108b0 78 6d 6c 2d 6d 61 74 63 68 2d 6c 65 74 2a 29 0a xml-match-let*).
108c0 20 20 0a 20 20 28 69 6d 70 6f 72 74 20 6d 61 74 . (import mat
108d0 63 68 65 72 2d 68 65 6c 70 65 72 29 0a 20 20 28 cher-helper). (
108e0 69 6d 70 6f 72 74 20 6d 61 74 63 68 2d 6c 65 74 import match-let
108f0 2d 68 65 6c 70 65 72 29 0a 20 20 0a 20 20 28 64 -helper). . (d
10900 65 66 69 6e 65 2d 73 79 6e 74 61 78 20 73 78 6d efine-syntax sxm
10910 6c 2d 6d 61 74 63 68 0a 20 20 20 20 28 73 79 6e l-match. (syn
10920 74 61 78 2d 72 75 6c 65 73 20 28 29 0a 20 20 20 tax-rules ().
10930 20 20 20 28 28 73 78 6d 6c 2d 6d 61 74 63 68 20 ((sxml-match
10940 76 61 6c 20 63 6c 61 75 73 65 30 20 63 6c 61 75 val clause0 clau
10950 73 65 20 2e 2e 2e 29 0a 20 20 20 20 20 20 20 28 se ...). (
10960 6c 65 74 72 65 63 20 28 5b 63 66 75 6e 20 28 6c letrec ([cfun (l
10970 61 6d 62 64 61 20 28 65 78 70 29 0a 20 20 20 20 ambda (exp).
10980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10990 20 20 20 20 28 73 78 6d 6c 2d 6d 61 74 63 68 31 (sxml-match1
109a0 20 65 78 70 20 63 66 75 6e 20 63 6c 61 75 73 65 exp cfun clause
109b0 30 20 63 6c 61 75 73 65 20 2e 2e 2e 29 29 5d 29 0 clause ...))])
109c0 0a 20 20 20 20 20 20 20 20 20 28 63 66 75 6e 20 . (cfun
109d0 76 61 6c 29 29 29 29 29 0a 20 20 0a 20 20 28 64 val))))). . (d
109e0 65 66 69 6e 65 2d 73 79 6e 74 61 78 20 73 78 6d efine-syntax sxm
109f0 6c 2d 6d 61 74 63 68 2d 6c 65 74 0a 20 20 20 20 l-match-let.
10a00 28 6c 61 6d 62 64 61 20 28 73 74 78 29 0a 20 20 (lambda (stx).
10a10 20 20 20 20 28 73 79 6e 74 61 78 2d 63 61 73 65 (syntax-case
10a20 20 73 74 78 20 28 29 0a 20 20 20 20 20 20 20 20 stx ().
10a30 5b 28 73 78 6d 6c 2d 6d 61 74 63 68 2d 6c 65 74 [(sxml-match-let
10a40 20 28 5b 70 61 74 20 65 78 70 5d 20 2e 2e 2e 29 ([pat exp] ...)
10a50 20 62 6f 64 79 30 20 62 6f 64 79 20 2e 2e 2e 29 body0 body ...)
10a60 0a 20 20 20 20 20 20 20 20 20 28 77 69 74 68 2d . (with-
10a70 73 79 6e 74 61 78 20 28 5b 73 79 6e 66 6f 72 6d syntax ([synform
10a80 20 73 74 78 5d 29 0a 20 20 20 20 20 20 20 20 20 stx]).
10a90 20 20 28 73 79 6e 74 61 78 20 28 73 78 6d 6c 2d (syntax (sxml-
10aa0 6d 61 74 63 68 2d 6c 65 74 2d 68 65 6c 70 20 73 match-let-help s
10ab0 78 6d 6c 2d 6d 61 74 63 68 2d 6c 65 74 20 73 79 xml-match-let sy
10ac0 6e 66 6f 72 6d 20 28 5b 70 61 74 20 65 78 70 5d nform ([pat exp]
10ad0 20 2e 2e 2e 29 20 62 6f 64 79 30 20 62 6f 64 79 ...) body0 body
10ae0 20 2e 2e 2e 29 29 29 5d 29 29 29 0a 20 20 0a 20 ...)))]))). .
10af0 20 28 64 65 66 69 6e 65 2d 73 79 6e 74 61 78 20 (define-syntax
10b00 73 78 6d 6c 2d 6d 61 74 63 68 2d 6c 65 74 2a 0a sxml-match-let*.
10b10 20 20 20 20 28 6c 61 6d 62 64 61 20 28 73 74 78 (lambda (stx
10b20 29 0a 20 20 20 20 20 20 28 73 79 6e 74 61 78 2d ). (syntax-
10b30 63 61 73 65 20 73 74 78 20 28 29 0a 20 20 20 20 case stx ().
10b40 20 20 20 20 5b 28 73 78 6d 6c 2d 6d 61 74 63 68 [(sxml-match
10b50 2d 6c 65 74 2a 20 28 29 20 62 6f 64 79 30 20 62 -let* () body0 b
10b60 6f 64 79 20 2e 2e 2e 29 0a 20 20 20 20 20 20 20 ody ...).
10b70 20 20 28 73 79 6e 74 61 78 20 28 6c 65 74 20 28 (syntax (let (
10b80 29 20 62 6f 64 79 30 20 62 6f 64 79 20 2e 2e 2e ) body0 body ...
10b90 29 29 5d 0a 20 20 20 20 20 20 20 20 5b 28 73 78 ))]. [(sx
10ba0 6d 6c 2d 6d 61 74 63 68 2d 6c 65 74 2a 20 28 5b ml-match-let* ([
10bb0 70 61 74 30 20 65 78 70 30 5d 20 5b 70 61 74 20 pat0 exp0] [pat
10bc0 65 78 70 5d 20 2e 2e 2e 29 20 62 6f 64 79 30 20 exp] ...) body0
10bd0 62 6f 64 79 20 2e 2e 2e 29 0a 20 20 20 20 20 20 body ...).
10be0 20 20 20 28 77 69 74 68 2d 73 79 6e 74 61 78 20 (with-syntax
10bf0 28 5b 73 79 6e 66 6f 72 6d 20 73 74 78 5d 29 0a ([synform stx]).
10c00 20 20 20 20 20 20 20 20 20 20 20 28 73 79 6e 74 (synt
10c10 61 78 20 28 73 78 6d 6c 2d 6d 61 74 63 68 2d 6c ax (sxml-match-l
10c20 65 74 2d 68 65 6c 70 20 73 78 6d 6c 2d 6d 61 74 et-help sxml-mat
10c30 63 68 2d 6c 65 74 2a 20 73 79 6e 66 6f 72 6d 20 ch-let* synform
10c40 28 5b 70 61 74 30 20 65 78 70 30 5d 29 0a 20 20 ([pat0 exp0]).
10c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10c70 20 20 20 20 20 20 28 73 78 6d 6c 2d 6d 61 74 63 (sxml-matc
10c80 68 2d 6c 65 74 2a 20 28 5b 70 61 74 20 65 78 70 h-let* ([pat exp
10c90 5d 20 2e 2e 2e 29 0a 20 20 20 20 20 20 20 20 20 ] ...).
10ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10cc0 20 62 6f 64 79 30 20 62 6f 64 79 20 2e 2e 2e 29 body0 body ...)
10cd0 29 29 29 5d 29 29 29 0a 20 20 0a 20 20 29 0a 0a )))]))). . )..