0000: 28 6c 6f 61 64 20 22 73 78 6d 6c 2d 6d 61 74 63 (load "sxml-matc
0010: 68 2e 73 73 22 29 0a 28 69 6d 70 6f 72 74 20 73 h.ss").(import s
0020: 78 6d 6c 2d 6d 61 74 63 68 65 72 29 0a 0a 28 64 xml-matcher)..(d
0030: 65 66 69 6e 65 2d 73 79 6e 74 61 78 20 72 75 6e efine-syntax run
0040: 2d 74 65 73 74 0a 20 20 28 73 79 6e 74 61 78 2d -test. (syntax-
0050: 72 75 6c 65 73 20 28 29 0a 20 20 20 20 28 28 72 rules (). ((r
0060: 75 6e 2d 74 65 73 74 20 64 65 73 63 20 74 65 73 un-test desc tes
0070: 74 20 65 78 70 65 63 74 65 64 2d 72 65 73 75 6c t expected-resul
0080: 74 29 0a 20 20 20 20 20 28 6c 65 74 20 28 28 65 t). (let ((e
0090: 78 70 65 63 74 65 64 20 65 78 70 65 63 74 65 64 xpected expected
00a0: 2d 72 65 73 75 6c 74 29 29 0a 20 20 20 20 20 20 -result)).
00b0: 20 28 6e 65 77 6c 69 6e 65 29 0a 20 20 20 20 20 (newline).
00c0: 20 20 28 64 69 73 70 6c 61 79 20 22 52 75 6e 6e (display "Runn
00d0: 69 6e 67 20 74 65 73 74 20 22 29 0a 20 20 20 20 ing test ").
00e0: 20 20 20 28 77 72 69 74 65 20 64 65 73 63 29 0a (write desc).
00f0: 20 20 20 20 20 20 20 28 64 69 73 70 6c 61 79 20 (display
0100: 22 3a 22 29 0a 20 20 20 20 20 20 20 28 6e 65 77 ":"). (new
0110: 6c 69 6e 65 29 0a 20 20 20 20 20 20 20 28 70 72 line). (pr
0120: 65 74 74 79 2d 70 72 69 6e 74 20 28 71 75 6f 74 etty-print (quot
0130: 65 20 74 65 73 74 29 29 0a 20 20 20 20 20 20 20 e test)).
0140: 28 6c 65 74 20 28 28 61 63 74 75 61 6c 20 74 65 (let ((actual te
0150: 73 74 29 29 0a 20 20 20 20 20 20 20 20 20 28 69 st)). (i
0160: 66 20 28 65 71 75 61 6c 3f 20 61 63 74 75 61 6c f (equal? actual
0170: 20 65 78 70 65 63 74 65 64 29 0a 20 20 20 20 20 expected).
0180: 20 20 20 20 20 20 20 20 28 62 65 67 69 6e 20 28 (begin (
0190: 6e 65 77 6c 69 6e 65 29 0a 20 20 20 20 20 20 20 newline).
01a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64 69 (di
01b0: 73 70 6c 61 79 20 22 67 61 76 65 20 74 68 65 20 splay "gave the
01c0: 65 78 70 65 63 74 65 64 20 72 65 73 75 6c 74 3a expected result:
01d0: 20 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 ").
01e0: 20 20 20 20 20 20 20 20 28 70 72 65 74 74 79 2d (pretty-
01f0: 70 72 69 6e 74 20 61 63 74 75 61 6c 29 0a 20 20 print actual).
0200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0210: 20 20 28 6e 65 77 6c 69 6e 65 29 29 0a 20 20 20 (newline)).
0220: 20 20 20 20 20 20 20 20 20 20 28 62 65 67 69 6e (begin
0230: 20 28 6e 65 77 6c 69 6e 65 20 28 63 75 72 72 65 (newline (curre
0240: 6e 74 2d 65 72 72 6f 72 2d 70 6f 72 74 29 29 0a nt-error-port)).
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0260: 20 20 20 20 28 64 69 73 70 6c 61 79 20 22 55 6e (display "Un
0270: 65 78 70 65 63 74 65 64 20 72 65 73 75 6c 74 3a expected result:
0280: 20 22 20 28 63 75 72 72 65 6e 74 2d 65 72 72 6f " (current-erro
0290: 72 2d 70 6f 72 74 29 29 0a 20 20 20 20 20 20 20 r-port)).
02a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 77 72 (wr
02b0: 69 74 65 20 61 63 74 75 61 6c 20 28 63 75 72 72 ite actual (curr
02c0: 65 6e 74 2d 65 72 72 6f 72 2d 70 6f 72 74 29 29 ent-error-port))
02d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
02e0: 20 20 20 20 20 28 6e 65 77 6c 69 6e 65 20 28 63 (newline (c
02f0: 75 72 72 65 6e 74 2d 65 72 72 6f 72 2d 70 6f 72 urrent-error-por
0300: 74 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 t)).
0310: 20 20 20 20 20 20 20 20 28 64 69 73 70 6c 61 79 (display
0320: 20 22 65 78 70 65 63 74 65 64 20 22 20 28 63 75 "expected " (cu
0330: 72 72 65 6e 74 2d 65 72 72 6f 72 2d 70 6f 72 74 rrent-error-port
0340: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 )).
0350: 20 20 20 20 20 20 20 28 77 72 69 74 65 20 65 78 (write ex
0360: 70 65 63 74 65 64 20 28 63 75 72 72 65 6e 74 2d pected (current-
0370: 65 72 72 6f 72 2d 70 6f 72 74 29 29 0a 20 20 20 error-port)).
0380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0390: 20 28 6e 65 77 6c 69 6e 65 20 28 63 75 72 72 65 (newline (curre
03a0: 6e 74 2d 65 72 72 6f 72 2d 70 6f 72 74 29 29 29 nt-error-port)))
03b0: 29 29 29 29 29 29 0a 0a 28 64 65 66 69 6e 65 2d ))))))..(define-
03c0: 73 79 6e 74 61 78 20 63 6f 6d 70 69 6c 65 2d 6d syntax compile-m
03d0: 61 74 63 68 0a 20 20 28 73 79 6e 74 61 78 2d 72 atch. (syntax-r
03e0: 75 6c 65 73 20 28 29 0a 20 20 20 20 5b 28 63 6f ules (). [(co
03f0: 6d 70 69 6c 65 2d 6d 61 74 63 68 20 70 61 74 20 mpile-match pat
0400: 61 63 74 69 6f 6e 30 20 61 63 74 69 6f 6e 20 2e action0 action .
0410: 2e 2e 29 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 ..). (lambda
0420: 20 28 78 29 0a 20 20 20 20 20 20 20 28 73 78 6d (x). (sxm
0430: 6c 2d 6d 61 74 63 68 20 78 20 5b 70 61 74 20 61 l-match x [pat a
0440: 63 74 69 6f 6e 30 20 61 63 74 69 6f 6e 20 2e 2e ction0 action ..
0450: 2e 5d 29 29 5d 29 29 0a 0a 28 72 75 6e 2d 74 65 .]))]))..(run-te
0460: 73 74 20 22 62 61 73 69 63 20 6d 61 74 63 68 20 st "basic match
0470: 6f 66 20 61 20 74 6f 70 2d 6c 65 76 65 6c 20 70 of a top-level p
0480: 61 74 74 65 72 6e 20 76 61 72 22 0a 20 20 20 20 attern var".
0490: 20 20 20 20 20 20 28 73 78 6d 6c 2d 6d 61 74 63 (sxml-matc
04a0: 68 20 27 28 65 20 33 20 34 20 35 29 0a 20 20 20 h '(e 3 4 5).
04b0: 20 20 20 20 20 20 20 20 20 5b 2c 79 20 28 6c 69 [,y (li
04c0: 73 74 20 22 6d 61 74 63 68 65 64 22 20 79 29 5d st "matched" y)]
04d0: 29 0a 20 20 20 20 20 20 20 20 20 20 27 28 22 6d ). '("m
04e0: 61 74 63 68 65 64 22 20 28 65 20 33 20 34 20 35 atched" (e 3 4 5
04f0: 29 29 29 0a 28 72 75 6e 2d 74 65 73 74 20 22 6d ))).(run-test "m
0500: 61 74 63 68 20 6f 66 20 73 69 6d 70 6c 65 20 65 atch of simple e
0510: 6c 65 6d 65 6e 74 20 63 6f 6e 74 65 6e 74 73 20 lement contents
0520: 77 69 74 68 20 70 61 74 74 65 72 6e 20 76 61 72 with pattern var
0530: 73 22 0a 20 20 20 20 20 20 20 20 20 20 28 28 63 s". ((c
0540: 6f 6d 70 69 6c 65 2d 6d 61 74 63 68 20 28 65 20 ompile-match (e
0550: 2c 61 20 2c 62 20 2c 63 29 20 28 6c 69 73 74 20 ,a ,b ,c) (list
0560: 61 20 62 20 63 29 29 20 27 28 65 20 33 20 34 20 a b c)) '(e 3 4
0570: 35 29 29 0a 20 20 20 20 20 20 20 20 20 20 27 28 5)). '(
0580: 33 20 34 20 35 29 29 0a 28 72 75 6e 2d 74 65 73 3 4 5)).(run-tes
0590: 74 20 22 6d 61 74 63 68 20 61 20 6c 69 74 65 72 t "match a liter
05a0: 61 6c 20 70 61 74 74 65 72 6e 20 77 69 74 68 69 al pattern withi
05b0: 6e 20 61 20 65 6c 65 6d 65 6e 74 20 70 61 74 74 n a element patt
05c0: 65 72 6e 22 0a 20 20 20 20 20 20 20 20 20 20 28 ern". (
05d0: 28 63 6f 6d 70 69 6c 65 2d 6d 61 74 63 68 20 28 (compile-match (
05e0: 65 20 2c 61 20 22 61 62 63 22 20 2c 63 29 20 28 e ,a "abc" ,c) (
05f0: 6c 69 73 74 20 61 20 63 29 29 20 27 28 65 20 33 list a c)) '(e 3
0600: 20 22 61 62 63 22 20 35 29 29 0a 20 20 20 20 20 "abc" 5)).
0610: 20 20 20 20 20 27 28 33 20 35 29 29 0a 28 72 75 '(3 5)).(ru
0620: 6e 2d 74 65 73 74 20 22 6d 61 74 63 68 20 61 6e n-test "match an
0630: 20 65 6d 70 74 79 20 65 6c 65 6d 65 6e 74 22 0a empty element".
0640: 20 20 20 20 20 20 20 20 20 20 28 28 63 6f 6d 70 ((comp
0650: 69 6c 65 2d 6d 61 74 63 68 20 28 65 29 20 22 6d ile-match (e) "m
0660: 61 74 63 68 22 29 20 27 28 65 29 29 0a 20 20 20 atch") '(e)).
0670: 20 20 20 20 20 20 20 22 6d 61 74 63 68 22 29 0a "match").
0680: 28 72 75 6e 2d 74 65 73 74 20 22 6d 61 74 63 68 (run-test "match
0690: 20 61 20 6e 65 73 74 65 64 20 65 6c 65 6d 65 6e a nested elemen
06a0: 74 22 0a 20 20 20 20 20 20 20 20 20 20 28 28 63 t". ((c
06b0: 6f 6d 70 69 6c 65 2d 6d 61 74 63 68 20 28 65 20 ompile-match (e
06c0: 2c 61 20 28 66 20 2c 62 20 2c 63 29 20 2c 64 29 ,a (f ,b ,c) ,d)
06d0: 20 28 6c 69 73 74 20 61 20 62 20 63 20 64 29 29 (list a b c d))
06e0: 20 27 28 65 20 33 20 28 66 20 34 20 35 29 20 36 '(e 3 (f 4 5) 6
06f0: 29 29 0a 20 20 20 20 20 20 20 20 20 20 27 28 33 )). '(3
0700: 20 34 20 35 20 36 29 29 0a 28 72 75 6e 2d 74 65 4 5 6)).(run-te
0710: 73 74 20 22 6d 61 74 63 68 20 61 20 64 6f 74 2d st "match a dot-
0720: 72 65 73 74 20 70 61 74 74 65 72 6e 20 77 69 74 rest pattern wit
0730: 68 69 6e 20 61 20 6e 65 73 74 65 64 20 65 6c 65 hin a nested ele
0740: 6d 65 6e 74 22 0a 20 20 20 20 20 20 20 20 20 20 ment".
0750: 28 28 63 6f 6d 70 69 6c 65 2d 6d 61 74 63 68 20 ((compile-match
0760: 28 65 20 2c 61 20 28 66 20 2e 20 2c 79 29 20 2c (e ,a (f . ,y) ,
0770: 64 29 20 28 6c 69 73 74 20 61 20 79 20 64 29 29 d) (list a y d))
0780: 20 27 28 65 20 33 20 28 66 20 34 20 35 29 20 36 '(e 3 (f 4 5) 6
0790: 29 29 0a 20 20 20 20 20 20 20 20 20 20 27 28 33 )). '(3
07a0: 20 28 34 20 35 29 20 36 29 29 0a 28 72 75 6e 2d (4 5) 6)).(run-
07b0: 74 65 73 74 20 22 6d 61 74 63 68 20 61 20 62 61 test "match a ba
07c0: 73 69 63 20 6c 69 73 74 20 70 61 74 74 65 72 6e sic list pattern
07d0: 22 0a 20 20 20 20 20 20 20 20 20 20 28 28 63 6f ". ((co
07e0: 6d 70 69 6c 65 2d 6d 61 74 63 68 20 28 6c 69 73 mpile-match (lis
07f0: 74 20 2c 61 20 2c 62 20 2c 63 20 2c 64 20 2c 65 t ,a ,b ,c ,d ,e
0800: 29 20 28 6c 69 73 74 20 61 20 62 20 63 20 64 20 ) (list a b c d
0810: 65 29 29 20 27 28 22 69 22 20 22 6a 22 20 22 6b e)) '("i" "j" "k
0820: 22 20 22 6c 22 20 22 6d 22 29 29 0a 20 20 20 20 " "l" "m")).
0830: 20 20 20 20 20 20 27 28 22 69 22 20 22 6a 22 20 '("i" "j"
0840: 22 6b 22 20 22 6c 22 20 22 6d 22 29 29 0a 28 72 "k" "l" "m")).(r
0850: 75 6e 2d 74 65 73 74 20 22 6d 61 74 63 68 20 61 un-test "match a
0860: 20 6c 69 73 74 20 70 61 74 74 65 72 6e 20 77 69 list pattern wi
0870: 74 68 20 61 20 64 6f 74 2d 72 65 73 74 20 70 61 th a dot-rest pa
0880: 74 74 65 72 6e 22 0a 20 20 20 20 20 20 20 20 20 ttern".
0890: 20 28 28 63 6f 6d 70 69 6c 65 2d 6d 61 74 63 68 ((compile-match
08a0: 20 28 6c 69 73 74 20 2c 61 20 2c 62 20 2c 63 20 (list ,a ,b ,c
08b0: 2e 20 2c 79 29 20 28 6c 69 73 74 20 61 20 62 20 . ,y) (list a b
08c0: 63 20 79 29 29 20 27 28 22 69 22 20 22 6a 22 20 c y)) '("i" "j"
08d0: 22 6b 22 20 22 6c 22 20 22 6d 22 29 29 0a 20 20 "k" "l" "m")).
08e0: 20 20 20 20 20 20 20 20 27 28 22 69 22 20 22 6a '("i" "j
08f0: 22 20 22 6b 22 20 28 22 6c 22 20 22 6d 22 29 29 " "k" ("l" "m"))
0900: 29 0a 28 72 75 6e 2d 74 65 73 74 20 22 62 61 73 ).(run-test "bas
0910: 69 63 20 74 65 73 74 20 6f 66 20 61 20 6d 75 6c ic test of a mul
0920: 74 69 2d 63 6c 61 75 73 65 20 73 78 6d 6c 2d 6d ti-clause sxml-m
0930: 61 74 63 68 22 0a 20 20 20 20 20 20 20 20 20 20 atch".
0940: 28 73 78 6d 6c 2d 6d 61 74 63 68 20 27 28 61 20 (sxml-match '(a
0950: 31 20 32 20 33 29 0a 20 20 20 20 20 20 20 20 20 1 2 3).
0960: 20 20 20 28 28 61 20 2c 6e 29 20 6e 29 0a 20 20 ((a ,n) n).
0970: 20 20 20 20 20 20 20 20 20 20 28 28 61 20 2c 6d ((a ,m
0980: 20 2c 6e 29 20 28 2b 20 6d 20 6e 29 29 0a 20 20 ,n) (+ m n)).
0990: 20 20 20 20 20 20 20 20 20 20 28 28 61 20 2c 6d ((a ,m
09a0: 20 2c 6e 20 2c 6f 29 20 28 6c 69 73 74 20 22 6d ,n ,o) (list "m
09b0: 61 74 63 68 65 64 22 20 28 6c 69 73 74 20 6d 20 atched" (list m
09c0: 6e 20 6f 29 29 29 29 0a 20 20 20 20 20 20 20 20 n o)))).
09d0: 20 20 27 28 22 6d 61 74 63 68 65 64 22 20 28 31 '("matched" (1
09e0: 20 32 20 33 29 29 29 0a 28 72 75 6e 2d 74 65 73 2 3))).(run-tes
09f0: 74 20 22 62 61 73 69 63 20 74 65 73 74 20 6f 66 t "basic test of
0a00: 20 61 20 73 78 6d 6c 2d 6d 61 74 63 68 2d 6c 65 a sxml-match-le
0a10: 74 22 0a 20 20 20 20 20 20 20 20 20 20 28 73 78 t". (sx
0a20: 6d 6c 2d 6d 61 74 63 68 2d 6c 65 74 20 28 5b 28 ml-match-let ([(
0a30: 61 20 2c 69 20 2c 6a 29 20 27 28 61 20 31 20 32 a ,i ,j) '(a 1 2
0a40: 29 5d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 )]).
0a50: 28 2b 20 69 20 6a 29 29 0a 20 20 20 20 20 20 20 (+ i j)).
0a60: 20 20 20 33 29 0a 28 72 75 6e 2d 74 65 73 74 20 3).(run-test
0a70: 22 62 61 73 69 63 20 74 65 73 74 20 6f 66 20 61 "basic test of a
0a80: 20 73 78 6d 6c 2d 6d 61 74 63 68 2d 6c 65 74 2a sxml-match-let*
0a90: 22 0a 20 20 20 20 20 20 20 20 20 20 28 73 78 6d ". (sxm
0aa0: 6c 2d 6d 61 74 63 68 2d 6c 65 74 2a 20 28 5b 28 l-match-let* ([(
0ab0: 61 20 2c 6b 29 20 27 28 61 20 28 62 20 31 20 32 a ,k) '(a (b 1 2
0ac0: 29 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ))].
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0ae0: 5b 28 62 20 2c 69 20 2c 6a 29 20 6b 5d 29 0a 20 [(b ,i ,j) k]).
0af0: 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74 (list
0b00: 20 69 20 6a 29 29 0a 20 20 20 20 20 20 20 20 20 i j)).
0b10: 20 27 28 31 20 32 29 29 0a 28 72 75 6e 2d 74 65 '(1 2)).(run-te
0b20: 73 74 20 22 6d 61 74 63 68 20 6f 66 20 74 6f 70 st "match of top
0b30: 2d 6c 65 76 65 6c 20 6c 69 74 65 72 61 6c 20 73 -level literal s
0b40: 74 72 69 6e 67 20 70 61 74 74 65 72 6e 22 0a 20 tring pattern".
0b50: 20 20 20 20 20 20 20 20 20 28 28 63 6f 6d 70 69 ((compi
0b60: 6c 65 2d 6d 61 74 63 68 20 22 61 62 63 22 20 22 le-match "abc" "
0b70: 6d 61 74 63 68 22 29 20 22 61 62 63 22 29 0a 20 match") "abc").
0b80: 20 20 20 20 20 20 20 20 20 22 6d 61 74 63 68 22 "match"
0b90: 29 0a 28 72 75 6e 2d 74 65 73 74 20 22 6d 61 74 ).(run-test "mat
0ba0: 63 68 20 6f 66 20 74 6f 70 2d 6c 65 76 65 6c 20 ch of top-level
0bb0: 6c 69 74 65 72 61 6c 20 6e 75 6d 62 65 72 20 70 literal number p
0bc0: 61 74 74 65 72 6e 22 0a 20 20 20 20 20 20 20 20 attern".
0bd0: 20 20 28 28 63 6f 6d 70 69 6c 65 2d 6d 61 74 63 ((compile-matc
0be0: 68 20 37 37 20 22 6d 61 74 63 68 22 29 20 37 37 h 77 "match") 77
0bf0: 29 0a 20 20 20 20 20 20 20 20 20 20 22 6d 61 74 ). "mat
0c00: 63 68 22 29 0a 28 72 75 6e 2d 74 65 73 74 20 22 ch").(run-test "
0c10: 74 65 73 74 20 6f 66 20 6d 75 6c 74 69 2d 65 78 test of multi-ex
0c20: 70 72 65 73 73 69 6f 6e 20 67 75 61 72 64 20 69 pression guard i
0c30: 6e 20 70 61 74 74 65 72 6e 22 0a 20 20 20 20 20 n pattern".
0c40: 20 20 20 20 20 28 73 78 6d 6c 2d 6d 61 74 63 68 (sxml-match
0c50: 20 27 28 61 20 31 20 32 20 33 29 0a 20 20 20 20 '(a 1 2 3).
0c60: 20 20 20 20 20 20 20 20 28 28 61 20 2c 6e 29 20 ((a ,n)
0c70: 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 n). (
0c80: 28 61 20 2c 6d 20 2c 6e 29 20 28 2b 20 6d 20 6e (a ,m ,n) (+ m n
0c90: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 )). (
0ca0: 28 61 20 2c 6d 20 2c 6e 20 2c 6f 29 20 28 67 75 (a ,m ,n ,o) (gu
0cb0: 61 72 64 20 28 6e 75 6d 62 65 72 3f 20 6d 29 20 ard (number? m)
0cc0: 28 6e 75 6d 62 65 72 3f 20 6e 29 20 28 6e 75 6d (number? n) (num
0cd0: 62 65 72 3f 20 6f 29 29 20 28 6c 69 73 74 20 22 ber? o)) (list "
0ce0: 67 75 61 72 64 65 64 2d 6d 61 74 63 68 65 64 22 guarded-matched"
0cf0: 20 28 6c 69 73 74 20 6d 20 6e 20 6f 29 29 29 29 (list m n o))))
0d00: 0a 20 20 20 20 20 20 20 20 20 20 27 28 22 67 75 . '("gu
0d10: 61 72 64 65 64 2d 6d 61 74 63 68 65 64 22 20 28 arded-matched" (
0d20: 31 20 32 20 33 29 29 29 0a 28 72 75 6e 2d 74 65 1 2 3))).(run-te
0d30: 73 74 20 22 62 61 73 69 63 20 74 65 73 74 20 6f st "basic test o
0d40: 66 20 6d 75 6c 74 69 70 6c 65 20 61 63 74 69 6f f multiple actio
0d50: 6e 20 69 74 65 6d 73 20 69 6e 20 6d 61 74 63 68 n items in match
0d60: 20 63 6c 61 75 73 65 22 0a 20 20 20 20 20 20 20 clause".
0d70: 20 20 20 28 28 63 6f 6d 70 69 6c 65 2d 6d 61 74 ((compile-mat
0d80: 63 68 20 37 37 20 28 64 69 73 70 6c 61 79 20 22 ch 77 (display "
0d90: 6d 61 74 63 68 2d 37 37 5c 6e 22 29 20 22 6d 61 match-77\n") "ma
0da0: 74 63 68 22 29 20 37 37 29 0a 20 20 20 20 20 20 tch") 77).
0db0: 20 20 20 20 22 6d 61 74 63 68 22 29 0a 0a 28 64 "match")..(d
0dc0: 65 66 69 6e 65 20 73 69 6d 70 6c 65 2d 65 76 61 efine simple-eva
0dd0: 6c 0a 20 20 28 6c 61 6d 62 64 61 20 28 78 29 0a l. (lambda (x).
0de0: 20 20 20 20 28 73 78 6d 6c 2d 6d 61 74 63 68 20 (sxml-match
0df0: 78 0a 20 20 20 20 20 20 5b 2c 69 20 28 67 75 61 x. [,i (gua
0e00: 72 64 20 28 69 6e 74 65 67 65 72 3f 20 69 29 29 rd (integer? i))
0e10: 20 69 5d 0a 20 20 20 20 20 20 5b 28 2b 20 2c 78 i]. [(+ ,x
0e20: 20 2c 79 29 20 28 2b 20 28 73 69 6d 70 6c 65 2d ,y) (+ (simple-
0e30: 65 76 61 6c 20 78 29 20 28 73 69 6d 70 6c 65 2d eval x) (simple-
0e40: 65 76 61 6c 20 79 29 29 5d 0a 20 20 20 20 20 20 eval y))].
0e50: 5b 28 2a 20 2c 78 20 2c 79 29 20 28 2a 20 28 73 [(* ,x ,y) (* (s
0e60: 69 6d 70 6c 65 2d 65 76 61 6c 20 78 29 20 28 73 imple-eval x) (s
0e70: 69 6d 70 6c 65 2d 65 76 61 6c 20 79 29 29 5d 0a imple-eval y))].
0e80: 20 20 20 20 20 20 5b 28 2d 20 2c 78 20 2c 79 29 [(- ,x ,y)
0e90: 20 28 2d 20 28 73 69 6d 70 6c 65 2d 65 76 61 6c (- (simple-eval
0ea0: 20 78 29 20 28 73 69 6d 70 6c 65 2d 65 76 61 6c x) (simple-eval
0eb0: 20 79 29 29 5d 0a 20 20 20 20 20 20 5b 28 2f 20 y))]. [(/
0ec0: 2c 78 20 2c 79 29 20 28 2f 20 28 73 69 6d 70 6c ,x ,y) (/ (simpl
0ed0: 65 2d 65 76 61 6c 20 78 29 20 28 73 69 6d 70 6c e-eval x) (simpl
0ee0: 65 2d 65 76 61 6c 20 79 29 29 5d 0a 20 20 20 20 e-eval y))].
0ef0: 20 20 5b 2c 6f 74 68 65 72 77 69 73 65 20 28 65 [,otherwise (e
0f00: 72 72 6f 72 20 22 73 69 6d 70 6c 65 2d 65 76 61 rror "simple-eva
0f10: 6c 3a 20 69 6e 76 61 6c 69 64 20 65 78 70 72 65 l: invalid expre
0f20: 73 73 69 6f 6e 22 20 78 29 5d 29 29 29 0a 0a 28 ssion" x)])))..(
0f30: 72 75 6e 2d 74 65 73 74 20 22 62 61 73 69 63 20 run-test "basic
0f40: 74 65 73 74 20 6f 66 20 65 78 70 6c 69 63 69 74 test of explicit
0f50: 20 72 65 63 75 72 73 69 6f 6e 20 69 6e 20 6d 61 recursion in ma
0f60: 74 63 68 20 63 6c 61 75 73 65 73 22 0a 20 20 20 tch clauses".
0f70: 20 20 20 20 20 20 20 28 73 69 6d 70 6c 65 2d 65 (simple-e
0f80: 76 61 6c 20 27 28 2a 20 28 2b 20 37 20 33 29 20 val '(* (+ 7 3)
0f90: 28 2d 20 37 20 33 29 29 29 0a 20 20 20 20 20 20 (- 7 3))).
0fa0: 20 20 20 20 34 30 29 0a 0a 28 64 65 66 69 6e 65 40)..(define
0fb0: 20 73 69 6d 70 6c 65 2d 65 76 61 6c 32 0a 20 20 simple-eval2.
0fc0: 28 6c 61 6d 62 64 61 20 28 78 29 0a 20 20 20 20 (lambda (x).
0fd0: 28 73 78 6d 6c 2d 6d 61 74 63 68 20 78 0a 20 20 (sxml-match x.
0fe0: 20 20 20 20 5b 2c 69 20 28 67 75 61 72 64 20 28 [,i (guard (
0ff0: 69 6e 74 65 67 65 72 3f 20 69 29 29 20 69 5d 0a integer? i)) i].
1000: 20 20 20 20 20 20 5b 28 2b 20 2c 5b 78 5d 20 2c [(+ ,[x] ,
1010: 5b 79 5d 29 20 28 2b 20 78 20 79 29 5d 0a 20 20 [y]) (+ x y)].
1020: 20 20 20 20 5b 28 2a 20 2c 5b 78 5d 20 2c 5b 79 [(* ,[x] ,[y
1030: 5d 29 20 28 2a 20 78 20 79 29 5d 0a 20 20 20 20 ]) (* x y)].
1040: 20 20 5b 28 2d 20 2c 5b 78 5d 20 2c 5b 79 5d 29 [(- ,[x] ,[y])
1050: 20 28 2d 20 78 20 79 29 5d 0a 20 20 20 20 20 20 (- x y)].
1060: 5b 28 2f 20 2c 5b 78 5d 20 2c 5b 79 5d 29 20 28 [(/ ,[x] ,[y]) (
1070: 2f 20 78 20 79 29 5d 0a 20 20 20 20 20 20 5b 2c / x y)]. [,
1080: 6f 74 68 65 72 77 69 73 65 20 28 65 72 72 6f 72 otherwise (error
1090: 20 22 73 69 6d 70 6c 65 2d 65 76 61 6c 3a 20 69 "simple-eval: i
10a0: 6e 76 61 6c 69 64 20 65 78 70 72 65 73 73 69 6f nvalid expressio
10b0: 6e 22 20 78 29 5d 29 29 29 0a 0a 28 72 75 6e 2d n" x)])))..(run-
10c0: 74 65 73 74 20 22 62 61 73 69 63 20 74 65 73 74 test "basic test
10d0: 20 6f 66 20 61 6e 6f 6e 79 6d 6f 75 73 20 63 61 of anonymous ca
10e0: 74 61 73 22 0a 20 20 20 20 20 20 20 20 20 20 28 tas". (
10f0: 73 69 6d 70 6c 65 2d 65 76 61 6c 32 20 27 28 2a simple-eval2 '(*
1100: 20 28 2b 20 37 20 33 29 20 28 2d 20 37 20 33 29 (+ 7 3) (- 7 3)
1110: 29 29 0a 20 20 20 20 20 20 20 20 20 20 34 30 29 )). 40)
1120: 0a 0a 28 64 65 66 69 6e 65 20 73 69 6d 70 6c 65 ..(define simple
1130: 2d 65 76 61 6c 33 0a 20 20 28 6c 61 6d 62 64 61 -eval3. (lambda
1140: 20 28 78 29 0a 20 20 20 20 28 73 78 6d 6c 2d 6d (x). (sxml-m
1150: 61 74 63 68 20 78 0a 20 20 20 20 20 20 5b 2c 69 atch x. [,i
1160: 20 28 67 75 61 72 64 20 28 69 6e 74 65 67 65 72 (guard (integer
1170: 3f 20 69 29 29 20 69 5d 0a 20 20 20 20 20 20 5b ? i)) i]. [
1180: 28 2b 20 2c 5b 73 69 6d 70 6c 65 2d 65 76 61 6c (+ ,[simple-eval
1190: 33 20 2d 3e 20 78 5d 20 2c 5b 73 69 6d 70 6c 65 3 -> x] ,[simple
11a0: 2d 65 76 61 6c 33 20 2d 3e 20 79 5d 29 20 28 2b -eval3 -> y]) (+
11b0: 20 78 20 79 29 5d 0a 20 20 20 20 20 20 5b 28 2a x y)]. [(*
11c0: 20 2c 5b 73 69 6d 70 6c 65 2d 65 76 61 6c 33 20 ,[simple-eval3
11d0: 2d 3e 20 78 5d 20 2c 5b 73 69 6d 70 6c 65 2d 65 -> x] ,[simple-e
11e0: 76 61 6c 33 20 2d 3e 20 79 5d 29 20 28 2a 20 78 val3 -> y]) (* x
11f0: 20 79 29 5d 0a 20 20 20 20 20 20 5b 28 2d 20 2c y)]. [(- ,
1200: 5b 73 69 6d 70 6c 65 2d 65 76 61 6c 33 20 2d 3e [simple-eval3 ->
1210: 20 78 5d 20 2c 5b 73 69 6d 70 6c 65 2d 65 76 61 x] ,[simple-eva
1220: 6c 33 20 2d 3e 20 79 5d 29 20 28 2d 20 78 20 79 l3 -> y]) (- x y
1230: 29 5d 0a 20 20 20 20 20 20 5b 28 2f 20 2c 5b 73 )]. [(/ ,[s
1240: 69 6d 70 6c 65 2d 65 76 61 6c 33 20 2d 3e 20 78 imple-eval3 -> x
1250: 5d 20 2c 5b 73 69 6d 70 6c 65 2d 65 76 61 6c 33 ] ,[simple-eval3
1260: 20 2d 3e 20 79 5d 29 20 28 2f 20 78 20 79 29 5d -> y]) (/ x y)]
1270: 0a 20 20 20 20 20 20 5b 2c 6f 74 68 65 72 77 69 . [,otherwi
1280: 73 65 20 28 65 72 72 6f 72 20 22 73 69 6d 70 6c se (error "simpl
1290: 65 2d 65 76 61 6c 3a 20 69 6e 76 61 6c 69 64 20 e-eval: invalid
12a0: 65 78 70 72 65 73 73 69 6f 6e 22 20 78 29 5d 29 expression" x)])
12b0: 29 29 0a 0a 28 72 75 6e 2d 74 65 73 74 20 22 74 ))..(run-test "t
12c0: 65 73 74 20 6f 66 20 6e 61 6d 65 64 20 63 61 74 est of named cat
12d0: 61 73 22 0a 20 20 20 20 20 20 20 20 20 20 28 73 as". (s
12e0: 69 6d 70 6c 65 2d 65 76 61 6c 33 20 27 28 2a 20 imple-eval3 '(*
12f0: 28 2b 20 37 20 33 29 20 28 2d 20 37 20 33 29 29 (+ 7 3) (- 7 3))
1300: 29 0a 20 20 20 20 20 20 20 20 20 20 34 30 29 0a ). 40).
1310: 0a 3b 20 6e 65 65 64 20 61 20 74 65 73 74 20 63 .; need a test c
1320: 61 73 65 20 66 6f 72 20 63 61 74 61 20 6f 6e 20 ase for cata on
1330: 61 20 22 2e 20 72 65 73 74 29 22 20 70 61 74 74 a ". rest)" patt
1340: 65 72 6e 0a 0a 28 72 75 6e 2d 74 65 73 74 20 22 ern..(run-test "
1350: 73 75 63 63 65 73 73 66 75 6c 20 74 65 73 74 20 successful test
1360: 6f 66 20 61 74 74 72 69 62 75 74 65 20 6d 61 74 of attribute mat
1370: 63 68 69 6e 67 3a 20 70 61 74 2d 76 61 72 20 69 ching: pat-var i
1380: 6e 20 76 61 6c 75 65 20 70 6f 73 69 74 69 6f 6e n value position
1390: 22 0a 20 20 20 20 20 20 20 20 20 20 28 73 78 6d ". (sxm
13a0: 6c 2d 6d 61 74 63 68 20 27 28 65 20 28 40 20 28 l-match '(e (@ (
13b0: 7a 20 31 29 29 20 33 20 34 20 35 29 0a 20 20 20 z 1)) 3 4 5).
13c0: 20 20 20 20 20 20 20 20 20 5b 28 65 20 28 40 20 [(e (@
13d0: 28 7a 20 2c 64 29 29 20 2c 61 20 2c 62 20 2c 63 (z ,d)) ,a ,b ,c
13e0: 29 20 28 6c 69 73 74 20 64 20 61 20 62 20 63 29 ) (list d a b c)
13f0: 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 2c ]. [,
1400: 6f 74 68 65 72 77 69 73 65 20 23 66 5d 29 0a 20 otherwise #f]).
1410: 20 20 20 20 20 20 20 20 20 27 28 31 20 33 20 34 '(1 3 4
1420: 20 35 29 29 0a 0a 28 72 75 6e 2d 74 65 73 74 20 5))..(run-test
1430: 22 66 61 69 6c 69 6e 67 20 74 65 73 74 20 6f 66 "failing test of
1440: 20 61 74 74 72 69 62 75 74 65 20 6d 61 74 63 68 attribute match
1450: 69 6e 67 3a 20 70 61 74 2d 76 61 72 20 69 6e 20 ing: pat-var in
1460: 76 61 6c 75 65 20 70 6f 73 69 74 69 6f 6e 22 0a value position".
1470: 20 20 20 20 20 20 20 20 20 20 28 73 78 6d 6c 2d (sxml-
1480: 6d 61 74 63 68 20 27 28 65 20 28 40 20 28 61 20 match '(e (@ (a
1490: 31 29 29 20 33 20 34 20 35 29 0a 20 20 20 20 20 1)) 3 4 5).
14a0: 20 20 20 20 20 20 20 5b 28 65 20 28 40 20 28 7a [(e (@ (z
14b0: 20 2c 64 29 29 20 2c 61 20 2c 62 20 2c 63 29 20 ,d)) ,a ,b ,c)
14c0: 28 6c 69 73 74 20 64 20 61 20 62 20 63 29 5d 0a (list d a b c)].
14d0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 2c 6f 74 [,ot
14e0: 68 65 72 77 69 73 65 20 23 66 5d 29 0a 20 20 20 herwise #f]).
14f0: 20 20 20 20 20 20 20 23 66 29 0a 0a 28 72 75 6e #f)..(run
1500: 2d 74 65 73 74 20 22 74 65 73 74 20 6f 66 20 61 -test "test of a
1510: 74 74 72 69 62 75 74 65 20 6d 61 74 63 68 69 6e ttribute matchin
1520: 67 3a 20 6c 69 74 65 72 61 6c 20 69 6e 20 76 61 g: literal in va
1530: 6c 75 65 20 70 6f 73 69 74 69 6f 6e 22 0a 20 20 lue position".
1540: 20 20 20 20 20 20 20 20 28 28 63 6f 6d 70 69 6c ((compil
1550: 65 2d 6d 61 74 63 68 20 28 65 20 28 40 20 28 7a e-match (e (@ (z
1560: 20 31 29 29 20 2c 61 20 2c 62 20 2c 63 29 20 28 1)) ,a ,b ,c) (
1570: 6c 69 73 74 20 61 20 62 20 63 29 29 20 27 28 65 list a b c)) '(e
1580: 20 28 40 20 28 7a 20 31 29 29 20 33 20 34 20 35 (@ (z 1)) 3 4 5
1590: 29 29 0a 20 20 20 20 20 20 20 20 20 20 27 28 33 )). '(3
15a0: 20 34 20 35 29 29 0a 0a 28 72 75 6e 2d 74 65 73 4 5))..(run-tes
15b0: 74 20 22 74 65 73 74 20 6f 66 20 61 74 74 72 69 t "test of attri
15c0: 62 75 74 65 20 6d 61 74 63 68 69 6e 67 3a 20 64 bute matching: d
15d0: 65 66 61 75 6c 74 2d 76 61 6c 75 65 20 73 70 65 efault-value spe
15e0: 63 20 69 6e 20 76 61 6c 75 65 20 70 6f 73 69 74 c in value posit
15f0: 69 6f 6e 22 0a 20 20 20 20 20 20 20 20 20 20 28 ion". (
1600: 28 63 6f 6d 70 69 6c 65 2d 6d 61 74 63 68 20 28 (compile-match (
1610: 65 20 28 40 20 28 7a 20 28 2c 64 20 31 29 29 29 e (@ (z (,d 1)))
1620: 20 2c 61 20 2c 62 20 2c 63 29 20 28 6c 69 73 74 ,a ,b ,c) (list
1630: 20 64 20 61 20 62 20 63 29 29 20 27 28 65 20 33 d a b c)) '(e 3
1640: 20 34 20 35 29 29 0a 20 20 20 20 20 20 20 20 20 4 5)).
1650: 20 27 28 31 20 33 20 34 20 35 29 29 0a 0a 28 72 '(1 3 4 5))..(r
1660: 75 6e 2d 74 65 73 74 20 22 74 65 73 74 20 6f 66 un-test "test of
1670: 20 61 74 74 72 69 62 75 74 65 20 6d 61 74 63 68 attribute match
1680: 69 6e 67 3a 20 6d 75 6c 74 69 70 6c 65 20 61 74 ing: multiple at
1690: 74 72 69 62 75 74 65 73 20 69 6e 20 70 61 74 74 tributes in patt
16a0: 65 72 6e 22 0a 20 20 20 20 20 20 20 20 20 20 28 ern". (
16b0: 28 63 6f 6d 70 69 6c 65 2d 6d 61 74 63 68 20 28 (compile-match (
16c0: 65 20 28 40 20 28 79 20 2c 65 29 20 28 7a 20 2c e (@ (y ,e) (z ,
16d0: 64 29 29 20 2c 61 20 2c 62 20 2c 63 29 20 28 6c d)) ,a ,b ,c) (l
16e0: 69 73 74 20 65 20 64 20 61 20 62 20 63 29 29 20 ist e d a b c))
16f0: 27 28 65 20 28 40 20 28 7a 20 31 29 20 28 79 20 '(e (@ (z 1) (y
1700: 32 29 29 20 33 20 34 20 35 29 29 0a 20 20 20 20 2)) 3 4 5)).
1710: 20 20 20 20 20 20 27 28 32 20 31 20 33 20 34 20 '(2 1 3 4
1720: 35 29 29 0a 0a 28 72 75 6e 2d 74 65 73 74 20 22 5))..(run-test "
1730: 62 61 73 69 63 20 74 65 73 74 20 6f 66 20 65 6c basic test of el
1740: 6c 69 70 73 65 73 20 69 6e 20 70 61 74 74 65 72 lipses in patter
1750: 6e 3b 20 6e 6f 20 65 6c 6c 69 70 73 65 73 20 69 n; no ellipses i
1760: 6e 20 6f 75 74 70 75 74 22 0a 20 20 20 20 20 20 n output".
1770: 20 20 20 20 28 28 63 6f 6d 70 69 6c 65 2d 6d 61 ((compile-ma
1780: 74 63 68 20 28 65 20 2c 69 20 2e 2e 2e 29 20 69 tch (e ,i ...) i
1790: 29 20 27 28 65 20 33 20 34 20 35 29 29 0a 20 20 ) '(e 3 4 5)).
17a0: 20 20 20 20 20 20 20 20 27 28 33 20 34 20 35 29 '(3 4 5)
17b0: 29 0a 0a 28 72 75 6e 2d 74 65 73 74 20 22 74 65 )..(run-test "te
17c0: 73 74 20 6f 66 20 6e 6f 6e 2d 6e 75 6c 6c 20 74 st of non-null t
17d0: 61 69 6c 20 70 61 74 74 65 72 6e 20 66 6f 6c 6c ail pattern foll
17e0: 6f 77 69 6e 67 20 65 6c 6c 69 70 73 65 73 22 0a owing ellipses".
17f0: 20 20 20 20 20 20 20 20 20 20 28 28 63 6f 6d 70 ((comp
1800: 69 6c 65 2d 6d 61 74 63 68 20 28 65 20 2c 69 20 ile-match (e ,i
1810: 2e 2e 2e 20 2c 61 20 2c 62 29 20 69 29 20 27 28 ... ,a ,b) i) '(
1820: 65 20 33 20 34 20 35 20 36 20 37 29 29 0a 20 20 e 3 4 5 6 7)).
1830: 20 20 20 20 20 20 20 20 27 28 33 20 34 20 35 20 '(3 4 5
1840: 29 29 0a 0a 28 64 65 66 69 6e 65 20 73 69 6d 70 ))..(define simp
1850: 6c 65 2d 65 76 61 6c 34 0a 20 20 28 6c 61 6d 62 le-eval4. (lamb
1860: 64 61 20 28 78 29 0a 20 20 20 20 28 73 78 6d 6c da (x). (sxml
1870: 2d 6d 61 74 63 68 20 78 0a 20 20 20 20 20 20 5b -match x. [
1880: 2c 69 20 28 67 75 61 72 64 20 28 69 6e 74 65 67 ,i (guard (integ
1890: 65 72 3f 20 69 29 29 20 69 5d 0a 20 20 20 20 20 er? i)) i].
18a0: 20 5b 28 2b 20 2c 5b 78 2a 5d 20 2e 2e 2e 29 20 [(+ ,[x*] ...)
18b0: 28 61 70 70 6c 79 20 2b 20 78 2a 29 5d 0a 20 20 (apply + x*)].
18c0: 20 20 20 20 5b 28 2a 20 2c 5b 78 2a 5d 20 2e 2e [(* ,[x*] ..
18d0: 2e 29 20 28 61 70 70 6c 79 20 2a 20 78 2a 29 5d .) (apply * x*)]
18e0: 0a 20 20 20 20 20 20 5b 28 2d 20 2c 5b 78 5d 20 . [(- ,[x]
18f0: 2c 5b 79 5d 29 20 28 2d 20 78 20 79 29 5d 0a 20 ,[y]) (- x y)].
1900: 20 20 20 20 20 5b 28 2f 20 2c 5b 78 5d 20 2c 5b [(/ ,[x] ,[
1910: 79 5d 29 20 28 2f 20 78 20 79 29 5d 0a 20 20 20 y]) (/ x y)].
1920: 20 20 20 5b 2c 6f 74 68 65 72 77 69 73 65 20 28 [,otherwise (
1930: 65 72 72 6f 72 20 22 73 69 6d 70 6c 65 2d 65 76 error "simple-ev
1940: 61 6c 3a 20 69 6e 76 61 6c 69 64 20 65 78 70 72 al: invalid expr
1950: 65 73 73 69 6f 6e 22 20 78 29 5d 29 29 29 0a 0a ession" x)])))..
1960: 28 72 75 6e 2d 74 65 73 74 20 22 74 65 73 74 20 (run-test "test
1970: 6f 66 20 63 61 74 61 73 20 77 69 74 68 20 65 6c of catas with el
1980: 6c 69 70 73 65 73 20 69 6e 20 70 61 74 74 65 72 lipses in patter
1990: 6e 22 0a 20 20 20 20 20 20 20 20 20 20 28 73 69 n". (si
19a0: 6d 70 6c 65 2d 65 76 61 6c 34 20 27 28 2a 20 28 mple-eval4 '(* (
19b0: 2b 20 37 20 33 29 20 28 2d 20 37 20 33 29 29 29 + 7 3) (- 7 3)))
19c0: 0a 20 20 20 20 20 20 20 20 20 20 34 30 29 0a 0a . 40)..
19d0: 28 72 75 6e 2d 74 65 73 74 20 22 73 69 6d 70 6c (run-test "simpl
19e0: 65 20 74 65 73 74 20 6f 66 20 65 6c 6c 69 70 73 e test of ellips
19f0: 65 73 20 69 6e 20 70 61 74 74 65 72 6e 20 61 6e es in pattern an
1a00: 64 20 6f 75 74 70 75 74 22 0a 20 20 20 20 20 20 d output".
1a10: 20 20 20 20 28 28 63 6f 6d 70 69 6c 65 2d 6d 61 ((compile-ma
1a20: 74 63 68 20 28 65 20 2c 69 20 2e 2e 2e 29 20 28 tch (e ,i ...) (
1a30: 28 6c 61 6d 62 64 61 20 72 73 74 20 28 63 6f 6e (lambda rst (con
1a40: 73 20 27 66 20 72 73 74 29 29 20 69 20 2e 2e 2e s 'f rst)) i ...
1a50: 29 29 20 27 28 65 20 33 20 34 20 35 29 29 0a 20 )) '(e 3 4 5)).
1a60: 20 20 20 20 20 20 20 20 20 27 28 66 20 33 20 34 '(f 3 4
1a70: 20 35 29 29 0a 0a 28 64 65 66 69 6e 65 20 73 69 5))..(define si
1a80: 6d 70 6c 65 2d 65 76 61 6c 35 0a 20 20 28 6c 61 mple-eval5. (la
1a90: 6d 62 64 61 20 28 78 29 0a 20 20 20 20 28 73 78 mbda (x). (sx
1aa0: 6d 6c 2d 6d 61 74 63 68 20 78 0a 20 20 20 20 20 ml-match x.
1ab0: 20 5b 2c 69 20 28 67 75 61 72 64 20 28 69 6e 74 [,i (guard (int
1ac0: 65 67 65 72 3f 20 69 29 29 20 69 5d 0a 20 20 20 eger? i)) i].
1ad0: 20 20 20 5b 28 2b 20 2c 5b 78 2a 5d 20 2e 2e 2e [(+ ,[x*] ...
1ae0: 29 20 28 2b 20 78 2a 20 2e 2e 2e 29 5d 0a 20 20 ) (+ x* ...)].
1af0: 20 20 20 20 5b 28 2a 20 2c 5b 78 2a 5d 20 2e 2e [(* ,[x*] ..
1b00: 2e 29 20 28 2a 20 78 2a 20 2e 2e 2e 29 5d 0a 20 .) (* x* ...)].
1b10: 20 20 20 20 20 5b 28 2d 20 2c 5b 78 5d 20 2c 5b [(- ,[x] ,[
1b20: 79 5d 29 20 28 2d 20 78 20 79 29 5d 0a 20 20 20 y]) (- x y)].
1b30: 20 20 20 5b 28 2f 20 2c 5b 78 5d 20 2c 5b 79 5d [(/ ,[x] ,[y]
1b40: 29 20 28 2f 20 78 20 79 29 5d 0a 20 20 20 20 20 ) (/ x y)].
1b50: 20 5b 2c 6f 74 68 65 72 77 69 73 65 20 28 65 72 [,otherwise (er
1b60: 72 6f 72 20 22 73 69 6d 70 6c 65 2d 65 76 61 6c ror "simple-eval
1b70: 3a 20 69 6e 76 61 6c 69 64 20 65 78 70 72 65 73 : invalid expres
1b80: 73 69 6f 6e 22 20 78 29 5d 29 29 29 0a 0a 28 72 sion" x)])))..(r
1b90: 75 6e 2d 74 65 73 74 20 22 74 65 73 74 20 6f 66 un-test "test of
1ba0: 20 63 61 74 61 73 20 77 69 74 68 20 65 6c 6c 69 catas with elli
1bb0: 70 73 65 73 20 69 6e 20 70 61 74 74 65 72 6e 20 pses in pattern
1bc0: 61 6e 64 20 6f 75 74 70 75 74 22 0a 20 20 20 20 and output".
1bd0: 20 20 20 20 20 20 28 73 69 6d 70 6c 65 2d 65 76 (simple-ev
1be0: 61 6c 35 20 27 28 2a 20 28 2b 20 37 20 33 29 20 al5 '(* (+ 7 3)
1bf0: 28 2d 20 37 20 33 29 29 29 0a 20 20 20 20 20 20 (- 7 3))).
1c00: 20 20 20 20 34 30 29 0a 0a 28 72 75 6e 2d 74 65 40)..(run-te
1c10: 73 74 20 22 74 65 73 74 20 6f 66 20 6e 65 73 74 st "test of nest
1c20: 65 64 20 64 6f 74 73 20 69 6e 20 70 61 74 74 65 ed dots in patte
1c30: 72 6e 20 61 6e 64 20 6f 75 74 70 75 74 22 0a 20 rn and output".
1c40: 20 20 20 20 20 20 20 20 20 28 28 6c 61 6d 62 64 ((lambd
1c50: 61 20 28 78 29 0a 20 20 20 20 20 20 20 20 20 20 a (x).
1c60: 20 20 20 28 73 78 6d 6c 2d 6d 61 74 63 68 20 78 (sxml-match x
1c70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
1c80: 5b 28 64 20 28 61 20 2c 62 20 2e 2e 2e 29 20 2e [(d (a ,b ...) .
1c90: 2e 2e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 ..).
1ca0: 20 20 20 20 28 6c 69 73 74 20 28 6c 69 73 74 20 (list (list
1cb0: 62 20 2e 2e 2e 29 20 2e 2e 2e 29 5d 29 29 0a 20 b ...) ...)])).
1cc0: 20 20 20 20 20 20 20 20 20 20 27 28 64 20 28 61 '(d (a
1cd0: 20 31 20 32 20 33 29 20 28 61 20 34 20 35 29 20 1 2 3) (a 4 5)
1ce0: 28 61 20 36 20 37 20 38 29 20 28 61 20 39 20 31 (a 6 7 8) (a 9 1
1cf0: 30 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 27 0))). '
1d00: 28 28 31 20 32 20 33 29 20 28 34 20 35 29 20 28 ((1 2 3) (4 5) (
1d10: 36 20 37 20 38 29 20 28 39 20 31 30 29 29 29 0a 6 7 8) (9 10))).
1d20: 0a 28 72 75 6e 2d 74 65 73 74 20 22 74 65 73 74 .(run-test "test
1d30: 20 73 75 63 63 65 73 73 66 75 6c 20 74 61 69 6c successful tail
1d40: 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 20 28 pattern match (
1d50: 61 66 74 65 72 20 65 6c 6c 69 70 73 65 73 29 22 after ellipses)"
1d60: 0a 20 20 20 20 20 20 20 20 20 20 28 73 78 6d 6c . (sxml
1d70: 2d 6d 61 74 63 68 20 27 28 65 20 33 20 34 20 35 -match '(e 3 4 5
1d80: 20 36 20 37 29 20 28 28 65 20 2c 69 20 2e 2e 2e 6 7) ((e ,i ...
1d90: 20 36 20 37 29 20 23 74 29 20 28 2c 6f 74 68 65 6 7) #t) (,othe
1da0: 72 77 69 73 65 20 23 66 29 29 0a 20 20 20 20 20 rwise #f)).
1db0: 20 20 20 20 20 23 74 29 0a 0a 28 72 75 6e 2d 74 #t)..(run-t
1dc0: 65 73 74 20 22 74 65 73 74 20 66 61 69 6c 69 6e est "test failin
1dd0: 67 20 74 61 69 6c 20 70 61 74 74 65 72 6e 20 6d g tail pattern m
1de0: 61 74 63 68 20 28 61 66 74 65 72 20 65 6c 6c 69 atch (after elli
1df0: 70 73 65 73 29 2c 20 74 6f 6f 20 66 65 77 20 69 pses), too few i
1e00: 74 65 6d 73 22 0a 20 20 20 20 20 20 20 20 20 20 tems".
1e10: 28 73 78 6d 6c 2d 6d 61 74 63 68 20 27 28 65 20 (sxml-match '(e
1e20: 33 20 34 20 35 20 36 29 20 28 28 65 20 2c 69 20 3 4 5 6) ((e ,i
1e30: 2e 2e 2e 20 36 20 37 29 20 23 74 29 20 28 2c 6f ... 6 7) #t) (,o
1e40: 74 68 65 72 77 69 73 65 20 23 66 29 29 0a 20 20 therwise #f)).
1e50: 20 20 20 20 20 20 20 20 23 66 29 0a 0a 28 72 75 #f)..(ru
1e60: 6e 2d 74 65 73 74 20 22 74 65 73 74 20 66 61 69 n-test "test fai
1e70: 6c 69 6e 67 20 74 61 69 6c 20 70 61 74 74 65 72 ling tail patter
1e80: 6e 20 6d 61 74 63 68 20 28 61 66 74 65 72 20 65 n match (after e
1e90: 6c 6c 69 70 73 65 73 29 2c 20 74 6f 6f 20 6d 61 llipses), too ma
1ea0: 6e 79 20 69 74 65 6d 73 22 0a 20 20 20 20 20 20 ny items".
1eb0: 20 20 20 20 28 73 78 6d 6c 2d 6d 61 74 63 68 20 (sxml-match
1ec0: 27 28 65 20 33 20 34 20 35 20 36 20 37 20 38 29 '(e 3 4 5 6 7 8)
1ed0: 20 28 28 65 20 2c 69 20 2e 2e 2e 20 36 20 37 29 ((e ,i ... 6 7)
1ee0: 20 23 74 29 20 28 2c 6f 74 68 65 72 77 69 73 65 #t) (,otherwise
1ef0: 20 23 66 29 29 0a 20 20 20 20 20 20 20 20 20 20 #f)).
1f00: 23 66 29 0a 0a 28 72 75 6e 2d 74 65 73 74 20 22 #f)..(run-test "
1f10: 74 65 73 74 20 66 61 69 6c 69 6e 67 20 74 61 69 test failing tai
1f20: 6c 20 70 61 74 74 65 72 6e 20 6d 61 74 63 68 20 l pattern match
1f30: 28 61 66 74 65 72 20 65 6c 6c 69 70 73 65 73 29 (after ellipses)
1f40: 2c 20 77 72 6f 6e 67 20 69 74 65 6d 73 22 0a 20 , wrong items".
1f50: 20 20 20 20 20 20 20 20 20 28 73 78 6d 6c 2d 6d (sxml-m
1f60: 61 74 63 68 20 27 28 65 20 33 20 34 20 35 20 37 atch '(e 3 4 5 7
1f70: 20 38 29 20 28 28 65 20 2c 69 20 2e 2e 2e 20 36 8) ((e ,i ... 6
1f80: 20 37 29 20 23 74 29 20 28 2c 6f 74 68 65 72 77 7) #t) (,otherw
1f90: 69 73 65 20 23 66 29 29 0a 20 20 20 20 20 20 20 ise #f)).
1fa0: 20 20 20 23 66 29 0a 0a 28 72 75 6e 2d 74 65 73 #f)..(run-tes
1fb0: 74 20 22 74 65 73 74 20 6f 66 20 65 6c 6c 69 70 t "test of ellip
1fc0: 73 65 73 20 69 6e 20 6f 75 74 70 75 74 20 71 75 ses in output qu
1fd0: 61 73 69 71 75 6f 74 65 22 0a 20 20 20 20 20 20 asiquote".
1fe0: 20 20 20 20 28 73 78 6d 6c 2d 6d 61 74 63 68 20 (sxml-match
1ff0: 27 28 65 20 33 20 34 20 35 20 36 20 37 29 0a 20 '(e 3 4 5 6 7).
2000: 20 20 20 20 20 20 20 20 20 20 20 5b 28 65 20 2c [(e ,
2010: 69 20 2e 2e 2e 20 36 20 37 29 20 60 28 22 73 74 i ... 6 7) `("st
2020: 61 72 74 22 20 2c 69 20 2e 2e 2e 20 22 65 6e 64 art" ,i ... "end
2030: 22 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ")].
2040: 5b 2c 6f 74 68 65 72 77 69 73 65 20 23 66 5d 29 [,otherwise #f])
2050: 0a 20 20 20 20 20 20 20 20 20 20 27 28 22 73 74 . '("st
2060: 61 72 74 22 20 33 20 34 20 35 20 22 65 6e 64 22 art" 3 4 5 "end"
2070: 29 29 0a 0a 28 72 75 6e 2d 74 65 73 74 20 22 74 ))..(run-test "t
2080: 65 73 74 20 6f 66 20 65 6c 6c 69 70 73 65 73 20 est of ellipses
2090: 69 6e 20 6f 75 74 70 75 74 20 71 75 61 73 69 71 in output quasiq
20a0: 75 6f 74 65 2c 20 77 69 74 68 20 6d 6f 72 65 20 uote, with more
20b0: 63 6f 6d 70 6c 65 78 20 75 6e 71 75 6f 74 65 20 complex unquote
20c0: 65 78 70 72 65 73 73 69 6f 6e 22 0a 20 20 20 20 expression".
20d0: 20 20 20 20 20 20 28 73 78 6d 6c 2d 6d 61 74 63 (sxml-matc
20e0: 68 20 27 28 65 20 33 20 34 20 35 20 36 20 37 29 h '(e 3 4 5 6 7)
20f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 28 65 . [(e
2100: 20 2c 69 20 2e 2e 2e 20 36 20 37 29 20 60 28 22 ,i ... 6 7) `("
2110: 73 74 61 72 74 22 20 2c 28 6c 69 73 74 20 27 77 start" ,(list 'w
2120: 72 61 70 20 69 29 20 2e 2e 2e 20 22 65 6e 64 22 rap i) ... "end"
2130: 29 5d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b )]. [
2140: 2c 6f 74 68 65 72 77 69 73 65 20 23 66 5d 29 0a ,otherwise #f]).
2150: 20 20 20 20 20 20 20 20 20 20 27 28 22 73 74 61 '("sta
2160: 72 74 22 20 28 77 72 61 70 20 33 29 20 28 77 72 rt" (wrap 3) (wr
2170: 61 70 20 34 29 20 28 77 72 61 70 20 35 29 20 22 ap 4) (wrap 5) "
2180: 65 6e 64 22 29 29 0a 0a 28 72 75 6e 2d 74 65 73 end"))..(run-tes
2190: 74 20 22 74 65 73 74 20 6f 66 20 61 20 71 75 61 t "test of a qua
21a0: 73 69 71 75 6f 74 65 20 65 78 70 72 20 77 69 74 siquote expr wit
21b0: 68 69 6e 20 74 68 65 20 64 6f 74 74 65 64 20 75 hin the dotted u
21c0: 6e 71 75 6f 74 65 20 65 78 70 72 65 73 73 69 6f nquote expressio
21d0: 6e 22 0a 20 20 20 20 20 20 20 20 20 20 28 73 78 n". (sx
21e0: 6d 6c 2d 6d 61 74 63 68 20 27 28 65 20 33 20 34 ml-match '(e 3 4
21f0: 20 35 20 36 20 37 29 0a 20 20 20 20 20 20 20 20 5 6 7).
2200: 20 20 20 20 5b 28 65 20 2c 69 20 2e 2e 2e 20 36 [(e ,i ... 6
2210: 20 37 29 20 60 28 22 73 74 61 72 74 22 20 2c 60 7) `("start" ,`
2220: 28 77 72 61 70 20 2c 69 29 20 2e 2e 2e 20 22 65 (wrap ,i) ... "e
2230: 6e 64 22 29 5d 0a 20 20 20 20 20 20 20 20 20 20 nd")].
2240: 20 20 5b 2c 6f 74 68 65 72 77 69 73 65 20 23 66 [,otherwise #f
2250: 5d 29 0a 20 20 20 20 20 20 20 20 20 20 27 28 22 ]). '("
2260: 73 74 61 72 74 22 20 28 77 72 61 70 20 33 29 20 start" (wrap 3)
2270: 28 77 72 61 70 20 34 29 20 28 77 72 61 70 20 35 (wrap 4) (wrap 5
2280: 29 20 22 65 6e 64 22 29 29 0a 0a 28 64 65 66 69 ) "end"))..(defi
2290: 6e 65 20 78 20 27 28 64 20 28 61 20 31 20 32 20 ne x '(d (a 1 2
22a0: 33 29 20 28 61 20 34 20 35 29 20 28 61 20 36 20 3) (a 4 5) (a 6
22b0: 37 20 38 29 20 28 61 20 39 20 31 30 29 29 29 0a 7 8) (a 9 10))).
22c0: 0a 28 72 75 6e 2d 74 65 73 74 20 22 71 75 61 73 .(run-test "quas
22d0: 69 71 75 6f 74 65 20 74 65 73 74 73 22 0a 20 20 iquote tests".
22e0: 20 20 20 20 20 20 20 20 28 73 78 6d 6c 2d 6d 61 (sxml-ma
22f0: 74 63 68 20 78 0a 20 20 20 20 20 20 20 20 20 20 tch x.
2300: 20 20 5b 28 64 20 28 61 20 2c 62 20 2e 2e 2e 29 [(d (a ,b ...)
2310: 20 2e 2e 2e 29 0a 20 20 20 20 20 20 20 20 20 20 ...).
2320: 20 20 20 60 28 2c 60 28 2c 62 20 2e 2e 2e 29 20 `(,`(,b ...)
2330: 2e 2e 2e 29 5d 29 0a 20 20 20 20 20 20 20 20 20 ...)]).
2340: 20 27 28 28 31 20 32 20 33 29 20 28 34 20 35 29 '((1 2 3) (4 5)
2350: 20 28 36 20 37 20 38 29 20 28 39 20 31 30 29 29 (6 7 8) (9 10))
2360: 29 0a 0a 28 72 75 6e 2d 74 65 73 74 20 22 71 75 )..(run-test "qu
2370: 61 73 69 71 75 6f 74 65 20 74 65 73 74 73 22 0a asiquote tests".
2380: 20 20 20 20 20 20 20 20 20 20 28 73 78 6d 6c 2d (sxml-
2390: 6d 61 74 63 68 20 78 0a 20 20 20 20 20 20 20 20 match x.
23a0: 20 20 20 20 5b 28 64 20 28 61 20 2c 62 20 2e 2e [(d (a ,b ..
23b0: 2e 29 20 2e 2e 2e 29 0a 20 20 20 20 20 20 20 20 .) ...).
23c0: 20 20 20 20 20 28 6c 69 73 74 20 28 6c 69 73 74 (list (list
23d0: 20 62 20 2e 2e 2e 29 20 2e 2e 2e 29 5d 29 0a 20 b ...) ...)]).
23e0: 20 20 20 20 20 20 20 20 20 27 28 28 31 20 32 20 '((1 2
23f0: 33 29 20 28 34 20 35 29 20 28 36 20 37 20 38 29 3) (4 5) (6 7 8)
2400: 20 28 39 20 31 30 29 29 29 0a 0a 28 72 75 6e 2d (9 10)))..(run-
2410: 74 65 73 74 20 22 71 75 61 73 69 71 75 6f 74 65 test "quasiquote
2420: 20 74 65 73 74 73 22 0a 20 20 20 20 20 20 20 20 tests".
2430: 20 20 28 73 78 6d 6c 2d 6d 61 74 63 68 20 78 0a (sxml-match x.
2440: 20 20 20 20 20 20 20 20 20 20 20 20 5b 28 64 20 [(d
2450: 28 61 20 2c 62 20 2e 2e 2e 29 20 2e 2e 2e 29 0a (a ,b ...) ...).
2460: 20 20 20 20 20 20 20 20 20 20 20 20 20 60 28 78 `(x
2470: 78 20 2c 60 28 79 20 2c 62 20 2e 2e 2e 29 20 2e x ,`(y ,b ...) .
2480: 2e 2e 29 5d 29 0a 20 20 20 20 20 20 20 20 20 20 ..)]).
2490: 27 28 78 78 20 28 79 20 31 20 32 20 33 29 20 28 '(xx (y 1 2 3) (
24a0: 79 20 34 20 35 29 20 28 79 20 36 20 37 20 38 29 y 4 5) (y 6 7 8)
24b0: 20 28 79 20 39 20 31 30 29 29 29 0a 0a 28 72 75 (y 9 10)))..(ru
24c0: 6e 2d 74 65 73 74 20 22 71 75 61 73 69 71 75 6f n-test "quasiquo
24d0: 74 65 20 74 65 73 74 73 22 0a 20 20 20 20 20 20 te tests".
24e0: 20 20 20 20 28 73 78 6d 6c 2d 6d 61 74 63 68 20 (sxml-match
24f0: 78 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 28 x. [(
2500: 64 20 28 61 20 2c 62 20 2e 2e 2e 29 20 2e 2e 2e d (a ,b ...) ...
2510: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 60 ). `
2520: 28 78 78 20 2c 40 28 6d 61 70 20 28 6c 61 6d 62 (xx ,@(map (lamb
2530: 64 61 20 28 69 29 20 60 28 79 20 2c 40 69 29 29 da (i) `(y ,@i))
2540: 20 62 29 29 5d 29 0a 20 20 20 20 20 20 20 20 20 b))]).
2550: 20 27 28 78 78 20 28 79 20 31 20 32 20 33 29 20 '(xx (y 1 2 3)
2560: 28 79 20 34 20 35 29 20 28 79 20 36 20 37 20 38 (y 4 5) (y 6 7 8
2570: 29 20 28 79 20 39 20 31 30 29 29 29 0a 0a 28 72 ) (y 9 10)))..(r
2580: 75 6e 2d 74 65 73 74 20 22 71 75 61 73 69 71 75 un-test "quasiqu
2590: 6f 74 65 20 74 65 73 74 73 22 0a 20 20 20 20 20 ote tests".
25a0: 20 20 20 20 20 28 73 78 6d 6c 2d 6d 61 74 63 68 (sxml-match
25b0: 20 78 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b x. [
25c0: 28 64 20 28 61 20 2c 62 20 2e 2e 2e 29 20 2e 2e (d (a ,b ...) ..
25d0: 2e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 .).
25e0: 60 28 78 78 20 2c 28 63 6f 6e 73 20 27 79 20 62 `(xx ,(cons 'y b
25f0: 29 20 2e 2e 2e 29 5d 29 0a 20 20 20 20 20 20 20 ) ...)]).
2600: 20 20 20 27 28 78 78 20 28 79 20 31 20 32 20 33 '(xx (y 1 2 3
2610: 29 20 28 79 20 34 20 35 29 20 28 79 20 36 20 37 ) (y 4 5) (y 6 7
2620: 20 38 29 20 28 79 20 39 20 31 30 29 29 29 0a 0a 8) (y 9 10)))..
2630: 28 72 75 6e 2d 74 65 73 74 20 22 71 75 61 73 69 (run-test "quasi
2640: 71 75 6f 74 65 20 74 65 73 74 73 22 0a 20 20 20 quote tests".
2650: 20 20 20 20 20 20 20 28 73 78 6d 6c 2d 6d 61 74 (sxml-mat
2660: 63 68 20 78 0a 20 20 20 20 20 20 20 20 20 20 20 ch x.
2670: 20 5b 28 64 20 28 61 20 2c 62 20 2e 2e 2e 29 20 [(d (a ,b ...)
2680: 2e 2e 2e 29 0a 20 20 20 20 20 20 20 20 20 20 20 ...).
2690: 20 20 60 28 78 78 20 2c 60 28 79 20 2c 62 20 2e `(xx ,`(y ,b .
26a0: 2e 2e 29 20 2e 2e 2e 29 5d 29 0a 20 20 20 20 20 ..) ...)]).
26b0: 20 20 20 20 20 27 28 78 78 20 28 79 20 31 20 32 '(xx (y 1 2
26c0: 20 33 29 20 28 79 20 34 20 35 29 20 28 79 20 36 3) (y 4 5) (y 6
26d0: 20 37 20 38 29 20 28 79 20 39 20 31 30 29 29 29 7 8) (y 9 10)))
26e0: 0a 0a 28 72 75 6e 2d 74 65 73 74 20 22 71 75 61 ..(run-test "qua
26f0: 73 69 71 75 6f 74 65 20 74 65 73 74 73 22 0a 20 siquote tests".
2700: 20 20 20 20 20 20 20 20 20 28 73 78 6d 6c 2d 6d (sxml-m
2710: 61 74 63 68 20 78 0a 20 20 20 20 20 20 20 20 20 atch x.
2720: 20 20 20 5b 28 64 20 28 61 20 2c 62 20 2e 2e 2e [(d (a ,b ...
2730: 29 20 2e 2e 2e 29 0a 20 20 20 20 20 20 20 20 20 ) ...).
2740: 20 20 20 20 60 28 78 78 20 2c 60 28 79 20 2c 40 `(xx ,`(y ,@
2750: 62 29 20 2e 2e 2e 29 5d 29 0a 20 20 20 20 20 20 b) ...)]).
2760: 20 20 20 20 27 28 78 78 20 28 79 20 31 20 32 20 '(xx (y 1 2
2770: 33 29 20 28 79 20 34 20 35 29 20 28 79 20 36 20 3) (y 4 5) (y 6
2780: 37 20 38 29 20 28 79 20 39 20 31 30 29 29 29 0a 7 8) (y 9 10))).
2790: 0a 28 72 75 6e 2d 74 65 73 74 20 22 71 75 61 73 .(run-test "quas
27a0: 69 71 75 6f 74 65 20 74 65 73 74 73 22 0a 20 20 iquote tests".
27b0: 20 20 20 20 20 20 20 20 28 73 78 6d 6c 2d 6d 61 (sxml-ma
27c0: 74 63 68 20 78 0a 20 20 20 20 20 20 20 20 20 20 tch x.
27d0: 20 20 5b 28 64 20 28 61 20 2c 62 20 2e 2e 2e 29 [(d (a ,b ...)
27e0: 20 2e 2e 2e 29 0a 20 20 20 20 20 20 20 20 20 20 ...).
27f0: 20 20 20 60 28 28 2c 62 20 2e 2e 2e 29 20 2e 2e `((,b ...) ..
2800: 2e 29 5d 29 0a 20 20 20 20 20 20 20 20 20 20 27 .)]). '
2810: 28 28 31 20 32 20 33 29 20 28 34 20 35 29 20 28 ((1 2 3) (4 5) (
2820: 36 20 37 20 38 29 20 28 39 20 31 30 29 29 29 0a 6 7 8) (9 10))).
2830: 0a 28 72 75 6e 2d 74 65 73 74 20 22 71 75 61 73 .(run-test "quas
2840: 69 71 75 6f 74 65 20 74 65 73 74 73 22 0a 20 20 iquote tests".
2850: 20 20 20 20 20 20 20 20 28 73 78 6d 6c 2d 6d 61 (sxml-ma
2860: 74 63 68 20 78 0a 20 20 20 20 20 20 20 20 20 20 tch x.
2870: 20 20 5b 28 64 20 28 61 20 2c 62 20 2e 2e 2e 29 [(d (a ,b ...)
2880: 20 2e 2e 2e 29 0a 20 20 20 20 20 20 20 20 20 20 ...).
2890: 20 20 20 60 28 78 78 20 28 79 20 2c 62 20 2e 2e `(xx (y ,b ..
28a0: 2e 29 20 2e 2e 2e 29 5d 29 0a 20 20 20 20 20 20 .) ...)]).
28b0: 20 20 20 20 27 28 78 78 20 28 79 20 31 20 32 20 '(xx (y 1 2
28c0: 33 29 20 28 79 20 34 20 35 29 20 28 79 20 36 20 3) (y 4 5) (y 6
28d0: 37 20 38 29 20 28 79 20 39 20 31 30 29 29 29 0a 7 8) (y 9 10))).
28e0: 0a 28 64 65 66 69 6e 65 20 28 70 72 6f 67 2d 74 .(define (prog-t
28f0: 72 61 6e 73 20 70 29 0a 20 20 28 73 78 6d 6c 2d rans p). (sxml-
2900: 6d 61 74 63 68 20 70 0a 20 20 20 20 5b 28 50 72 match p. [(Pr
2910: 6f 67 72 61 6d 20 28 53 74 61 72 74 20 2c 73 74 ogram (Start ,st
2920: 61 72 74 2d 74 69 6d 65 29 20 28 44 75 72 61 74 art-time) (Durat
2930: 69 6f 6e 20 2c 64 75 72 29 20 28 53 65 72 69 65 ion ,dur) (Serie
2940: 73 20 2c 73 65 72 69 65 73 2d 74 69 74 6c 65 29 s ,series-title)
2950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 . (
2960: 44 65 73 63 72 69 70 74 69 6f 6e 20 2e 20 2c 64 Description . ,d
2970: 65 73 63 29 0a 20 20 20 20 20 20 20 20 20 20 20 esc).
2980: 20 20 20 2c 63 6c 29 0a 20 20 20 20 20 60 28 64 ,cl). `(d
2990: 69 76 20 28 70 20 2c 73 74 61 72 74 2d 74 69 6d iv (p ,start-tim
29a0: 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 e.
29b0: 28 62 72 29 20 2c 73 65 72 69 65 73 2d 74 69 74 (br) ,series-tit
29c0: 6c 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 le.
29d0: 20 28 62 72 29 20 2c 64 65 73 63 29 0a 20 20 20 (br) ,desc).
29e0: 20 20 20 20 20 20 20 20 2c 63 6c 29 5d 0a 20 20 ,cl)].
29f0: 20 20 5b 28 50 72 6f 67 72 61 6d 20 28 53 74 61 [(Program (Sta
2a00: 72 74 20 2c 73 74 61 72 74 2d 74 69 6d 65 29 20 rt ,start-time)
2a10: 28 44 75 72 61 74 69 6f 6e 20 2c 64 75 72 29 20 (Duration ,dur)
2a20: 28 53 65 72 69 65 73 20 2c 73 65 72 69 65 73 2d (Series ,series-
2a30: 74 69 74 6c 65 29 0a 20 20 20 20 20 20 20 20 20 title).
2a40: 20 20 20 20 20 28 44 65 73 63 72 69 70 74 69 6f (Descriptio
2a50: 6e 20 2e 20 2c 64 65 73 63 29 29 0a 20 20 20 20 n . ,desc)).
2a60: 20 60 28 64 69 76 20 28 70 20 2c 73 74 61 72 74 `(div (p ,start
2a70: 2d 74 69 6d 65 0a 20 20 20 20 20 20 20 20 20 20 -time.
2a80: 20 20 20 20 28 62 72 29 20 2c 73 65 72 69 65 73 (br) ,series
2a90: 2d 74 69 74 6c 65 0a 20 20 20 20 20 20 20 20 20 -title.
2aa0: 20 20 20 20 20 28 62 72 29 20 2c 64 65 73 63 29 (br) ,desc)
2ab0: 29 5d 0a 20 20 20 20 5b 28 50 72 6f 67 72 61 6d )]. [(Program
2ac0: 20 28 53 74 61 72 74 20 2c 73 74 61 72 74 2d 74 (Start ,start-t
2ad0: 69 6d 65 29 20 28 44 75 72 61 74 69 6f 6e 20 2c ime) (Duration ,
2ae0: 64 75 72 29 20 28 53 65 72 69 65 73 20 2c 73 65 dur) (Series ,se
2af0: 72 69 65 73 2d 74 69 74 6c 65 29 29 0a 20 20 20 ries-title)).
2b00: 20 20 60 28 64 69 76 20 28 70 20 2c 73 74 61 72 `(div (p ,star
2b10: 74 2d 74 69 6d 65 0a 20 20 20 20 20 20 20 20 20 t-time.
2b20: 20 20 20 20 20 28 62 72 29 20 2c 73 65 72 69 65 (br) ,serie
2b30: 73 2d 74 69 74 6c 65 29 29 5d 29 29 0a 0a 28 72 s-title))]))..(r
2b40: 75 6e 2d 74 65 73 74 20 22 74 65 73 74 20 66 6f un-test "test fo
2b50: 72 20 73 68 72 69 6e 6b 69 6e 67 2d 6f 72 64 65 r shrinking-orde
2b60: 72 20 6c 69 73 74 20 6f 66 20 70 61 74 74 65 72 r list of patter
2b70: 6e 20 63 6c 61 75 73 65 73 22 0a 20 20 20 20 20 n clauses".
2b80: 20 20 20 20 20 28 70 72 6f 67 2d 74 72 61 6e 73 (prog-trans
2b90: 20 27 28 50 72 6f 67 72 61 6d 20 28 53 74 61 72 '(Program (Star
2ba0: 74 20 22 32 30 30 31 2d 30 37 2d 30 35 54 32 30 t "2001-07-05T20
2bb0: 3a 30 30 3a 30 30 22 29 20 28 44 75 72 61 74 69 :00:00") (Durati
2bc0: 6f 6e 20 22 50 54 31 48 22 29 20 28 53 65 72 69 on "PT1H") (Seri
2bd0: 65 73 20 22 48 6f 6d 65 46 72 6f 6e 74 22 29 29 es "HomeFront"))
2be0: 29 0a 20 20 20 20 20 20 20 20 20 20 27 28 64 69 ). '(di
2bf0: 76 20 28 70 20 22 32 30 30 31 2d 30 37 2d 30 35 v (p "2001-07-05
2c00: 54 32 30 3a 30 30 3a 30 30 22 20 28 62 72 29 20 T20:00:00" (br)
2c10: 22 48 6f 6d 65 46 72 6f 6e 74 22 29 29 29 0a 0a "HomeFront")))..
2c20: 28 72 75 6e 2d 74 65 73 74 20 22 74 65 73 74 20 (run-test "test
2c30: 62 69 6e 64 69 6e 67 20 6f 66 20 75 6e 6d 61 74 binding of unmat
2c40: 63 68 65 64 20 61 74 74 72 69 62 75 74 65 73 22 ched attributes"
2c50: 0a 20 20 20 20 20 20 20 20 20 20 28 73 78 6d 6c . (sxml
2c60: 2d 6d 61 74 63 68 20 27 28 61 20 28 40 20 28 7a -match '(a (@ (z
2c70: 20 31 29 20 28 79 20 32 29 20 28 78 20 33 29 29 1) (y 2) (x 3))
2c80: 20 34 20 35 20 36 29 0a 20 20 20 20 20 20 20 20 4 5 6).
2c90: 20 20 20 20 5b 28 61 20 28 40 20 28 79 20 2c 77 [(a (@ (y ,w
2ca0: 77 77 29 20 2e 20 2c 71 71 71 29 20 2c 74 20 2e ww) . ,qqq) ,t .
2cb0: 2e 2e 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 ..).
2cc0: 20 28 6c 69 73 74 20 77 77 77 20 71 71 71 20 74 (list www qqq t
2cd0: 20 2e 2e 2e 29 5d 29 0a 20 20 20 20 20 20 20 20 ...)]).
2ce0: 20 20 27 28 32 20 28 28 7a 20 31 29 20 28 78 20 '(2 ((z 1) (x
2cf0: 33 29 29 20 34 20 35 20 36 29 29 0a 0a 28 72 75 3)) 4 5 6))..(ru
2d00: 6e 2d 74 65 73 74 20 22 74 65 73 74 20 62 69 6e n-test "test bin
2d10: 64 69 6e 67 20 61 6c 6c 20 61 74 74 72 69 62 75 ding all attribu
2d20: 74 65 73 22 0a 20 20 20 20 20 20 20 20 20 20 28 tes". (
2d30: 73 78 6d 6c 2d 6d 61 74 63 68 20 27 28 61 20 28 sxml-match '(a (
2d40: 40 20 28 7a 20 31 29 20 28 79 20 32 29 20 28 78 @ (z 1) (y 2) (x
2d50: 20 33 29 29 20 34 20 35 20 36 29 0a 20 20 20 20 3)) 4 5 6).
2d60: 20 20 20 20 20 20 20 20 5b 28 61 20 28 40 20 2e [(a (@ .
2d70: 20 2c 71 71 71 29 20 2c 74 20 2e 2e 2e 29 0a 20 ,qqq) ,t ...).
2d80: 20 20 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 (lis
2d90: 74 20 71 71 71 20 74 20 2e 2e 2e 29 5d 29 0a 20 t qqq t ...)]).
2da0: 20 20 20 20 20 20 20 20 20 27 28 28 28 7a 20 31 '(((z 1
2db0: 29 20 28 79 20 32 29 20 28 78 20 33 29 29 20 34 ) (y 2) (x 3)) 4
2dc0: 20 35 20 36 29 29 0a 0a 5 6))..