Artifact
005a453850879dd4949999e68b4cef01061f9f6a:
- File
srfi/tests/lists.sps
— part of check-in
[80c8c83034]
at
2016-07-07 18:11:39
on branch trunk
— initial import
(user:
ovenpasta@pizzahack.eu
size: 19157)
0000: 3b 20 54 65 73 74 20 73 75 69 74 65 20 66 6f 72 ; Test suite for
0010: 20 53 52 46 49 2d 31 0a 3b 20 32 30 30 33 2d 31 SRFI-1.; 2003-1
0020: 32 2d 32 39 20 2f 20 6c 74 68 0a 3b 0a 3b 20 4e 2-29 / lth.;.; N
0030: 6f 74 65 3a 20 49 6e 20 4c 61 72 63 65 6e 79 2c ote: In Larceny,
0040: 20 77 65 20 72 65 71 75 69 72 65 20 74 68 61 74 we require that
0050: 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 73 20 the procedures
0060: 64 65 73 69 67 6e 61 74 65 64 20 61 73 0a 3b 20 designated as.;
0070: 22 6c 69 6e 65 61 72 20 75 70 64 61 74 65 22 20 "linear update"
0080: 76 61 72 69 61 6e 74 73 20 69 6e 20 74 68 65 20 variants in the
0090: 73 70 65 63 20 28 65 67 20 61 70 70 65 6e 64 21 spec (eg append!
00a0: 29 20 73 69 64 65 2d 65 66 66 65 63 74 20 74 68 ) side-effect th
00b0: 65 69 72 0a 3b 20 61 72 67 75 6d 65 6e 74 73 2c eir.; arguments,
00c0: 20 61 6e 64 20 74 68 65 72 65 20 61 72 65 20 74 and there are t
00d0: 65 73 74 73 20 68 65 72 65 20 74 68 61 74 20 63 ests here that c
00e0: 68 65 63 6b 20 74 68 61 74 20 73 69 64 65 2d 65 heck that side-e
00f0: 66 66 65 63 74 69 6e 67 0a 3b 20 6f 63 63 75 72 ffecting.; occur
0100: 73 2e 0a 3b 0a 3b 20 46 6f 72 20 6c 69 6e 65 61 s..;.; For linea
0110: 72 20 75 70 64 61 74 65 20 77 65 20 6f 6e 6c 79 r update we only
0120: 20 72 65 71 75 69 72 65 20 74 68 61 74 20 74 68 require that th
0130: 65 20 63 65 6c 6c 73 20 6f 66 20 74 68 65 20 72 e cells of the r
0140: 65 73 75 6c 74 20 61 72 65 0a 3b 20 74 61 6b 65 esult are.; take
0150: 6e 20 66 72 6f 6d 20 74 68 65 20 63 65 6c 6c 73 n from the cells
0160: 20 6f 66 20 74 68 65 20 69 6e 70 75 74 2e 20 20 of the input.
0170: 57 65 20 63 6f 75 6c 64 20 62 65 20 73 74 72 69 We could be stri
0180: 63 74 65 72 20 61 6e 64 20 72 65 71 75 69 72 65 cter and require
0190: 0a 3b 20 74 68 61 74 20 74 68 65 20 63 65 6c 6c .; that the cell
01a0: 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 s of the results
01b0: 20 61 72 65 20 74 68 65 20 63 65 6c 6c 73 20 6f are the cells o
01c0: 66 20 74 68 65 20 69 6e 70 75 74 20 77 69 74 68 f the input with
01d0: 20 6f 6e 6c 79 0a 3b 20 74 68 65 20 43 44 52 20 only.; the CDR
01e0: 63 68 61 6e 67 65 64 2c 20 69 65 2c 20 76 61 6c changed, ie, val
01f0: 75 65 73 20 61 72 65 20 6e 65 76 65 72 20 6d 6f ues are never mo
0200: 76 65 64 20 66 72 6f 6d 20 6f 6e 65 20 63 65 6c ved from one cel
0210: 6c 20 74 6f 20 61 6e 6f 74 68 65 72 2e 0a 0a 28 l to another...(
0220: 69 6d 70 6f 72 74 20 28 65 78 63 65 70 74 20 28 import (except (
0230: 72 6e 72 73 20 62 61 73 65 29 20 6d 61 70 20 66 rnrs base) map f
0240: 6f 72 2d 65 61 63 68 29 0a 20 20 20 20 20 20 20 or-each).
0250: 20 28 72 6e 72 73 20 69 6f 20 73 69 6d 70 6c 65 (rnrs io simple
0260: 29 0a 20 20 20 20 20 20 20 20 28 72 6e 72 73 20 ). (rnrs
0270: 72 35 72 73 29 0a 20 20 20 20 20 20 20 20 28 73 r5rs). (s
0280: 75 72 66 61 67 65 20 73 31 20 6c 69 73 74 73 29 urfage s1 lists)
0290: 29 0a 0a 28 64 65 66 69 6e 65 20 28 77 72 69 74 )..(define (writ
02a0: 65 6c 6e 20 2e 20 78 73 29 0a 20 20 28 66 6f 72 eln . xs). (for
02b0: 2d 65 61 63 68 20 64 69 73 70 6c 61 79 20 78 73 -each display xs
02c0: 29 0a 20 20 28 6e 65 77 6c 69 6e 65 29 29 0a 0a ). (newline))..
02d0: 28 64 65 66 69 6e 65 20 28 66 61 69 6c 20 74 6f (define (fail to
02e0: 6b 65 6e 20 2e 20 6d 6f 72 65 29 0a 20 20 28 77 ken . more). (w
02f0: 72 69 74 65 6c 6e 20 22 45 72 72 6f 72 3a 20 74 riteln "Error: t
0300: 65 73 74 20 66 61 69 6c 65 64 3a 20 22 20 74 6f est failed: " to
0310: 6b 65 6e 29 0a 20 20 23 66 29 0a 0a 3b 20 54 65 ken). #f)..; Te
0320: 73 74 20 63 61 73 65 73 20 61 72 65 20 6f 72 64 st cases are ord
0330: 65 72 65 64 20 61 73 20 69 6e 20 74 68 65 20 73 ered as in the s
0340: 70 65 63 2e 20 20 52 35 52 53 20 70 72 6f 63 65 pec. R5RS proce
0350: 64 75 72 65 73 20 61 72 65 20 6c 65 66 74 20 6f dures are left o
0360: 75 74 2e 0a 0a 28 6f 72 20 28 65 71 75 61 6c 3f ut...(or (equal?
0370: 20 28 78 63 6f 6e 73 20 31 20 32 29 20 27 28 32 (xcons 1 2) '(2
0380: 20 2e 20 31 29 29 0a 20 20 20 20 28 66 61 69 6c . 1)). (fail
0390: 20 27 78 63 6f 6e 73 3a 31 29 29 0a 0a 28 6f 72 'xcons:1))..(or
03a0: 20 28 65 71 75 61 6c 3f 20 28 63 6f 6e 73 2a 20 (equal? (cons*
03b0: 31 29 20 31 29 0a 20 20 20 20 28 66 61 69 6c 20 1) 1). (fail
03c0: 27 63 6f 6e 73 2a 3a 31 29 29 0a 28 6f 72 20 28 'cons*:1)).(or (
03d0: 65 71 75 61 6c 3f 20 28 63 6f 6e 73 2a 20 31 20 equal? (cons* 1
03e0: 32 20 33 20 34 20 35 29 20 27 28 31 20 32 20 33 2 3 4 5) '(1 2 3
03f0: 20 34 20 2e 20 35 29 29 0a 20 20 20 20 28 66 61 4 . 5)). (fa
0400: 69 6c 20 27 63 6f 6e 73 2a 3a 32 29 29 0a 0a 28 il 'cons*:2))..(
0410: 6f 72 20 28 65 71 75 61 6c 3f 20 28 6d 61 6b 65 or (equal? (make
0420: 2d 6c 69 73 74 20 35 20 23 74 29 20 27 28 23 74 -list 5 #t) '(#t
0430: 20 23 74 20 23 74 20 23 74 20 23 74 29 29 0a 20 #t #t #t #t)).
0440: 20 20 20 28 66 61 69 6c 20 27 6d 61 6b 65 2d 6c (fail 'make-l
0450: 69 73 74 3a 31 29 29 0a 28 6f 72 20 28 65 71 75 ist:1)).(or (equ
0460: 61 6c 3f 20 28 6d 61 6b 65 2d 6c 69 73 74 20 30 al? (make-list 0
0470: 20 23 66 29 20 27 28 29 29 0a 20 20 20 20 28 66 #f) '()). (f
0480: 61 69 6c 20 27 6d 61 6b 65 2d 6c 69 73 74 3a 32 ail 'make-list:2
0490: 29 29 0a 28 6f 72 20 28 65 71 75 61 6c 3f 20 28 )).(or (equal? (
04a0: 6c 65 6e 67 74 68 20 28 6d 61 6b 65 2d 6c 69 73 length (make-lis
04b0: 74 20 33 29 29 20 33 29 0a 20 20 20 20 28 66 61 t 3)) 3). (fa
04c0: 69 6c 20 27 6d 61 6b 65 2d 6c 69 73 74 3a 33 29 il 'make-list:3)
04d0: 29 0a 0a 28 6f 72 20 28 65 71 75 61 6c 3f 20 28 )..(or (equal? (
04e0: 6c 69 73 74 2d 74 61 62 75 6c 61 74 65 20 35 20 list-tabulate 5
04f0: 28 6c 61 6d 62 64 61 20 28 78 29 20 78 29 29 20 (lambda (x) x))
0500: 27 28 30 20 31 20 32 20 33 20 34 29 29 0a 20 20 '(0 1 2 3 4)).
0510: 20 20 28 66 61 69 6c 20 27 6c 69 73 74 2d 74 61 (fail 'list-ta
0520: 62 75 6c 61 74 65 3a 31 29 29 0a 28 6f 72 20 28 bulate:1)).(or (
0530: 65 71 75 61 6c 3f 20 28 6c 69 73 74 2d 74 61 62 equal? (list-tab
0540: 75 6c 61 74 65 20 30 20 28 6c 61 6d 62 64 61 20 ulate 0 (lambda
0550: 28 78 29 20 28 65 72 72 6f 72 20 23 66 20 22 46 (x) (error #f "F
0560: 4f 4f 21 22 29 29 29 20 27 28 29 29 0a 20 20 20 OO!"))) '()).
0570: 20 28 66 61 69 6c 20 27 6c 69 73 74 2d 74 61 62 (fail 'list-tab
0580: 6c 75 61 74 65 3a 32 29 29 0a 0a 28 6f 72 20 28 luate:2))..(or (
0590: 63 61 6c 6c 2d 77 69 74 68 2d 63 75 72 72 65 6e call-with-curren
05a0: 74 2d 63 6f 6e 74 69 6e 75 61 74 69 6f 6e 0a 20 t-continuation.
05b0: 20 20 20 20 28 6c 61 6d 62 64 61 20 28 61 62 6f (lambda (abo
05c0: 72 74 29 0a 20 20 20 20 20 20 20 28 6c 65 74 2a rt). (let*
05d0: 20 28 28 63 20 20 28 6c 69 73 74 20 31 20 32 20 ((c (list 1 2
05e0: 33 20 34 20 35 29 29 0a 09 20 20 20 20 20 20 28 3 4 5)).. (
05f0: 63 70 20 28 6c 69 73 74 2d 63 6f 70 79 20 63 29 cp (list-copy c)
0600: 29 29 0a 09 20 28 6f 72 20 28 65 71 75 61 6c 3f )).. (or (equal?
0610: 20 63 20 63 70 29 0a 09 20 20 20 20 20 28 61 62 c cp).. (ab
0620: 6f 72 74 20 23 66 29 29 0a 09 20 28 6c 65 74 20 ort #f)).. (let
0630: 6c 6f 6f 70 20 28 28 63 20 63 29 20 28 63 70 20 loop ((c c) (cp
0640: 63 70 29 29 0a 09 20 20 20 28 69 66 20 28 6e 6f cp)).. (if (no
0650: 74 20 28 6e 75 6c 6c 3f 20 63 29 29 0a 09 20 20 t (null? c))..
0660: 20 20 20 20 20 28 62 65 67 69 6e 0a 09 09 20 28 (begin... (
0670: 6f 72 20 28 6e 6f 74 20 28 65 71 3f 20 63 20 63 or (not (eq? c c
0680: 70 29 29 0a 09 09 20 20 20 20 20 28 61 62 6f 72 p))... (abor
0690: 74 20 23 66 29 29 0a 09 09 20 28 6c 6f 6f 70 20 t #f))... (loop
06a0: 28 63 64 72 20 63 29 20 28 63 64 72 20 63 70 29 (cdr c) (cdr cp)
06b0: 29 29 29 29 0a 09 20 23 74 29 29 29 0a 20 20 20 )))).. #t))).
06c0: 20 28 66 61 69 6c 20 27 6c 69 73 74 2d 63 6f 70 (fail 'list-cop
06d0: 79 3a 31 29 29 0a 0a 28 6f 72 20 28 65 71 75 61 y:1))..(or (equa
06e0: 6c 3f 20 28 6c 69 73 74 2d 63 6f 70 79 20 27 28 l? (list-copy '(
06f0: 31 20 32 20 33 20 2e 20 34 29 29 20 27 28 31 20 1 2 3 . 4)) '(1
0700: 32 20 33 20 2e 20 34 29 29 0a 20 20 20 20 28 66 2 3 . 4)). (f
0710: 61 69 6c 20 27 6c 69 73 74 2d 63 6f 70 79 3a 32 ail 'list-copy:2
0720: 29 29 0a 0a 28 6f 72 20 28 6e 6f 74 20 28 6c 69 ))..(or (not (li
0730: 73 74 3f 20 28 63 69 72 63 75 6c 61 72 2d 6c 69 st? (circular-li
0740: 73 74 20 31 20 32 20 33 29 29 29 0a 20 20 20 20 st 1 2 3))).
0750: 28 66 61 69 6c 20 27 63 69 72 63 75 6c 61 72 2d (fail 'circular-
0760: 6c 69 73 74 3a 31 29 29 0a 28 6f 72 20 28 6c 65 list:1)).(or (le
0770: 74 2a 20 28 28 61 20 28 6c 69 73 74 20 27 61 29 t* ((a (list 'a)
0780: 29 0a 09 20 20 20 28 62 20 28 6c 69 73 74 20 27 ).. (b (list '
0790: 62 29 29 0a 09 20 20 20 28 63 20 28 6c 69 73 74 b)).. (c (list
07a0: 20 27 63 29 29 0a 09 20 20 20 28 78 20 28 63 69 'c)).. (x (ci
07b0: 72 63 75 6c 61 72 2d 6c 69 73 74 20 61 20 62 20 rcular-list a b
07c0: 63 29 29 29 0a 20 20 20 20 20 20 28 61 6e 64 20 c))). (and
07d0: 28 65 71 3f 20 61 20 28 63 61 72 20 78 29 29 0a (eq? a (car x)).
07e0: 09 20 20 20 28 65 71 3f 20 62 20 28 63 61 64 72 . (eq? b (cadr
07f0: 20 78 29 29 0a 09 20 20 20 28 65 71 3f 20 63 20 x)).. (eq? c
0800: 28 63 61 64 64 72 20 78 29 29 0a 09 20 20 20 28 (caddr x)).. (
0810: 65 71 3f 20 61 20 28 63 61 64 64 64 72 20 78 29 eq? a (cadddr x)
0820: 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 63 ))). (fail 'c
0830: 69 72 63 75 6c 61 72 2d 6c 69 73 74 3a 32 29 29 ircular-list:2))
0840: 0a 0a 28 6f 72 20 28 65 71 75 61 6c 3f 20 28 69 ..(or (equal? (i
0850: 6f 74 61 20 30 29 20 27 28 29 29 0a 20 20 20 20 ota 0) '()).
0860: 28 66 61 69 6c 20 27 69 6f 74 61 3a 31 29 29 0a (fail 'iota:1)).
0870: 28 6f 72 20 28 65 71 75 61 6c 3f 20 28 69 6f 74 (or (equal? (iot
0880: 61 20 35 20 32 20 33 29 20 27 28 32 20 35 20 38 a 5 2 3) '(2 5 8
0890: 20 31 31 20 31 34 29 29 0a 20 20 20 20 28 66 61 11 14)). (fa
08a0: 69 6c 20 27 69 6f 74 61 3a 32 29 29 0a 28 6f 72 il 'iota:2)).(or
08b0: 20 28 65 71 75 61 6c 3f 20 28 69 6f 74 61 20 35 (equal? (iota 5
08c0: 20 32 29 20 27 28 32 20 33 20 34 20 35 20 36 29 2) '(2 3 4 5 6)
08d0: 29 0a 20 20 20 20 28 66 61 69 6c 20 27 69 6f 74 ). (fail 'iot
08e0: 61 3a 33 29 29 0a 0a 28 6f 72 20 28 70 72 6f 70 a:3))..(or (prop
08f0: 65 72 2d 6c 69 73 74 3f 20 27 28 31 20 32 20 33 er-list? '(1 2 3
0900: 20 34 20 35 29 29 0a 20 20 20 20 28 66 61 69 6c 4 5)). (fail
0910: 20 27 70 72 6f 70 65 72 2d 6c 69 73 74 3f 3a 31 'proper-list?:1
0920: 29 29 0a 28 6f 72 20 28 70 72 6f 70 65 72 2d 6c )).(or (proper-l
0930: 69 73 74 3f 20 27 28 29 29 0a 20 20 20 20 28 66 ist? '()). (f
0940: 61 69 6c 20 27 70 72 6f 70 65 72 2d 6c 69 73 74 ail 'proper-list
0950: 3f 3a 32 29 29 0a 28 6f 72 20 28 6e 6f 74 20 28 ?:2)).(or (not (
0960: 70 72 6f 70 65 72 2d 6c 69 73 74 3f 20 27 28 31 proper-list? '(1
0970: 20 32 20 2e 20 33 29 29 29 0a 20 20 20 20 28 66 2 . 3))). (f
0980: 61 69 6c 20 27 70 72 6f 70 65 72 2d 6c 69 73 74 ail 'proper-list
0990: 3f 3a 33 29 29 0a 28 6f 72 20 28 6e 6f 74 20 28 ?:3)).(or (not (
09a0: 70 72 6f 70 65 72 2d 6c 69 73 74 3f 20 28 63 69 proper-list? (ci
09b0: 72 63 75 6c 61 72 2d 6c 69 73 74 20 31 20 32 20 rcular-list 1 2
09c0: 33 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 3))). (fail '
09d0: 70 72 6f 70 65 72 2d 6c 69 73 74 3a 34 29 29 0a proper-list:4)).
09e0: 0a 28 6f 72 20 28 6e 6f 74 20 28 63 69 72 63 75 .(or (not (circu
09f0: 6c 61 72 2d 6c 69 73 74 3f 20 27 28 31 20 32 20 lar-list? '(1 2
0a00: 33 20 34 20 35 29 29 29 0a 20 20 20 20 28 66 61 3 4 5))). (fa
0a10: 69 6c 20 27 63 69 72 63 75 6c 61 72 2d 6c 69 73 il 'circular-lis
0a20: 74 3f 3a 31 29 29 0a 28 6f 72 20 28 6e 6f 74 20 t?:1)).(or (not
0a30: 28 63 69 72 63 75 6c 61 72 2d 6c 69 73 74 3f 20 (circular-list?
0a40: 27 28 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 '())). (fail
0a50: 27 63 69 72 63 75 6c 61 72 2d 6c 69 73 74 3f 3a 'circular-list?:
0a60: 32 29 29 0a 28 6f 72 20 28 6e 6f 74 20 28 63 69 2)).(or (not (ci
0a70: 72 63 75 6c 61 72 2d 6c 69 73 74 3f 20 27 28 31 rcular-list? '(1
0a80: 20 32 20 2e 20 33 29 29 29 0a 20 20 20 20 28 66 2 . 3))). (f
0a90: 61 69 6c 20 27 63 69 72 63 75 6c 61 72 2d 6c 69 ail 'circular-li
0aa0: 73 74 3f 3a 33 29 29 0a 28 6f 72 20 28 63 69 72 st?:3)).(or (cir
0ab0: 63 75 6c 61 72 2d 6c 69 73 74 3f 20 28 63 69 72 cular-list? (cir
0ac0: 63 75 6c 61 72 2d 6c 69 73 74 20 31 20 32 20 33 cular-list 1 2 3
0ad0: 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 63 69 )). (fail 'ci
0ae0: 72 63 75 6c 61 72 2d 6c 69 73 74 3a 34 29 29 0a rcular-list:4)).
0af0: 0a 28 6f 72 20 28 6e 6f 74 20 28 64 6f 74 74 65 .(or (not (dotte
0b00: 64 2d 6c 69 73 74 3f 20 27 28 31 20 32 20 33 20 d-list? '(1 2 3
0b10: 34 20 35 29 29 29 0a 20 20 20 20 28 66 61 69 6c 4 5))). (fail
0b20: 20 27 64 6f 74 74 65 64 2d 6c 69 73 74 3f 3a 31 'dotted-list?:1
0b30: 29 29 0a 28 6f 72 20 28 6e 6f 74 20 28 64 6f 74 )).(or (not (dot
0b40: 74 65 64 2d 6c 69 73 74 3f 20 27 28 29 29 29 0a ted-list? '())).
0b50: 20 20 20 20 28 66 61 69 6c 20 27 64 6f 74 74 65 (fail 'dotte
0b60: 64 2d 6c 69 73 74 3f 3a 32 29 29 0a 28 6f 72 20 d-list?:2)).(or
0b70: 28 64 6f 74 74 65 64 2d 6c 69 73 74 3f 20 27 28 (dotted-list? '(
0b80: 31 20 32 20 2e 20 33 29 29 0a 20 20 20 20 28 66 1 2 . 3)). (f
0b90: 61 69 6c 20 27 64 6f 74 74 65 64 2d 6c 69 73 74 ail 'dotted-list
0ba0: 3f 3a 33 29 29 0a 28 6f 72 20 28 6e 6f 74 20 28 ?:3)).(or (not (
0bb0: 64 6f 74 74 65 64 2d 6c 69 73 74 3f 20 28 63 69 dotted-list? (ci
0bc0: 72 63 75 6c 61 72 2d 6c 69 73 74 20 31 20 32 20 rcular-list 1 2
0bd0: 33 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 3))). (fail '
0be0: 64 6f 74 74 65 64 2d 6c 69 73 74 3a 34 29 29 0a dotted-list:4)).
0bf0: 0a 28 6f 72 20 28 6e 75 6c 6c 2d 6c 69 73 74 3f .(or (null-list?
0c00: 20 27 28 29 29 0a 20 20 20 20 28 66 61 69 6c 20 '()). (fail
0c10: 27 6e 75 6c 6c 2d 6c 69 73 74 3f 3a 31 29 29 0a 'null-list?:1)).
0c20: 28 6f 72 20 28 6e 6f 74 20 28 6e 75 6c 6c 2d 6c (or (not (null-l
0c30: 69 73 74 3f 20 27 28 31 20 32 29 29 29 0a 20 20 ist? '(1 2))).
0c40: 20 20 28 66 61 69 6c 20 27 6e 75 6c 6c 2d 6c 69 (fail 'null-li
0c50: 73 74 3f 3a 32 29 29 0a 28 6f 72 20 28 6e 6f 74 st?:2)).(or (not
0c60: 20 28 6e 75 6c 6c 2d 6c 69 73 74 3f 20 28 63 69 (null-list? (ci
0c70: 72 63 75 6c 61 72 2d 6c 69 73 74 20 31 20 32 29 rcular-list 1 2)
0c80: 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 6e 75 )). (fail 'nu
0c90: 6c 6c 2d 6c 69 73 74 3f 3a 33 29 29 0a 0a 28 6f ll-list?:3))..(o
0ca0: 72 20 28 6e 6f 74 2d 70 61 69 72 3f 20 31 29 0a r (not-pair? 1).
0cb0: 20 20 20 20 28 66 61 69 6c 20 27 6e 6f 74 2d 70 (fail 'not-p
0cc0: 61 69 72 3a 31 29 29 0a 28 6f 72 20 28 6e 6f 74 air:1)).(or (not
0cd0: 20 28 6e 6f 74 2d 70 61 69 72 3f 20 28 63 6f 6e (not-pair? (con
0ce0: 73 20 31 20 32 29 29 29 0a 20 20 20 20 28 66 61 s 1 2))). (fa
0cf0: 69 6c 20 27 6e 6f 74 2d 70 61 69 72 3a 32 29 29 il 'not-pair:2))
0d00: 0a 0a 28 6f 72 20 28 6c 69 73 74 3d 20 3d 20 27 ..(or (list= = '
0d10: 28 31 20 32 20 33 29 20 27 28 31 20 32 20 33 29 (1 2 3) '(1 2 3)
0d20: 20 27 28 31 20 32 20 33 29 29 0a 20 20 20 20 28 '(1 2 3)). (
0d30: 66 61 69 6c 20 27 6c 69 73 74 3d 3a 31 29 29 0a fail 'list=:1)).
0d40: 28 6f 72 20 28 6e 6f 74 20 28 6c 69 73 74 3d 20 (or (not (list=
0d50: 3d 20 27 28 31 20 32 20 33 29 20 27 28 31 20 32 = '(1 2 3) '(1 2
0d60: 20 33 29 20 27 28 31 20 34 20 33 29 29 29 0a 20 3) '(1 4 3))).
0d70: 20 20 20 28 66 61 69 6c 20 27 6c 69 73 74 3d 3a (fail 'list=:
0d80: 32 29 29 0a 3b 20 43 68 65 63 6b 73 20 74 68 61 2)).; Checks tha
0d90: 74 20 6c 30 20 69 73 20 6e 6f 74 20 62 65 69 6e t l0 is not bein
0da0: 67 20 75 73 65 64 20 77 68 65 6e 20 74 65 73 74 g used when test
0db0: 69 6e 67 20 6c 32 2c 20 63 66 20 73 70 65 63 0a ing l2, cf spec.
0dc0: 28 6f 72 20 28 6c 69 73 74 3d 20 28 6c 61 6d 62 (or (list= (lamb
0dd0: 64 61 20 28 61 20 62 29 20 28 6e 6f 74 20 28 65 da (a b) (not (e
0de0: 71 3f 20 61 20 62 29 29 29 20 27 28 23 66 20 23 q? a b))) '(#f #
0df0: 66 20 23 66 29 20 27 28 23 74 20 23 74 20 23 74 f #f) '(#t #t #t
0e00: 29 20 27 28 23 66 20 23 66 20 23 66 29 29 0a 20 ) '(#f #f #f)).
0e10: 20 20 20 28 66 61 69 6c 20 27 6c 69 73 74 3d 3a (fail 'list=:
0e20: 33 29 29 0a 28 6f 72 20 28 6c 69 73 74 3d 20 3d 3)).(or (list= =
0e30: 29 0a 20 20 20 20 28 66 61 69 6c 20 27 6c 69 73 ). (fail 'lis
0e40: 74 3d 3a 34 29 29 0a 0a 28 6f 72 20 28 3d 20 28 t=:4))..(or (= (
0e50: 66 69 72 73 74 20 27 28 31 20 32 20 33 20 34 20 first '(1 2 3 4
0e60: 35 20 36 20 37 20 38 20 39 20 31 30 29 29 20 31 5 6 7 8 9 10)) 1
0e70: 29 20 28 66 61 69 6c 20 27 66 69 72 73 74 29 29 ) (fail 'first))
0e80: 0a 28 6f 72 20 28 3d 20 28 73 65 63 6f 6e 64 20 .(or (= (second
0e90: 27 28 31 20 32 20 33 20 34 20 35 20 36 20 37 20 '(1 2 3 4 5 6 7
0ea0: 38 20 39 20 31 30 29 29 20 32 29 20 28 66 61 69 8 9 10)) 2) (fai
0eb0: 6c 20 27 73 65 63 6f 6e 64 29 29 0a 28 6f 72 20 l 'second)).(or
0ec0: 28 3d 20 28 74 68 69 72 64 20 27 28 31 20 32 20 (= (third '(1 2
0ed0: 33 20 34 20 35 20 36 20 37 20 38 20 39 20 31 30 3 4 5 6 7 8 9 10
0ee0: 29 29 20 33 29 20 28 66 61 69 6c 20 27 74 68 69 )) 3) (fail 'thi
0ef0: 72 64 29 29 0a 28 6f 72 20 28 3d 20 28 66 6f 75 rd)).(or (= (fou
0f00: 72 74 68 20 27 28 31 20 32 20 33 20 34 20 35 20 rth '(1 2 3 4 5
0f10: 36 20 37 20 38 20 39 20 31 30 29 29 20 34 29 20 6 7 8 9 10)) 4)
0f20: 28 66 61 69 6c 20 27 66 6f 75 72 74 68 29 29 0a (fail 'fourth)).
0f30: 28 6f 72 20 28 3d 20 28 66 69 66 74 68 20 27 28 (or (= (fifth '(
0f40: 31 20 32 20 33 20 34 20 35 20 36 20 37 20 38 20 1 2 3 4 5 6 7 8
0f50: 39 20 31 30 29 29 20 35 29 20 28 66 61 69 6c 20 9 10)) 5) (fail
0f60: 27 66 69 66 74 68 29 29 0a 28 6f 72 20 28 3d 20 'fifth)).(or (=
0f70: 28 73 69 78 74 68 20 27 28 31 20 32 20 33 20 34 (sixth '(1 2 3 4
0f80: 20 35 20 36 20 37 20 38 20 39 20 31 30 29 29 20 5 6 7 8 9 10))
0f90: 36 29 20 28 66 61 69 6c 20 27 73 69 78 74 68 29 6) (fail 'sixth)
0fa0: 29 0a 28 6f 72 20 28 3d 20 28 73 65 76 65 6e 74 ).(or (= (sevent
0fb0: 68 20 27 28 31 20 32 20 33 20 34 20 35 20 36 20 h '(1 2 3 4 5 6
0fc0: 37 20 38 20 39 20 31 30 29 29 20 37 29 20 28 66 7 8 9 10)) 7) (f
0fd0: 61 69 6c 20 27 73 65 76 65 6e 74 68 29 29 0a 28 ail 'seventh)).(
0fe0: 6f 72 20 28 3d 20 28 65 69 67 68 74 68 20 27 28 or (= (eighth '(
0ff0: 31 20 32 20 33 20 34 20 35 20 36 20 37 20 38 20 1 2 3 4 5 6 7 8
1000: 39 20 31 30 29 29 20 38 29 20 28 66 61 69 6c 20 9 10)) 8) (fail
1010: 27 65 69 67 68 74 68 29 29 0a 28 6f 72 20 28 3d 'eighth)).(or (=
1020: 20 28 6e 69 6e 74 68 20 27 28 31 20 32 20 33 20 (ninth '(1 2 3
1030: 34 20 35 20 36 20 37 20 38 20 39 20 31 30 29 29 4 5 6 7 8 9 10))
1040: 20 39 29 20 28 66 61 69 6c 20 27 6e 69 6e 74 68 9) (fail 'ninth
1050: 29 29 0a 28 6f 72 20 28 3d 20 28 74 65 6e 74 68 )).(or (= (tenth
1060: 20 27 28 31 20 32 20 33 20 34 20 35 20 36 20 37 '(1 2 3 4 5 6 7
1070: 20 38 20 39 20 31 30 29 29 20 31 30 29 20 28 66 8 9 10)) 10) (f
1080: 61 69 6c 20 27 74 65 6e 74 68 29 29 0a 0a 28 6c ail 'tenth))..(l
1090: 65 74 2d 76 61 6c 75 65 73 20 28 28 28 61 20 62 et-values (((a b
10a0: 29 20 28 63 61 72 2b 63 64 72 20 27 28 31 20 2e ) (car+cdr '(1 .
10b0: 20 32 29 29 29 29 0a 20 20 28 6f 72 20 28 61 6e 2)))). (or (an
10c0: 64 20 28 3d 20 61 20 31 29 20 28 3d 20 62 20 32 d (= a 1) (= b 2
10d0: 29 29 0a 20 20 20 20 20 20 28 66 61 69 6c 20 27 )). (fail '
10e0: 63 61 72 2b 63 64 72 3a 31 29 29 29 0a 0a 28 6f car+cdr:1)))..(o
10f0: 72 20 28 65 71 75 61 6c 3f 20 27 28 31 20 32 20 r (equal? '(1 2
1100: 33 29 20 28 74 61 6b 65 20 27 28 31 20 32 20 33 3) (take '(1 2 3
1110: 20 34 20 35 20 36 29 20 33 29 29 0a 20 20 20 20 4 5 6) 3)).
1120: 28 66 61 69 6c 20 27 74 61 6b 65 3a 31 29 29 0a (fail 'take:1)).
1130: 28 6f 72 20 28 65 71 75 61 6c 3f 20 27 28 31 29 (or (equal? '(1)
1140: 20 28 74 61 6b 65 20 27 28 31 29 20 31 29 29 0a (take '(1) 1)).
1150: 20 20 20 20 28 66 61 69 6c 20 27 74 61 6b 65 3a (fail 'take:
1160: 32 29 29 0a 0a 28 6f 72 20 28 6c 65 74 20 28 28 2))..(or (let ((
1170: 78 20 28 6c 69 73 74 20 31 20 32 20 33 20 34 20 x (list 1 2 3 4
1180: 35 20 36 29 29 29 0a 20 20 20 20 20 20 28 65 71 5 6))). (eq
1190: 3f 20 28 63 64 64 64 72 20 78 29 20 28 64 72 6f ? (cdddr x) (dro
11a0: 70 20 78 20 33 29 29 29 0a 20 20 20 20 28 66 61 p x 3))). (fa
11b0: 69 6c 20 27 64 72 6f 70 3a 31 29 29 0a 28 6f 72 il 'drop:1)).(or
11c0: 20 28 6c 65 74 20 28 28 78 20 28 6c 69 73 74 20 (let ((x (list
11d0: 31 20 32 20 33 29 29 29 0a 20 20 20 20 20 20 28 1 2 3))). (
11e0: 65 71 3f 20 78 20 28 64 72 6f 70 20 78 20 30 29 eq? x (drop x 0)
11f0: 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 64 72 )). (fail 'dr
1200: 6f 70 3a 32 29 29 0a 0a 28 6f 72 20 28 65 71 75 op:2))..(or (equ
1210: 61 6c 3f 20 27 28 34 20 35 20 36 29 20 28 74 61 al? '(4 5 6) (ta
1220: 6b 65 2d 72 69 67 68 74 20 27 28 31 20 32 20 33 ke-right '(1 2 3
1230: 20 34 20 35 20 36 29 20 33 29 29 0a 20 20 20 20 4 5 6) 3)).
1240: 28 66 61 69 6c 20 27 74 61 6b 65 2d 72 69 67 68 (fail 'take-righ
1250: 74 3a 31 29 29 0a 28 6f 72 20 28 6e 75 6c 6c 3f t:1)).(or (null?
1260: 20 28 74 61 6b 65 2d 72 69 67 68 74 20 27 28 31 (take-right '(1
1270: 20 32 20 33 20 34 20 35 20 36 29 20 30 29 29 0a 2 3 4 5 6) 0)).
1280: 20 20 20 20 28 66 61 69 6c 20 27 74 61 6b 65 2d (fail 'take-
1290: 72 69 67 68 74 3a 32 29 29 0a 28 6f 72 20 28 65 right:2)).(or (e
12a0: 71 75 61 6c 3f 20 27 28 32 20 33 20 2e 20 34 29 qual? '(2 3 . 4)
12b0: 20 28 74 61 6b 65 2d 72 69 67 68 74 20 27 28 31 (take-right '(1
12c0: 20 32 20 33 20 2e 20 34 29 20 32 29 29 0a 20 20 2 3 . 4) 2)).
12d0: 20 20 28 66 61 69 6c 20 27 74 61 6b 65 2d 72 69 (fail 'take-ri
12e0: 67 68 74 3a 33 29 29 0a 28 6f 72 20 28 65 71 75 ght:3)).(or (equ
12f0: 61 6c 3f 20 34 20 28 74 61 6b 65 2d 72 69 67 68 al? 4 (take-righ
1300: 74 20 27 28 31 20 32 20 33 20 2e 20 34 29 20 30 t '(1 2 3 . 4) 0
1310: 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 74 61 )). (fail 'ta
1320: 6b 65 2d 72 69 67 68 74 3a 34 29 29 0a 0a 28 6f ke-right:4))..(o
1330: 72 20 28 65 71 75 61 6c 3f 20 27 28 31 20 32 20 r (equal? '(1 2
1340: 33 29 20 28 64 72 6f 70 2d 72 69 67 68 74 20 27 3) (drop-right '
1350: 28 31 20 32 20 33 20 34 20 35 20 36 29 20 33 29 (1 2 3 4 5 6) 3)
1360: 29 0a 20 20 20 20 28 66 61 69 6c 20 27 64 72 6f ). (fail 'dro
1370: 70 2d 72 69 67 68 74 3a 31 29 29 0a 28 6f 72 20 p-right:1)).(or
1380: 28 65 71 75 61 6c 3f 20 27 28 31 20 32 20 33 29 (equal? '(1 2 3)
1390: 20 28 64 72 6f 70 2d 72 69 67 68 74 20 27 28 31 (drop-right '(1
13a0: 20 32 20 33 29 20 30 29 29 0a 20 20 20 20 28 66 2 3) 0)). (f
13b0: 61 69 6c 20 27 64 72 6f 70 2d 72 69 67 68 74 3a ail 'drop-right:
13c0: 32 29 29 0a 28 6f 72 20 28 65 71 75 61 6c 3f 20 2)).(or (equal?
13d0: 27 28 31 20 32 20 33 29 20 28 64 72 6f 70 2d 72 '(1 2 3) (drop-r
13e0: 69 67 68 74 20 27 28 31 20 32 20 33 20 2e 20 34 ight '(1 2 3 . 4
13f0: 29 20 30 29 29 0a 20 20 20 20 28 66 61 69 6c 20 ) 0)). (fail
1400: 27 64 72 6f 70 2d 72 69 67 68 74 3a 33 29 29 0a 'drop-right:3)).
1410: 0a 28 6f 72 20 28 6c 65 74 20 28 28 78 20 28 6c .(or (let ((x (l
1420: 69 73 74 20 31 20 32 20 33 20 34 20 35 20 36 29 ist 1 2 3 4 5 6)
1430: 29 29 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 )). (let ((
1440: 79 20 28 74 61 6b 65 21 20 78 20 33 29 29 29 0a y (take! x 3))).
1450: 09 28 61 6e 64 20 28 65 71 3f 20 78 20 79 29 0a .(and (eq? x y).
1460: 09 20 20 20 20 20 28 65 71 3f 20 28 63 64 72 20 . (eq? (cdr
1470: 78 29 20 28 63 64 72 20 79 29 29 0a 09 20 20 20 x) (cdr y))..
1480: 20 20 28 65 71 3f 20 28 63 64 64 72 20 78 29 20 (eq? (cddr x)
1490: 28 63 64 64 72 20 79 29 29 0a 09 20 20 20 20 20 (cddr y))..
14a0: 28 65 71 75 61 6c 3f 20 79 20 27 28 31 20 32 20 (equal? y '(1 2
14b0: 33 29 29 29 29 29 0a 20 20 20 20 28 66 61 69 6c 3))))). (fail
14c0: 20 27 74 61 6b 65 21 3a 31 29 29 0a 0a 28 6f 72 'take!:1))..(or
14d0: 20 28 6c 65 74 20 28 28 78 20 28 6c 69 73 74 20 (let ((x (list
14e0: 31 20 32 20 33 20 34 20 35 20 36 29 29 29 0a 20 1 2 3 4 5 6))).
14f0: 20 20 20 20 20 28 6c 65 74 20 28 28 79 20 28 64 (let ((y (d
1500: 72 6f 70 2d 72 69 67 68 74 21 20 78 20 33 29 29 rop-right! x 3))
1510: 29 0a 09 28 61 6e 64 20 28 65 71 3f 20 78 20 79 )..(and (eq? x y
1520: 29 0a 09 20 20 20 20 20 28 65 71 3f 20 28 63 64 ).. (eq? (cd
1530: 72 20 78 29 20 28 63 64 72 20 79 29 29 0a 09 20 r x) (cdr y))..
1540: 20 20 20 20 28 65 71 3f 20 28 63 64 64 72 20 78 (eq? (cddr x
1550: 29 20 28 63 64 64 72 20 79 29 29 0a 09 20 20 20 ) (cddr y))..
1560: 20 20 28 65 71 75 61 6c 3f 20 79 20 27 28 31 20 (equal? y '(1
1570: 32 20 33 29 29 29 29 29 0a 20 20 20 20 28 66 61 2 3))))). (fa
1580: 69 6c 20 27 64 72 6f 70 2d 72 69 67 68 74 21 3a il 'drop-right!:
1590: 31 29 29 0a 0a 28 6f 72 20 28 6c 65 74 2d 76 61 1))..(or (let-va
15a0: 6c 75 65 73 20 28 28 28 61 20 62 29 20 28 73 70 lues (((a b) (sp
15b0: 6c 69 74 2d 61 74 20 27 28 31 20 32 20 33 20 34 lit-at '(1 2 3 4
15c0: 20 35 20 36 29 20 32 29 29 29 0a 20 20 20 20 20 5 6) 2))).
15d0: 20 28 61 6e 64 20 28 65 71 75 61 6c 3f 20 61 20 (and (equal? a
15e0: 27 28 31 20 32 29 29 0a 09 20 20 20 28 65 71 75 '(1 2)).. (equ
15f0: 61 6c 3f 20 62 20 27 28 33 20 34 20 35 20 36 29 al? b '(3 4 5 6)
1600: 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 73 ))). (fail 's
1610: 70 6c 69 74 2d 61 74 3a 31 29 29 0a 0a 28 6f 72 plit-at:1))..(or
1620: 20 28 6c 65 74 2a 20 28 28 78 20 28 6c 69 73 74 (let* ((x (list
1630: 20 31 20 32 20 33 20 34 20 35 20 36 29 29 0a 09 1 2 3 4 5 6))..
1640: 20 20 20 28 79 20 28 63 64 64 72 20 78 29 29 29 (y (cddr x)))
1650: 0a 20 20 20 20 20 20 28 6c 65 74 2d 76 61 6c 75 . (let-valu
1660: 65 73 20 28 28 28 61 20 62 29 20 28 73 70 6c 69 es (((a b) (spli
1670: 74 2d 61 74 21 20 78 20 32 29 29 29 0a 20 20 20 t-at! x 2))).
1680: 20 20 20 20 20 28 61 6e 64 20 28 65 71 75 61 6c (and (equal
1690: 3f 20 61 20 27 28 31 20 32 29 29 0a 09 20 20 20 ? a '(1 2))..
16a0: 20 20 28 65 71 3f 20 61 20 78 29 0a 09 20 20 20 (eq? a x)..
16b0: 20 20 28 65 71 75 61 6c 3f 20 62 20 27 28 33 20 (equal? b '(3
16c0: 34 20 35 20 36 29 29 0a 09 20 20 20 20 20 28 65 4 5 6)).. (e
16d0: 71 3f 20 62 20 79 29 29 29 29 0a 20 20 20 20 28 q? b y)))). (
16e0: 66 61 69 6c 20 27 73 70 6c 69 74 2d 61 74 21 3a fail 'split-at!:
16f0: 31 29 29 0a 0a 28 6f 72 20 28 65 71 76 3f 20 33 1))..(or (eqv? 3
1700: 37 20 28 6c 61 73 74 20 27 28 31 20 32 20 33 20 7 (last '(1 2 3
1710: 33 37 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 37))). (fail
1720: 27 6c 61 73 74 3a 31 29 29 0a 0a 28 6f 72 20 28 'last:1))..(or (
1730: 6e 6f 74 20 28 6c 65 6e 67 74 68 2b 20 28 63 69 not (length+ (ci
1740: 72 63 75 6c 61 72 2d 6c 69 73 74 20 31 20 32 20 rcular-list 1 2
1750: 33 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 3))). (fail '
1760: 6c 65 6e 67 74 68 2b 3a 31 29 29 0a 28 6f 72 20 length+:1)).(or
1770: 28 65 71 75 61 6c 3f 20 34 20 28 6c 65 6e 67 74 (equal? 4 (lengt
1780: 68 2b 20 27 28 31 20 32 20 33 20 34 29 29 29 0a h+ '(1 2 3 4))).
1790: 20 20 20 20 28 66 61 69 6c 20 27 6c 65 6e 67 74 (fail 'lengt
17a0: 68 2b 3a 32 29 29 0a 0a 28 6f 72 20 28 6c 65 74 h+:2))..(or (let
17b0: 20 28 28 78 20 28 6c 69 73 74 20 31 20 32 29 29 ((x (list 1 2))
17c0: 0a 09 20 20 28 79 20 28 6c 69 73 74 20 33 20 34 .. (y (list 3 4
17d0: 29 29 0a 09 20 20 28 7a 20 28 6c 69 73 74 20 35 )).. (z (list 5
17e0: 20 36 29 29 29 0a 20 20 20 20 20 20 28 6c 65 74 6))). (let
17f0: 20 28 28 72 20 28 61 70 70 65 6e 64 21 20 78 20 ((r (append! x
1800: 79 20 27 28 29 20 7a 29 29 29 0a 09 28 61 6e 64 y '() z)))..(and
1810: 20 28 65 71 75 61 6c 3f 20 72 20 27 28 31 20 32 (equal? r '(1 2
1820: 20 33 20 34 20 35 20 36 29 29 0a 09 20 20 20 20 3 4 5 6))..
1830: 20 28 65 71 3f 20 72 20 78 29 0a 09 20 20 20 20 (eq? r x)..
1840: 20 28 65 71 3f 20 28 63 64 72 20 72 29 20 28 63 (eq? (cdr r) (c
1850: 64 72 20 78 29 29 0a 09 20 20 20 20 20 28 65 71 dr x)).. (eq
1860: 3f 20 28 63 64 64 72 20 72 29 20 79 29 0a 09 20 ? (cddr r) y)..
1870: 20 20 20 20 28 65 71 3f 20 28 63 64 64 64 72 20 (eq? (cdddr
1880: 72 29 20 28 63 64 72 20 79 29 29 0a 09 20 20 20 r) (cdr y))..
1890: 20 20 28 65 71 3f 20 28 63 64 64 64 64 72 20 72 (eq? (cddddr r
18a0: 29 20 7a 29 0a 09 20 20 20 20 20 28 65 71 3f 20 ) z).. (eq?
18b0: 28 63 64 72 20 28 63 64 64 64 64 72 20 72 29 29 (cdr (cddddr r))
18c0: 20 28 63 64 72 20 7a 29 29 29 29 29 0a 20 20 20 (cdr z))))).
18d0: 20 28 66 61 69 6c 20 27 61 70 70 65 6e 64 21 3a (fail 'append!:
18e0: 31 29 29 0a 0a 28 6f 72 20 28 65 71 75 61 6c 3f 1))..(or (equal?
18f0: 20 28 63 6f 6e 63 61 74 65 6e 61 74 65 20 27 28 (concatenate '(
1900: 28 31 20 32 20 33 29 20 28 34 20 35 20 36 29 20 (1 2 3) (4 5 6)
1910: 28 29 20 28 37 20 38 20 39 29 29 29 20 27 28 31 () (7 8 9))) '(1
1920: 20 32 20 33 20 34 20 35 20 36 20 37 20 38 20 39 2 3 4 5 6 7 8 9
1930: 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 63 6f )). (fail 'co
1940: 6e 63 61 74 65 6e 61 74 65 3a 31 29 29 0a 0a 28 ncatenate:1))..(
1950: 6f 72 20 28 65 71 75 61 6c 3f 20 28 63 6f 6e 63 or (equal? (conc
1960: 61 74 65 6e 61 74 65 21 20 60 28 2c 28 6c 69 73 atenate! `(,(lis
1970: 74 20 31 20 32 20 33 29 20 2c 28 6c 69 73 74 20 t 1 2 3) ,(list
1980: 34 20 35 20 36 29 20 28 29 20 2c 28 6c 69 73 74 4 5 6) () ,(list
1990: 20 37 20 38 20 39 29 29 29 0a 09 20 20 20 20 27 7 8 9))).. '
19a0: 28 31 20 32 20 33 20 34 20 35 20 36 20 37 20 38 (1 2 3 4 5 6 7 8
19b0: 20 39 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 9)). (fail '
19c0: 63 6f 6e 63 61 74 65 6e 61 74 65 21 3a 31 29 29 concatenate!:1))
19d0: 0a 0a 28 6f 72 20 28 65 71 75 61 6c 3f 20 28 61 ..(or (equal? (a
19e0: 70 70 65 6e 64 2d 72 65 76 65 72 73 65 20 27 28 ppend-reverse '(
19f0: 33 20 32 20 31 29 20 27 28 34 20 35 20 36 29 29 3 2 1) '(4 5 6))
1a00: 20 27 28 31 20 32 20 33 20 34 20 35 20 36 29 29 '(1 2 3 4 5 6))
1a10: 0a 20 20 20 20 28 66 61 69 6c 20 27 61 70 70 65 . (fail 'appe
1a20: 6e 64 2d 72 65 76 65 72 73 65 3a 31 29 29 0a 0a nd-reverse:1))..
1a30: 28 6f 72 20 28 65 71 75 61 6c 3f 20 28 61 70 70 (or (equal? (app
1a40: 65 6e 64 2d 72 65 76 65 72 73 65 21 20 28 6c 69 end-reverse! (li
1a50: 73 74 20 33 20 32 20 31 29 20 28 6c 69 73 74 20 st 3 2 1) (list
1a60: 34 20 35 20 36 29 29 20 27 28 31 20 32 20 33 20 4 5 6)) '(1 2 3
1a70: 34 20 35 20 36 29 29 0a 20 20 20 20 28 66 61 69 4 5 6)). (fai
1a80: 6c 20 27 61 70 70 65 6e 64 2d 72 65 76 65 72 73 l 'append-revers
1a90: 65 21 3a 31 29 29 0a 0a 28 6f 72 20 28 65 71 75 e!:1))..(or (equ
1aa0: 61 6c 3f 20 28 7a 69 70 20 27 28 31 20 32 20 33 al? (zip '(1 2 3
1ab0: 29 20 27 28 34 20 35 20 36 29 29 20 27 28 28 31 ) '(4 5 6)) '((1
1ac0: 20 34 29 20 28 32 20 35 29 20 28 33 20 36 29 29 4) (2 5) (3 6))
1ad0: 29 0a 20 20 20 20 28 66 61 69 6c 20 27 7a 69 70 ). (fail 'zip
1ae0: 3a 31 29 29 0a 28 6f 72 20 28 65 71 75 61 6c 3f :1)).(or (equal?
1af0: 20 28 7a 69 70 20 27 28 29 20 27 28 29 20 27 28 (zip '() '() '(
1b00: 29 20 27 28 29 29 20 27 28 29 29 0a 20 20 20 20 ) '()) '()).
1b10: 28 66 61 69 6c 20 27 7a 69 70 3a 32 29 29 0a 28 (fail 'zip:2)).(
1b20: 6f 72 20 28 65 71 75 61 6c 3f 20 28 7a 69 70 20 or (equal? (zip
1b30: 27 28 31 29 20 28 63 69 72 63 75 6c 61 72 2d 6c '(1) (circular-l
1b40: 69 73 74 20 31 20 32 29 29 20 27 28 28 31 20 31 ist 1 2)) '((1 1
1b50: 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 7a ))). (fail 'z
1b60: 69 70 3a 33 29 29 0a 0a 28 6f 72 20 28 65 71 75 ip:3))..(or (equ
1b70: 61 6c 3f 20 27 28 31 20 32 20 33 20 34 20 35 29 al? '(1 2 3 4 5)
1b80: 20 28 75 6e 7a 69 70 31 20 27 28 28 31 29 20 28 (unzip1 '((1) (
1b90: 32 29 20 28 33 29 20 28 34 29 20 28 35 29 29 29 2) (3) (4) (5)))
1ba0: 29 0a 20 20 20 20 28 66 61 69 6c 20 27 75 6e 7a ). (fail 'unz
1bb0: 69 70 31 3a 31 29 29 0a 0a 28 6f 72 20 28 6c 65 ip1:1))..(or (le
1bc0: 74 2d 76 61 6c 75 65 73 20 28 28 28 61 20 62 29 t-values (((a b)
1bd0: 20 28 75 6e 7a 69 70 32 20 27 28 28 31 30 20 31 (unzip2 '((10 1
1be0: 31 29 20 28 32 30 20 32 31 29 20 28 33 30 20 33 1) (20 21) (30 3
1bf0: 31 29 29 29 29 29 0a 20 20 20 20 20 20 28 61 6e 1))))). (an
1c00: 64 20 28 65 71 75 61 6c 3f 20 61 20 27 28 31 30 d (equal? a '(10
1c10: 20 32 30 20 33 30 29 29 0a 09 20 20 20 28 65 71 20 30)).. (eq
1c20: 75 61 6c 3f 20 62 20 27 28 31 31 20 32 31 20 33 ual? b '(11 21 3
1c30: 31 29 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 1)))). (fail
1c40: 27 75 6e 7a 69 70 32 3a 31 29 29 0a 0a 28 6f 72 'unzip2:1))..(or
1c50: 20 28 6c 65 74 2d 76 61 6c 75 65 73 20 28 28 28 (let-values (((
1c60: 61 20 62 20 63 29 20 28 75 6e 7a 69 70 33 20 27 a b c) (unzip3 '
1c70: 28 28 31 30 20 31 31 20 31 32 29 20 28 32 30 20 ((10 11 12) (20
1c80: 32 31 20 32 32 29 20 28 33 30 20 33 31 20 33 32 21 22) (30 31 32
1c90: 29 29 29 29 29 0a 20 20 20 20 20 20 28 61 6e 64 ))))). (and
1ca0: 20 28 65 71 75 61 6c 3f 20 61 20 27 28 31 30 20 (equal? a '(10
1cb0: 32 30 20 33 30 29 29 0a 09 20 20 20 28 65 71 75 20 30)).. (equ
1cc0: 61 6c 3f 20 62 20 27 28 31 31 20 32 31 20 33 31 al? b '(11 21 31
1cd0: 29 29 0a 09 20 20 20 28 65 71 75 61 6c 3f 20 63 )).. (equal? c
1ce0: 20 27 28 31 32 20 32 32 20 33 32 29 29 29 29 0a '(12 22 32)))).
1cf0: 20 20 20 20 28 66 61 69 6c 20 27 75 6e 7a 69 70 (fail 'unzip
1d00: 33 3a 31 29 29 0a 0a 28 6f 72 20 28 6c 65 74 2d 3:1))..(or (let-
1d10: 76 61 6c 75 65 73 20 28 28 28 61 20 62 20 63 20 values (((a b c
1d20: 64 29 20 28 75 6e 7a 69 70 34 20 27 28 28 31 30 d) (unzip4 '((10
1d30: 20 31 31 20 31 32 20 31 33 29 0a 09 09 09 09 20 11 12 13).....
1d40: 20 20 20 20 20 28 32 30 20 32 31 20 32 32 20 32 (20 21 22 2
1d50: 33 29 0a 09 09 09 09 20 20 20 20 20 20 28 33 30 3)..... (30
1d60: 20 33 31 20 33 32 20 33 33 29 29 29 29 29 0a 20 31 32 33))))).
1d70: 20 20 20 20 20 28 61 6e 64 20 28 65 71 75 61 6c (and (equal
1d80: 3f 20 61 20 27 28 31 30 20 32 30 20 33 30 29 29 ? a '(10 20 30))
1d90: 0a 09 20 20 20 28 65 71 75 61 6c 3f 20 62 20 27 .. (equal? b '
1da0: 28 31 31 20 32 31 20 33 31 29 29 0a 09 20 20 20 (11 21 31))..
1db0: 28 65 71 75 61 6c 3f 20 63 20 27 28 31 32 20 32 (equal? c '(12 2
1dc0: 32 20 33 32 29 29 0a 09 20 20 20 28 65 71 75 61 2 32)).. (equa
1dd0: 6c 3f 20 64 20 27 28 31 33 20 32 33 20 33 33 29 l? d '(13 23 33)
1de0: 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 75 ))). (fail 'u
1df0: 6e 7a 69 70 34 3a 31 29 29 0a 0a 28 6f 72 20 28 nzip4:1))..(or (
1e00: 6c 65 74 2d 76 61 6c 75 65 73 20 28 28 28 61 20 let-values (((a
1e10: 62 20 63 20 64 20 65 29 20 28 75 6e 7a 69 70 35 b c d e) (unzip5
1e20: 20 27 28 28 31 30 20 31 31 20 31 32 20 31 33 20 '((10 11 12 13
1e30: 31 34 29 0a 09 09 09 09 09 28 32 30 20 32 31 20 14)......(20 21
1e40: 32 32 20 32 33 20 32 34 29 0a 09 09 09 09 09 28 22 23 24)......(
1e50: 33 30 20 33 31 20 33 32 20 33 33 20 33 34 29 29 30 31 32 33 34))
1e60: 29 29 29 0a 20 20 20 20 20 20 28 61 6e 64 20 28 ))). (and (
1e70: 65 71 75 61 6c 3f 20 61 20 27 28 31 30 20 32 30 equal? a '(10 20
1e80: 20 33 30 29 29 0a 09 20 20 20 28 65 71 75 61 6c 30)).. (equal
1e90: 3f 20 62 20 27 28 31 31 20 32 31 20 33 31 29 29 ? b '(11 21 31))
1ea0: 0a 09 20 20 20 28 65 71 75 61 6c 3f 20 63 20 27 .. (equal? c '
1eb0: 28 31 32 20 32 32 20 33 32 29 29 0a 09 20 20 20 (12 22 32))..
1ec0: 28 65 71 75 61 6c 3f 20 64 20 27 28 31 33 20 32 (equal? d '(13 2
1ed0: 33 20 33 33 29 29 0a 09 20 20 20 28 65 71 75 61 3 33)).. (equa
1ee0: 6c 3f 20 65 20 27 28 31 34 20 32 34 20 33 34 29 l? e '(14 24 34)
1ef0: 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 75 ))). (fail 'u
1f00: 6e 7a 69 70 35 3a 31 29 29 0a 0a 28 6f 72 20 28 nzip5:1))..(or (
1f10: 65 71 75 61 6c 3f 20 33 20 28 63 6f 75 6e 74 20 equal? 3 (count
1f20: 65 76 65 6e 3f 20 27 28 33 20 31 20 34 20 31 20 even? '(3 1 4 1
1f30: 35 20 39 20 32 20 35 20 36 29 29 29 0a 20 20 20 5 9 2 5 6))).
1f40: 20 28 66 61 69 6c 20 27 63 6f 75 6e 74 3a 31 29 (fail 'count:1)
1f50: 29 0a 28 6f 72 20 28 65 71 75 61 6c 3f 20 33 20 ).(or (equal? 3
1f60: 28 63 6f 75 6e 74 20 3c 20 27 28 31 20 32 20 34 (count < '(1 2 4
1f70: 20 38 29 20 27 28 32 20 34 20 36 20 38 20 31 30 8) '(2 4 6 8 10
1f80: 20 31 32 20 31 34 20 31 36 29 29 29 0a 20 20 20 12 14 16))).
1f90: 20 28 66 61 69 6c 20 27 63 6f 75 6e 74 3a 32 29 (fail 'count:2)
1fa0: 29 0a 28 6f 72 20 28 65 71 75 61 6c 3f 20 32 20 ).(or (equal? 2
1fb0: 28 63 6f 75 6e 74 20 3c 20 27 28 33 20 31 20 34 (count < '(3 1 4
1fc0: 20 31 29 20 28 63 69 72 63 75 6c 61 72 2d 6c 69 1) (circular-li
1fd0: 73 74 20 31 20 31 30 29 29 29 0a 20 20 20 20 28 st 1 10))). (
1fe0: 66 61 69 6c 20 27 63 6f 75 6e 74 3a 33 29 29 0a fail 'count:3)).
1ff0: 0a 28 6f 72 20 28 65 71 75 61 6c 3f 20 27 28 63 .(or (equal? '(c
2000: 20 33 20 62 20 32 20 61 20 31 29 20 28 66 6f 6c 3 b 2 a 1) (fol
2010: 64 20 63 6f 6e 73 2a 20 27 28 29 20 27 28 61 20 d cons* '() '(a
2020: 62 20 63 29 20 27 28 31 20 32 20 33 20 34 20 35 b c) '(1 2 3 4 5
2030: 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 66 ))). (fail 'f
2040: 6f 6c 64 3a 31 29 29 0a 0a 28 6f 72 20 28 65 71 old:1))..(or (eq
2050: 75 61 6c 3f 20 27 28 61 20 31 20 62 20 32 20 63 ual? '(a 1 b 2 c
2060: 20 33 29 20 28 66 6f 6c 64 2d 72 69 67 68 74 20 3) (fold-right
2070: 63 6f 6e 73 2a 20 27 28 29 20 27 28 61 20 62 20 cons* '() '(a b
2080: 63 29 20 27 28 31 20 32 20 33 20 34 20 35 29 29 c) '(1 2 3 4 5))
2090: 29 0a 20 20 20 20 28 66 61 69 6c 20 27 66 6f 6c ). (fail 'fol
20a0: 64 2d 72 69 67 68 74 3a 31 29 29 0a 0a 28 6f 72 d-right:1))..(or
20b0: 20 28 6c 65 74 2a 20 28 28 78 20 28 6c 69 73 74 (let* ((x (list
20c0: 20 31 20 32 20 33 29 29 0a 09 20 20 20 28 72 20 1 2 3)).. (r
20d0: 28 6c 69 73 74 20 78 20 28 63 64 72 20 78 29 20 (list x (cdr x)
20e0: 28 63 64 64 72 20 78 29 29 29 0a 09 20 20 20 28 (cddr x))).. (
20f0: 79 20 28 70 61 69 72 2d 66 6f 6c 64 20 28 6c 61 y (pair-fold (la
2100: 6d 62 64 61 20 28 70 61 69 72 20 74 61 69 6c 29 mbda (pair tail)
2110: 20 0a 09 09 09 20 20 20 28 73 65 74 2d 63 64 72 .... (set-cdr
2120: 21 20 70 61 69 72 20 74 61 69 6c 29 20 70 61 69 ! pair tail) pai
2130: 72 29 20 0a 09 09 09 20 27 28 29 0a 09 09 09 20 r) .... '()....
2140: 78 29 29 29 0a 20 20 20 20 20 20 28 61 6e 64 20 x))). (and
2150: 28 65 71 75 61 6c 3f 20 79 20 27 28 33 20 32 20 (equal? y '(3 2
2160: 31 29 29 0a 09 20 20 20 28 65 76 65 72 79 20 28 1)).. (every (
2170: 6c 61 6d 62 64 61 20 28 63 29 20 28 6d 65 6d 71 lambda (c) (memq
2180: 20 63 20 72 29 29 20 28 6c 69 73 74 20 79 20 28 c r)) (list y (
2190: 63 64 72 20 79 29 20 28 63 64 64 72 20 79 29 29 cdr y) (cddr y))
21a0: 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 70 ))). (fail 'p
21b0: 61 69 72 2d 66 6f 6c 64 3a 31 29 29 0a 0a 28 6f air-fold:1))..(o
21c0: 72 20 28 65 71 75 61 6c 3f 20 27 28 28 61 20 62 r (equal? '((a b
21d0: 20 63 29 20 28 62 20 63 29 20 28 63 29 29 20 28 c) (b c) (c)) (
21e0: 70 61 69 72 2d 66 6f 6c 64 2d 72 69 67 68 74 20 pair-fold-right
21f0: 63 6f 6e 73 20 27 28 29 20 27 28 61 20 62 20 63 cons '() '(a b c
2200: 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 70 ))). (fail 'p
2210: 61 69 72 2d 66 6f 6c 64 2d 72 69 67 68 74 3a 31 air-fold-right:1
2220: 29 29 0a 0a 28 6f 72 20 28 65 71 75 61 6c 3f 20 ))..(or (equal?
2230: 35 20 28 72 65 64 75 63 65 20 6d 61 78 20 27 69 5 (reduce max 'i
2240: 6c 6c 65 67 61 6c 20 27 28 31 20 32 20 33 20 34 llegal '(1 2 3 4
2250: 20 35 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 5))). (fail
2260: 27 72 65 64 75 63 65 3a 31 29 29 0a 28 6f 72 20 'reduce:1)).(or
2270: 28 65 71 75 61 6c 3f 20 30 20 28 72 65 64 75 63 (equal? 0 (reduc
2280: 65 20 6d 61 78 20 30 20 27 28 29 29 29 0a 20 20 e max 0 '())).
2290: 20 20 28 66 61 69 6c 20 27 72 65 64 75 63 65 3a (fail 'reduce:
22a0: 32 29 29 0a 0a 28 6f 72 20 28 65 71 75 61 6c 3f 2))..(or (equal?
22b0: 20 27 28 31 20 32 20 33 20 34 20 35 29 20 28 72 '(1 2 3 4 5) (r
22c0: 65 64 75 63 65 2d 72 69 67 68 74 20 61 70 70 65 educe-right appe
22d0: 6e 64 20 27 69 6c 6c 65 67 61 6c 20 27 28 28 31 nd 'illegal '((1
22e0: 20 32 29 20 28 29 20 28 33 20 34 20 35 29 29 29 2) () (3 4 5)))
22f0: 29 0a 20 20 20 20 28 66 61 69 6c 20 27 72 65 64 ). (fail 'red
2300: 75 63 65 2d 72 69 67 68 74 3a 31 29 29 0a 0a 28 uce-right:1))..(
2310: 6f 72 20 28 65 71 75 61 6c 3f 20 27 28 31 20 34 or (equal? '(1 4
2320: 20 39 20 31 36 20 32 35 20 33 36 20 34 39 20 36 9 16 25 36 49 6
2330: 34 20 38 31 20 31 30 30 29 0a 09 20 20 20 20 28 4 81 100).. (
2340: 75 6e 66 6f 6c 64 20 28 6c 61 6d 62 64 61 20 28 unfold (lambda (
2350: 78 29 20 28 3e 20 78 20 31 30 29 29 0a 09 09 20 x) (> x 10))...
2360: 20 20 20 28 6c 61 6d 62 64 61 20 28 78 29 20 28 (lambda (x) (
2370: 2a 20 78 20 78 29 29 0a 09 09 20 20 20 20 28 6c * x x))... (l
2380: 61 6d 62 64 61 20 28 78 29 20 28 2b 20 78 20 31 ambda (x) (+ x 1
2390: 29 29 0a 09 09 20 20 20 20 31 29 29 0a 20 20 20 ))... 1)).
23a0: 20 28 66 61 69 6c 20 27 75 6e 66 6f 6c 64 3a 31 (fail 'unfold:1
23b0: 29 29 0a 0a 28 6f 72 20 28 65 71 75 61 6c 3f 20 ))..(or (equal?
23c0: 27 28 31 20 34 20 39 20 31 36 20 32 35 20 33 36 '(1 4 9 16 25 36
23d0: 20 34 39 20 36 34 20 38 31 20 31 30 30 29 0a 09 49 64 81 100)..
23e0: 20 20 20 20 28 75 6e 66 6f 6c 64 2d 72 69 67 68 (unfold-righ
23f0: 74 20 7a 65 72 6f 3f 20 0a 09 09 09 20 20 28 6c t zero? .... (l
2400: 61 6d 62 64 61 20 28 78 29 20 28 2a 20 78 20 78 ambda (x) (* x x
2410: 29 29 0a 09 09 09 20 20 28 6c 61 6d 62 64 61 20 )).... (lambda
2420: 28 78 29 20 28 2d 20 78 20 31 29 29 0a 09 09 09 (x) (- x 1))....
2430: 20 20 31 30 29 29 0a 20 20 20 20 28 66 61 69 6c 10)). (fail
2440: 20 27 75 6e 66 6f 6c 64 2d 72 69 67 68 74 3a 31 'unfold-right:1
2450: 29 29 0a 0a 28 6f 72 20 28 65 71 75 61 6c 3f 20 ))..(or (equal?
2460: 27 28 34 20 31 20 35 20 31 29 0a 09 20 20 20 20 '(4 1 5 1)..
2470: 28 6d 61 70 20 2b 20 27 28 33 20 31 20 34 20 31 (map + '(3 1 4 1
2480: 29 20 28 63 69 72 63 75 6c 61 72 2d 6c 69 73 74 ) (circular-list
2490: 20 31 20 30 29 29 29 0a 20 20 20 20 28 66 61 69 1 0))). (fai
24a0: 6c 20 27 6d 61 70 3a 31 29 29 0a 0a 28 6f 72 20 l 'map:1))..(or
24b0: 28 65 71 75 61 6c 3f 20 27 28 35 20 34 20 33 20 (equal? '(5 4 3
24c0: 32 20 31 29 0a 09 20 20 20 20 28 6c 65 74 20 28 2 1).. (let (
24d0: 28 76 20 31 29 0a 09 09 20 20 28 6c 20 27 28 29 (v 1)... (l '()
24e0: 29 29 0a 09 20 20 20 20 20 20 28 66 6f 72 2d 65 )).. (for-e
24f0: 61 63 68 20 28 6c 61 6d 62 64 61 20 28 78 20 79 ach (lambda (x y
2500: 29 0a 09 09 09 20 20 28 6c 65 74 20 28 28 6e 20 ).... (let ((n
2510: 76 29 29 0a 09 09 09 20 20 20 20 28 73 65 74 21 v)).... (set!
2520: 20 76 20 28 2b 20 76 20 31 29 29 0a 09 09 09 20 v (+ v 1))....
2530: 20 20 20 28 73 65 74 21 20 6c 20 28 63 6f 6e 73 (set! l (cons
2540: 20 6e 20 6c 29 29 29 29 0a 09 09 09 27 28 30 20 n l))))....'(0
2550: 30 20 30 20 30 20 30 29 0a 09 09 09 28 63 69 72 0 0 0 0)....(cir
2560: 63 75 6c 61 72 2d 6c 69 73 74 20 31 20 32 29 29 cular-list 1 2))
2570: 0a 09 20 20 20 20 20 20 6c 29 29 0a 20 20 20 20 .. l)).
2580: 28 66 61 69 6c 20 27 66 6f 72 2d 65 61 63 68 3a (fail 'for-each:
2590: 31 29 29 0a 0a 28 6f 72 20 28 65 71 75 61 6c 3f 1))..(or (equal?
25a0: 20 27 28 31 20 2d 31 20 33 20 2d 33 20 38 20 2d '(1 -1 3 -3 8 -
25b0: 38 29 20 0a 09 20 20 20 20 28 61 70 70 65 6e 64 8) .. (append
25c0: 2d 6d 61 70 20 28 6c 61 6d 62 64 61 20 28 78 29 -map (lambda (x)
25d0: 20 28 6c 69 73 74 20 78 20 28 2d 20 78 29 29 29 (list x (- x)))
25e0: 20 27 28 31 20 33 20 38 29 29 29 0a 20 20 20 20 '(1 3 8))).
25f0: 28 66 61 69 6c 20 27 61 70 70 65 6e 64 2d 6d 61 (fail 'append-ma
2600: 70 3a 31 29 29 0a 0a 28 6f 72 20 28 65 71 75 61 p:1))..(or (equa
2610: 6c 3f 20 27 28 31 20 2d 31 20 33 20 2d 33 20 38 l? '(1 -1 3 -3 8
2620: 20 2d 38 29 20 0a 09 20 20 20 20 28 61 70 70 65 -8) .. (appe
2630: 6e 64 2d 6d 61 70 21 20 28 6c 61 6d 62 64 61 20 nd-map! (lambda
2640: 28 78 29 20 28 6c 69 73 74 20 78 20 28 2d 20 78 (x) (list x (- x
2650: 29 29 29 20 27 28 31 20 33 20 38 29 29 29 0a 20 ))) '(1 3 8))).
2660: 20 20 20 28 66 61 69 6c 20 27 61 70 70 65 6e 64 (fail 'append
2670: 2d 6d 61 70 21 3a 31 29 29 0a 0a 28 6f 72 20 28 -map!:1))..(or (
2680: 6c 65 74 2a 20 28 28 6c 20 28 6c 69 73 74 20 31 let* ((l (list 1
2690: 20 32 20 33 29 29 0a 09 20 20 20 28 6d 20 28 6d 2 3)).. (m (m
26a0: 61 70 21 20 28 6c 61 6d 62 64 61 20 28 78 29 20 ap! (lambda (x)
26b0: 28 2a 20 78 20 78 29 29 20 6c 29 29 29 0a 20 20 (* x x)) l))).
26c0: 20 20 20 20 28 61 6e 64 20 28 65 71 75 61 6c 3f (and (equal?
26d0: 20 6d 20 27 28 31 20 34 20 39 29 29 0a 09 20 20 m '(1 4 9))..
26e0: 20 28 65 71 75 61 6c 3f 20 6c 20 27 28 31 20 34 (equal? l '(1 4
26f0: 20 39 29 29 29 29 0a 20 20 20 20 28 66 61 69 6c 9)))). (fail
2700: 20 27 6d 61 70 21 3a 31 29 29 0a 0a 28 6f 72 20 'map!:1))..(or
2710: 28 65 71 75 61 6c 3f 20 27 28 31 20 32 20 33 20 (equal? '(1 2 3
2720: 34 20 35 29 0a 09 20 20 20 20 28 6c 65 74 20 28 4 5).. (let (
2730: 28 76 20 31 29 29 0a 09 20 20 20 20 20 20 28 6d (v 1)).. (m
2740: 61 70 2d 69 6e 2d 6f 72 64 65 72 20 28 6c 61 6d ap-in-order (lam
2750: 62 64 61 20 28 78 29 0a 09 09 09 20 20 20 20 20 bda (x)....
2760: 20 28 6c 65 74 20 28 28 6e 20 76 29 29 0a 09 09 (let ((n v))...
2770: 09 09 28 73 65 74 21 20 76 20 28 2b 20 76 20 31 ..(set! v (+ v 1
2780: 29 29 0a 09 09 09 09 6e 29 29 0a 09 09 09 20 20 )).....n))....
2790: 20 20 27 28 30 20 30 20 30 20 30 20 30 29 29 29 '(0 0 0 0 0)))
27a0: 29 0a 20 20 20 20 28 66 61 69 6c 20 27 6d 61 70 ). (fail 'map
27b0: 2d 69 6e 2d 6f 72 64 65 72 3a 31 29 29 0a 0a 28 -in-order:1))..(
27c0: 6f 72 20 28 65 71 75 61 6c 3f 20 27 28 28 33 29 or (equal? '((3)
27d0: 20 28 32 20 33 29 20 28 31 20 32 20 33 29 29 0a (2 3) (1 2 3)).
27e0: 09 20 20 20 20 28 6c 65 74 20 28 28 78 73 20 28 . (let ((xs (
27f0: 6c 69 73 74 20 31 20 32 20 33 29 29 0a 09 09 20 list 1 2 3))...
2800: 20 28 6c 20 27 28 29 29 29 0a 09 20 20 20 20 20 (l '()))..
2810: 20 28 70 61 69 72 2d 66 6f 72 2d 65 61 63 68 20 (pair-for-each
2820: 28 6c 61 6d 62 64 61 20 28 78 29 20 28 73 65 74 (lambda (x) (set
2830: 21 20 6c 20 28 63 6f 6e 73 20 78 20 6c 29 29 29 ! l (cons x l)))
2840: 20 78 73 29 0a 09 20 20 20 20 20 20 6c 29 29 0a xs).. l)).
2850: 20 20 20 20 28 66 61 69 6c 20 27 70 61 69 72 2d (fail 'pair-
2860: 66 6f 72 2d 65 61 63 68 3a 31 29 29 0a 0a 28 6f for-each:1))..(o
2870: 72 20 28 65 71 75 61 6c 3f 20 27 28 31 20 39 20 r (equal? '(1 9
2880: 34 39 29 0a 09 20 20 20 20 28 66 69 6c 74 65 72 49).. (filter
2890: 2d 6d 61 70 20 28 6c 61 6d 62 64 61 20 28 78 20 -map (lambda (x
28a0: 79 29 20 28 61 6e 64 20 28 6e 75 6d 62 65 72 3f y) (and (number?
28b0: 20 78 29 20 28 2a 20 78 20 78 29 29 29 20 0a 09 x) (* x x))) ..
28c0: 09 09 27 28 61 20 31 20 62 20 33 20 63 20 37 29 ..'(a 1 b 3 c 7)
28d0: 0a 09 09 09 28 63 69 72 63 75 6c 61 72 2d 6c 69 ....(circular-li
28e0: 73 74 20 31 20 32 29 29 29 0a 20 20 20 20 28 66 st 1 2))). (f
28f0: 61 69 6c 20 27 66 69 6c 74 65 72 2d 6d 61 70 3a ail 'filter-map:
2900: 31 29 29 0a 0a 28 6f 72 20 28 65 71 75 61 6c 3f 1))..(or (equal?
2910: 20 27 28 30 20 38 20 38 20 2d 34 29 20 28 66 69 '(0 8 8 -4) (fi
2920: 6c 74 65 72 20 65 76 65 6e 3f 20 27 28 30 20 37 lter even? '(0 7
2930: 20 38 20 38 20 34 33 20 2d 34 29 29 29 0a 20 20 8 8 43 -4))).
2940: 20 20 28 66 61 69 6c 20 27 66 69 6c 74 65 72 3a (fail 'filter:
2950: 31 29 29 0a 0a 28 6f 72 20 28 6c 65 74 2d 76 61 1))..(or (let-va
2960: 6c 75 65 73 20 28 28 28 61 20 62 29 20 28 70 61 lues (((a b) (pa
2970: 72 74 69 74 69 6f 6e 20 73 79 6d 62 6f 6c 3f 20 rtition symbol?
2980: 27 28 6f 6e 65 20 32 20 33 20 66 6f 75 72 20 66 '(one 2 3 four f
2990: 69 76 65 20 36 29 29 29 29 0a 20 20 20 20 20 20 ive 6)))).
29a0: 28 61 6e 64 20 28 65 71 75 61 6c 3f 20 61 20 27 (and (equal? a '
29b0: 28 6f 6e 65 20 66 6f 75 72 20 66 69 76 65 29 29 (one four five))
29c0: 0a 09 20 20 20 28 65 71 75 61 6c 3f 20 62 20 27 .. (equal? b '
29d0: 28 32 20 33 20 36 29 29 29 29 0a 20 20 20 20 28 (2 3 6)))). (
29e0: 66 61 69 6c 20 27 70 61 72 74 69 74 69 6f 6e 3a fail 'partition:
29f0: 31 29 29 0a 0a 28 6f 72 20 28 65 71 75 61 6c 3f 1))..(or (equal?
2a00: 20 27 28 37 20 34 33 29 20 28 72 65 6d 6f 76 65 '(7 43) (remove
2a10: 20 65 76 65 6e 3f 20 27 28 30 20 37 20 38 20 38 even? '(0 7 8 8
2a20: 20 34 33 20 2d 34 29 29 29 0a 20 20 20 20 28 66 43 -4))). (f
2a30: 61 69 6c 20 27 72 65 6d 6f 76 65 3a 31 29 29 0a ail 'remove:1)).
2a40: 0a 28 6f 72 20 28 6c 65 74 2a 20 28 28 78 20 28 .(or (let* ((x (
2a50: 6c 69 73 74 20 30 20 37 20 38 20 38 20 34 33 20 list 0 7 8 8 43
2a60: 2d 34 29 29 0a 09 20 20 20 28 79 20 28 70 61 69 -4)).. (y (pai
2a70: 72 2d 66 6f 6c 64 20 63 6f 6e 73 20 27 28 29 20 r-fold cons '()
2a80: 78 29 29 0a 09 20 20 20 28 72 20 28 66 69 6c 74 x)).. (r (filt
2a90: 65 72 21 20 65 76 65 6e 3f 20 78 29 29 29 0a 20 er! even? x))).
2aa0: 20 20 20 20 20 28 61 6e 64 20 28 65 71 75 61 6c (and (equal
2ab0: 3f 20 27 28 30 20 38 20 38 20 2d 34 29 20 72 29 ? '(0 8 8 -4) r)
2ac0: 0a 09 20 20 20 28 65 76 65 72 79 20 28 6c 61 6d .. (every (lam
2ad0: 62 64 61 20 28 63 29 20 28 6d 65 6d 71 20 63 20 bda (c) (memq c
2ae0: 79 29 29 20 28 70 61 69 72 2d 66 6f 6c 64 20 63 y)) (pair-fold c
2af0: 6f 6e 73 20 27 28 29 20 72 29 29 29 29 0a 20 20 ons '() r)))).
2b00: 20 20 28 66 61 69 6c 20 27 66 69 6c 74 65 72 21 (fail 'filter!
2b10: 3a 31 29 29 0a 0a 28 6f 72 20 28 6c 65 74 2a 20 :1))..(or (let*
2b20: 28 28 78 20 28 6c 69 73 74 20 27 6f 6e 65 20 32 ((x (list 'one 2
2b30: 20 33 20 27 66 6f 75 72 20 27 66 69 76 65 20 36 3 'four 'five 6
2b40: 29 29 0a 09 20 20 20 28 79 20 28 70 61 69 72 2d )).. (y (pair-
2b50: 66 6f 6c 64 20 63 6f 6e 73 20 27 28 29 20 78 29 fold cons '() x)
2b60: 29 29 0a 20 20 20 20 20 20 28 6c 65 74 2d 76 61 )). (let-va
2b70: 6c 75 65 73 20 28 28 28 61 20 62 29 20 28 70 61 lues (((a b) (pa
2b80: 72 74 69 74 69 6f 6e 21 20 73 79 6d 62 6f 6c 3f rtition! symbol?
2b90: 20 78 29 29 29 0a 09 28 61 6e 64 20 28 65 71 75 x)))..(and (equ
2ba0: 61 6c 3f 20 61 20 27 28 6f 6e 65 20 66 6f 75 72 al? a '(one four
2bb0: 20 66 69 76 65 29 29 0a 09 20 20 20 20 20 28 65 five)).. (e
2bc0: 71 75 61 6c 3f 20 62 20 27 28 32 20 33 20 36 29 qual? b '(2 3 6)
2bd0: 29 0a 09 20 20 20 20 20 28 65 76 65 72 79 20 28 ).. (every (
2be0: 6c 61 6d 62 64 61 20 28 63 29 20 28 6d 65 6d 71 lambda (c) (memq
2bf0: 20 63 20 79 29 29 20 28 70 61 69 72 2d 66 6f 6c c y)) (pair-fol
2c00: 64 20 63 6f 6e 73 20 27 28 29 20 61 29 29 0a 09 d cons '() a))..
2c10: 20 20 20 20 20 28 65 76 65 72 79 20 28 6c 61 6d (every (lam
2c20: 62 64 61 20 28 63 29 20 28 6d 65 6d 71 20 63 20 bda (c) (memq c
2c30: 79 29 29 20 28 70 61 69 72 2d 66 6f 6c 64 20 63 y)) (pair-fold c
2c40: 6f 6e 73 20 27 28 29 20 62 29 29 29 29 29 0a 20 ons '() b))))).
2c50: 20 20 20 28 66 61 69 6c 20 27 70 61 72 74 69 74 (fail 'partit
2c60: 69 6f 6e 21 3a 31 29 29 0a 0a 28 6f 72 20 28 6c ion!:1))..(or (l
2c70: 65 74 2a 20 28 28 78 20 28 6c 69 73 74 20 30 20 et* ((x (list 0
2c80: 37 20 38 20 38 20 34 33 20 2d 34 29 29 0a 09 20 7 8 8 43 -4))..
2c90: 20 20 28 79 20 28 70 61 69 72 2d 66 6f 6c 64 20 (y (pair-fold
2ca0: 63 6f 6e 73 20 27 28 29 20 78 29 29 0a 09 20 20 cons '() x))..
2cb0: 20 28 72 20 28 72 65 6d 6f 76 65 21 20 65 76 65 (r (remove! eve
2cc0: 6e 3f 20 78 29 29 29 0a 20 20 20 20 20 20 28 61 n? x))). (a
2cd0: 6e 64 20 28 65 71 75 61 6c 3f 20 27 28 37 20 34 nd (equal? '(7 4
2ce0: 33 29 20 72 29 0a 09 20 20 20 28 65 76 65 72 79 3) r).. (every
2cf0: 20 28 6c 61 6d 62 64 61 20 28 63 29 20 28 6d 65 (lambda (c) (me
2d00: 6d 71 20 63 20 79 29 29 20 28 70 61 69 72 2d 66 mq c y)) (pair-f
2d10: 6f 6c 64 20 63 6f 6e 73 20 27 28 29 20 72 29 29 old cons '() r))
2d20: 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 72 65 )). (fail 're
2d30: 6d 6f 76 65 21 3a 31 29 29 0a 0a 28 6f 72 20 28 move!:1))..(or (
2d40: 65 71 75 61 6c 3f 20 34 20 28 66 69 6e 64 20 65 equal? 4 (find e
2d50: 76 65 6e 3f 20 27 28 33 20 31 20 34 20 31 20 35 ven? '(3 1 4 1 5
2d60: 20 39 20 38 29 29 29 0a 20 20 20 20 28 66 61 69 9 8))). (fai
2d70: 6c 20 27 66 69 6e 64 3a 31 29 29 0a 0a 28 6f 72 l 'find:1))..(or
2d80: 20 28 65 71 75 61 6c 3f 20 27 28 34 20 31 20 35 (equal? '(4 1 5
2d90: 20 39 20 38 29 20 28 66 69 6e 64 2d 74 61 69 6c 9 8) (find-tail
2da0: 20 65 76 65 6e 3f 20 27 28 33 20 31 20 34 20 31 even? '(3 1 4 1
2db0: 20 35 20 39 20 38 29 29 29 0a 20 20 20 20 28 66 5 9 8))). (f
2dc0: 61 69 6c 20 27 66 69 6e 64 2d 74 61 69 6c 3a 31 ail 'find-tail:1
2dd0: 29 29 0a 28 6f 72 20 28 65 71 75 61 6c 3f 20 27 )).(or (equal? '
2de0: 23 66 20 28 66 69 6e 64 2d 74 61 69 6c 20 65 76 #f (find-tail ev
2df0: 65 6e 3f 20 27 28 31 20 33 20 35 20 37 29 29 29 en? '(1 3 5 7)))
2e00: 0a 20 20 20 20 28 66 61 69 6c 20 27 66 69 6e 64 . (fail 'find
2e10: 2d 74 61 69 6c 3a 32 29 29 0a 0a 28 6f 72 20 28 -tail:2))..(or (
2e20: 65 71 75 61 6c 3f 20 27 28 32 20 31 38 29 20 28 equal? '(2 18) (
2e30: 74 61 6b 65 2d 77 68 69 6c 65 20 65 76 65 6e 3f take-while even?
2e40: 20 27 28 32 20 31 38 20 33 20 31 30 20 32 32 20 '(2 18 3 10 22
2e50: 39 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 9))). (fail '
2e60: 74 61 6b 65 2d 77 68 69 6c 65 3a 31 29 29 0a 0a take-while:1))..
2e70: 28 6f 72 20 28 6c 65 74 2a 20 28 28 78 20 28 6c (or (let* ((x (l
2e80: 69 73 74 20 32 20 31 38 20 33 20 31 30 20 32 32 ist 2 18 3 10 22
2e90: 20 39 29 29 0a 09 20 20 20 28 72 20 28 74 61 6b 9)).. (r (tak
2ea0: 65 2d 77 68 69 6c 65 21 20 65 76 65 6e 3f 20 78 e-while! even? x
2eb0: 29 29 29 0a 20 20 20 20 20 20 28 61 6e 64 20 28 ))). (and (
2ec0: 65 71 75 61 6c 3f 20 72 20 27 28 32 20 31 38 29 equal? r '(2 18)
2ed0: 29 0a 09 20 20 20 28 65 71 3f 20 72 20 78 29 0a ).. (eq? r x).
2ee0: 09 20 20 20 28 65 71 3f 20 28 63 64 72 20 72 29 . (eq? (cdr r)
2ef0: 20 28 63 64 72 20 78 29 29 29 29 0a 20 20 20 20 (cdr x)))).
2f00: 28 66 61 69 6c 20 27 74 61 6b 65 2d 77 68 69 6c (fail 'take-whil
2f10: 65 21 3a 31 29 29 0a 0a 28 6f 72 20 28 65 71 75 e!:1))..(or (equ
2f20: 61 6c 3f 20 27 28 33 20 31 30 20 32 32 20 39 29 al? '(3 10 22 9)
2f30: 20 28 64 72 6f 70 2d 77 68 69 6c 65 20 65 76 65 (drop-while eve
2f40: 6e 3f 20 27 28 32 20 31 38 20 33 20 31 30 20 32 n? '(2 18 3 10 2
2f50: 32 20 39 29 29 29 0a 20 20 20 20 28 66 61 69 6c 2 9))). (fail
2f60: 20 27 64 72 6f 70 2d 77 68 69 6c 65 3a 31 29 29 'drop-while:1))
2f70: 0a 0a 28 6f 72 20 28 6c 65 74 2d 76 61 6c 75 65 ..(or (let-value
2f80: 73 20 28 28 28 61 20 62 29 20 28 73 70 61 6e 20 s (((a b) (span
2f90: 65 76 65 6e 3f 20 27 28 32 20 31 38 20 33 20 31 even? '(2 18 3 1
2fa0: 30 20 32 32 20 39 29 29 29 29 0a 20 20 20 20 20 0 22 9)))).
2fb0: 20 28 61 6e 64 20 28 65 71 75 61 6c 3f 20 61 20 (and (equal? a
2fc0: 27 28 32 20 31 38 29 29 0a 09 20 20 20 28 65 71 '(2 18)).. (eq
2fd0: 75 61 6c 3f 20 62 20 27 28 33 20 31 30 20 32 32 ual? b '(3 10 22
2fe0: 20 39 29 29 29 29 0a 20 20 20 20 28 66 61 69 6c 9)))). (fail
2ff0: 20 27 73 70 61 6e 3a 31 29 29 0a 0a 28 6f 72 20 'span:1))..(or
3000: 28 6c 65 74 2d 76 61 6c 75 65 73 20 28 28 28 61 (let-values (((a
3010: 20 62 29 20 28 62 72 65 61 6b 20 65 76 65 6e 3f b) (break even?
3020: 20 27 28 33 20 31 20 34 20 31 20 35 20 39 29 29 '(3 1 4 1 5 9))
3030: 29 29 0a 20 20 20 20 20 20 28 61 6e 64 20 28 65 )). (and (e
3040: 71 75 61 6c 3f 20 61 20 27 28 33 20 31 29 29 0a qual? a '(3 1)).
3050: 09 20 20 20 28 65 71 75 61 6c 3f 20 62 20 27 28 . (equal? b '(
3060: 34 20 31 20 35 20 39 29 29 29 29 0a 20 20 20 20 4 1 5 9)))).
3070: 28 66 61 69 6c 20 27 62 72 65 61 6b 3a 31 29 29 (fail 'break:1))
3080: 0a 0a 28 6f 72 20 28 6c 65 74 2a 20 28 28 78 20 ..(or (let* ((x
3090: 20 20 20 20 28 6c 69 73 74 20 32 20 31 38 20 33 (list 2 18 3
30a0: 20 31 30 20 32 32 20 39 29 29 0a 09 20 20 20 28 10 22 9)).. (
30b0: 63 65 6c 6c 73 20 28 70 61 69 72 2d 66 6f 6c 64 cells (pair-fold
30c0: 20 63 6f 6e 73 20 27 28 29 20 78 29 29 29 0a 20 cons '() x))).
30d0: 20 20 20 20 20 28 6c 65 74 2d 76 61 6c 75 65 73 (let-values
30e0: 20 28 28 28 61 20 62 29 20 28 73 70 61 6e 21 20 (((a b) (span!
30f0: 65 76 65 6e 3f 20 78 29 29 29 0a 20 20 20 20 20 even? x))).
3100: 20 20 20 28 61 6e 64 20 28 65 71 75 61 6c 3f 20 (and (equal?
3110: 61 20 27 28 32 20 31 38 29 29 0a 09 20 20 20 20 a '(2 18))..
3120: 20 28 65 71 75 61 6c 3f 20 62 20 27 28 33 20 31 (equal? b '(3 1
3130: 30 20 32 32 20 39 29 29 0a 09 20 20 20 20 20 28 0 22 9)).. (
3140: 65 76 65 72 79 20 28 6c 61 6d 62 64 61 20 28 78 every (lambda (x
3150: 29 20 28 6d 65 6d 71 20 78 20 63 65 6c 6c 73 29 ) (memq x cells)
3160: 29 20 28 70 61 69 72 2d 66 6f 6c 64 20 63 6f 6e ) (pair-fold con
3170: 73 20 27 28 29 20 61 29 29 0a 09 20 20 20 20 20 s '() a))..
3180: 28 65 76 65 72 79 20 28 6c 61 6d 62 64 61 20 28 (every (lambda (
3190: 78 29 20 28 6d 65 6d 71 20 78 20 63 65 6c 6c 73 x) (memq x cells
31a0: 29 29 20 28 70 61 69 72 2d 66 6f 6c 64 20 63 6f )) (pair-fold co
31b0: 6e 73 20 27 28 29 20 62 29 29 29 29 29 0a 20 20 ns '() b))))).
31c0: 20 20 28 66 61 69 6c 20 27 73 70 61 6e 21 3a 31 (fail 'span!:1
31d0: 29 29 0a 0a 28 6f 72 20 28 6c 65 74 2a 20 28 28 ))..(or (let* ((
31e0: 78 20 20 20 20 20 28 6c 69 73 74 20 33 20 31 20 x (list 3 1
31f0: 34 20 31 20 35 20 39 29 29 0a 09 20 20 20 28 63 4 1 5 9)).. (c
3200: 65 6c 6c 73 20 28 70 61 69 72 2d 66 6f 6c 64 20 ells (pair-fold
3210: 63 6f 6e 73 20 27 28 29 20 78 29 29 29 0a 20 20 cons '() x))).
3220: 20 20 20 20 28 6c 65 74 2d 76 61 6c 75 65 73 20 (let-values
3230: 28 28 28 61 20 62 29 20 28 62 72 65 61 6b 21 20 (((a b) (break!
3240: 65 76 65 6e 3f 20 78 29 29 29 0a 20 20 20 20 20 even? x))).
3250: 20 20 20 28 61 6e 64 20 28 65 71 75 61 6c 3f 20 (and (equal?
3260: 61 20 27 28 33 20 31 29 29 0a 09 20 20 20 20 20 a '(3 1))..
3270: 28 65 71 75 61 6c 3f 20 62 20 27 28 34 20 31 20 (equal? b '(4 1
3280: 35 20 39 29 29 0a 09 20 20 20 20 20 28 65 76 65 5 9)).. (eve
3290: 72 79 20 28 6c 61 6d 62 64 61 20 28 78 29 20 28 ry (lambda (x) (
32a0: 6d 65 6d 71 20 78 20 63 65 6c 6c 73 29 29 20 28 memq x cells)) (
32b0: 70 61 69 72 2d 66 6f 6c 64 20 63 6f 6e 73 20 27 pair-fold cons '
32c0: 28 29 20 61 29 29 0a 09 20 20 20 20 20 28 65 76 () a)).. (ev
32d0: 65 72 79 20 28 6c 61 6d 62 64 61 20 28 78 29 20 ery (lambda (x)
32e0: 28 6d 65 6d 71 20 78 20 63 65 6c 6c 73 29 29 20 (memq x cells))
32f0: 28 70 61 69 72 2d 66 6f 6c 64 20 63 6f 6e 73 20 (pair-fold cons
3300: 27 28 29 20 62 29 29 29 29 29 0a 20 20 20 20 28 '() b))))). (
3310: 66 61 69 6c 20 27 62 72 65 61 6b 21 3a 31 29 29 fail 'break!:1))
3320: 0a 0a 28 6f 72 20 28 61 6e 79 20 69 6e 74 65 67 ..(or (any integ
3330: 65 72 3f 20 27 28 61 20 33 20 62 20 32 2e 37 29 er? '(a 3 b 2.7)
3340: 29 0a 20 20 20 20 28 66 61 69 6c 20 27 61 6e 79 ). (fail 'any
3350: 3a 31 29 29 0a 28 6f 72 20 28 6e 6f 74 20 28 61 :1)).(or (not (a
3360: 6e 79 20 69 6e 74 65 67 65 72 3f 20 27 28 61 20 ny integer? '(a
3370: 33 2e 31 20 62 20 32 2e 37 29 29 29 0a 20 20 20 3.1 b 2.7))).
3380: 20 28 66 61 69 6c 20 27 61 6e 79 3a 32 29 29 0a (fail 'any:2)).
3390: 28 6f 72 20 28 61 6e 79 20 3c 20 27 28 33 20 31 (or (any < '(3 1
33a0: 20 34 20 31 20 35 29 20 28 63 69 72 63 75 6c 61 4 1 5) (circula
33b0: 72 2d 6c 69 73 74 20 32 20 37 20 31 20 38 20 32 r-list 2 7 1 8 2
33c0: 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 61 6e )). (fail 'an
33d0: 79 3a 33 29 29 0a 28 6f 72 20 28 65 71 75 61 6c y:3)).(or (equal
33e0: 3f 20 27 79 65 73 20 28 61 6e 79 20 28 6c 61 6d ? 'yes (any (lam
33f0: 62 64 61 20 28 61 20 62 29 20 28 69 66 20 28 3c bda (a b) (if (<
3400: 20 61 20 62 29 20 27 79 65 73 20 23 66 29 29 0a a b) 'yes #f)).
3410: 09 09 20 20 20 20 20 20 27 28 31 20 32 20 33 29 .. '(1 2 3)
3420: 20 27 28 30 20 31 20 34 29 29 29 0a 20 20 20 20 '(0 1 4))).
3430: 28 66 61 69 6c 20 27 61 6e 79 3a 34 29 29 0a 0a (fail 'any:4))..
3440: 28 6f 72 20 28 65 76 65 72 79 20 69 6e 74 65 67 (or (every integ
3450: 65 72 3f 20 27 28 31 20 32 20 33 29 29 0a 20 20 er? '(1 2 3)).
3460: 20 20 28 66 61 69 6c 20 27 65 76 65 72 79 3a 31 (fail 'every:1
3470: 29 29 0a 28 6f 72 20 28 6e 6f 74 20 28 65 76 65 )).(or (not (eve
3480: 72 79 20 69 6e 74 65 67 65 72 3f 20 27 28 33 20 ry integer? '(3
3490: 34 20 35 2e 31 29 29 29 0a 20 20 20 20 28 66 61 4 5.1))). (fa
34a0: 69 6c 20 27 65 76 65 72 79 3a 32 29 29 0a 28 6f il 'every:2)).(o
34b0: 72 20 28 65 76 65 72 79 20 3c 20 27 28 31 20 32 r (every < '(1 2
34c0: 20 33 29 20 28 63 69 72 63 75 6c 61 72 2d 6c 69 3) (circular-li
34d0: 73 74 20 32 20 33 20 34 29 29 0a 20 20 20 20 28 st 2 3 4)). (
34e0: 66 61 69 6c 20 27 65 76 65 72 79 3a 33 29 29 0a fail 'every:3)).
34f0: 0a 28 6f 72 20 28 65 71 75 61 6c 3f 20 32 20 28 .(or (equal? 2 (
3500: 6c 69 73 74 2d 69 6e 64 65 78 20 65 76 65 6e 3f list-index even?
3510: 20 27 28 33 20 31 20 34 20 31 20 35 20 39 29 29 '(3 1 4 1 5 9))
3520: 29 0a 20 20 20 20 28 66 61 69 6c 20 27 6c 69 73 ). (fail 'lis
3530: 74 2d 69 6e 64 65 78 3a 31 29 29 0a 28 6f 72 20 t-index:1)).(or
3540: 28 65 71 75 61 6c 3f 20 31 20 28 6c 69 73 74 2d (equal? 1 (list-
3550: 69 6e 64 65 78 20 3c 20 27 28 33 20 31 20 34 20 index < '(3 1 4
3560: 31 20 35 20 39 20 32 20 35 20 36 29 20 27 28 32 1 5 9 2 5 6) '(2
3570: 20 37 20 31 20 38 20 32 29 29 29 0a 20 20 20 20 7 1 8 2))).
3580: 28 66 61 69 6c 20 27 6c 69 73 74 2d 69 6e 64 65 (fail 'list-inde
3590: 78 3a 32 29 29 0a 28 6f 72 20 28 6e 6f 74 20 28 x:2)).(or (not (
35a0: 6c 69 73 74 2d 69 6e 64 65 78 20 3d 20 27 28 33 list-index = '(3
35b0: 20 31 20 34 20 31 20 35 20 39 20 32 20 35 20 36 1 4 1 5 9 2 5 6
35c0: 29 20 27 28 32 20 37 20 31 20 38 20 32 29 29 29 ) '(2 7 1 8 2)))
35d0: 0a 20 20 20 20 28 66 61 69 6c 20 27 6c 69 73 74 . (fail 'list
35e0: 2d 69 6e 64 65 78 3a 33 29 29 0a 0a 28 6f 72 20 -index:3))..(or
35f0: 28 65 71 75 61 6c 3f 20 27 28 33 37 20 34 38 29 (equal? '(37 48)
3600: 20 28 6d 65 6d 62 65 72 20 35 20 27 28 31 20 32 (member 5 '(1 2
3610: 20 35 20 33 37 20 34 38 29 20 3c 29 29 0a 20 20 5 37 48) <)).
3620: 20 20 28 66 61 69 6c 20 27 6d 65 6d 62 65 72 3a (fail 'member:
3630: 31 29 29 0a 0a 28 6f 72 20 28 65 71 75 61 6c 3f 1))..(or (equal?
3640: 20 27 28 31 20 32 20 35 29 20 28 64 65 6c 65 74 '(1 2 5) (delet
3650: 65 20 35 20 27 28 31 20 34 38 20 32 20 35 20 33 e 5 '(1 48 2 5 3
3660: 37 29 20 3c 29 29 0a 20 20 20 20 28 66 61 69 6c 7) <)). (fail
3670: 20 27 64 65 6c 65 74 65 3a 31 29 29 0a 28 6f 72 'delete:1)).(or
3680: 20 28 65 71 75 61 6c 3f 20 27 28 31 20 32 20 37 (equal? '(1 2 7
3690: 29 20 28 64 65 6c 65 74 65 20 35 20 27 28 31 20 ) (delete 5 '(1
36a0: 35 20 32 20 35 20 37 29 29 29 0a 20 20 20 20 28 5 2 5 7))). (
36b0: 66 61 69 6c 20 27 64 65 6c 65 74 65 3a 32 29 29 fail 'delete:2))
36c0: 0a 0a 28 6f 72 20 28 6c 65 74 2a 20 28 28 78 20 ..(or (let* ((x
36d0: 20 20 20 20 28 6c 69 73 74 20 31 20 34 38 20 32 (list 1 48 2
36e0: 20 35 20 33 37 29 29 0a 09 20 20 20 28 63 65 6c 5 37)).. (cel
36f0: 6c 73 20 28 70 61 69 72 2d 66 6f 6c 64 20 63 6f ls (pair-fold co
3700: 6e 73 20 27 28 29 20 78 29 29 0a 09 20 20 20 28 ns '() x)).. (
3710: 72 20 20 20 20 20 28 64 65 6c 65 74 65 21 20 35 r (delete! 5
3720: 20 78 20 3c 29 29 29 0a 20 20 20 20 20 20 28 61 x <))). (a
3730: 6e 64 20 28 65 71 75 61 6c 3f 20 72 20 27 28 31 nd (equal? r '(1
3740: 20 32 20 35 29 29 0a 09 20 20 20 28 65 76 65 72 2 5)).. (ever
3750: 79 20 28 6c 61 6d 62 64 61 20 28 78 29 20 28 6d y (lambda (x) (m
3760: 65 6d 71 20 78 20 63 65 6c 6c 73 29 29 20 28 70 emq x cells)) (p
3770: 61 69 72 2d 66 6f 6c 64 20 63 6f 6e 73 20 27 28 air-fold cons '(
3780: 29 20 72 29 29 29 29 0a 20 20 20 20 28 66 61 69 ) r)))). (fai
3790: 6c 20 27 64 65 6c 65 74 65 21 3a 31 29 29 0a 0a l 'delete!:1))..
37a0: 28 6f 72 20 28 65 71 75 61 6c 3f 20 27 28 28 61 (or (equal? '((a
37b0: 20 2e 20 33 29 20 28 62 20 2e 20 37 29 20 28 63 . 3) (b . 7) (c
37c0: 20 2e 20 31 29 29 0a 09 20 20 20 20 28 64 65 6c . 1)).. (del
37d0: 65 74 65 2d 64 75 70 6c 69 63 61 74 65 73 20 27 ete-duplicates '
37e0: 28 28 61 20 2e 20 33 29 20 28 62 20 2e 20 37 29 ((a . 3) (b . 7)
37f0: 20 28 61 20 2e 20 39 29 20 28 63 20 2e 20 31 29 (a . 9) (c . 1)
3800: 29 0a 09 09 09 20 20 20 20 20 20 20 28 6c 61 6d ).... (lam
3810: 62 64 61 20 28 78 20 79 29 20 28 65 71 3f 20 28 bda (x y) (eq? (
3820: 63 61 72 20 78 29 20 28 63 61 72 20 79 29 29 29 car x) (car y)))
3830: 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 64 65 )). (fail 'de
3840: 6c 65 74 65 2d 64 75 70 6c 69 63 61 74 65 73 3a lete-duplicates:
3850: 31 29 29 0a 28 6f 72 20 28 65 71 75 61 6c 3f 20 1)).(or (equal?
3860: 27 28 61 20 62 20 63 20 7a 29 20 28 64 65 6c 65 '(a b c z) (dele
3870: 74 65 2d 64 75 70 6c 69 63 61 74 65 73 20 27 28 te-duplicates '(
3880: 61 20 62 20 61 20 63 20 61 20 62 20 63 20 7a 29 a b a c a b c z)
3890: 20 65 71 3f 29 29 0a 20 20 20 20 28 66 61 69 6c eq?)). (fail
38a0: 20 27 64 65 6c 65 74 65 2d 64 75 70 6c 69 63 61 'delete-duplica
38b0: 74 65 73 3a 32 29 29 0a 0a 28 6f 72 20 28 6c 65 tes:2))..(or (le
38c0: 74 2a 20 28 28 78 20 20 20 20 20 28 6c 69 73 74 t* ((x (list
38d0: 20 27 61 20 27 62 20 27 61 20 27 63 20 27 61 20 'a 'b 'a 'c 'a
38e0: 27 62 20 27 63 20 27 7a 29 29 0a 09 20 20 20 28 'b 'c 'z)).. (
38f0: 63 65 6c 6c 73 20 28 70 61 69 72 2d 66 6f 6c 64 cells (pair-fold
3900: 20 63 6f 6e 73 20 27 28 29 20 78 29 29 0a 09 20 cons '() x))..
3910: 20 20 28 72 20 20 20 20 20 28 64 65 6c 65 74 65 (r (delete
3920: 2d 64 75 70 6c 69 63 61 74 65 73 21 20 78 29 29 -duplicates! x))
3930: 29 0a 20 20 20 20 20 20 28 61 6e 64 20 28 65 71 ). (and (eq
3940: 75 61 6c 3f 20 27 28 61 20 62 20 63 20 7a 29 20 ual? '(a b c z)
3950: 72 29 0a 09 20 20 20 28 65 76 65 72 79 20 28 6c r).. (every (l
3960: 61 6d 62 64 61 20 28 78 29 20 28 6d 65 6d 71 20 ambda (x) (memq
3970: 78 20 63 65 6c 6c 73 29 29 20 28 70 61 69 72 2d x cells)) (pair-
3980: 66 6f 6c 64 20 63 6f 6e 73 20 27 28 29 20 72 29 fold cons '() r)
3990: 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 64 ))). (fail 'd
39a0: 65 6c 65 74 65 2d 64 75 70 6c 69 63 61 74 65 73 elete-duplicates
39b0: 21 3a 31 29 29 0a 0a 28 6f 72 20 28 65 71 75 61 !:1))..(or (equa
39c0: 6c 3f 20 27 28 33 20 2e 20 23 74 29 20 28 61 73 l? '(3 . #t) (as
39d0: 73 6f 63 20 36 20 0a 09 09 09 20 20 20 20 20 27 soc 6 .... '
39e0: 28 28 34 20 2e 20 23 74 29 20 28 33 20 2e 20 23 ((4 . #t) (3 . #
39f0: 74 29 20 28 35 20 2e 20 23 74 29 29 0a 09 09 09 t) (5 . #t))....
3a00: 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 78 20 (lambda (x
3a10: 79 29 0a 09 09 09 20 20 20 20 20 20 20 28 7a 65 y).... (ze
3a20: 72 6f 3f 20 28 72 65 6d 61 69 6e 64 65 72 20 78 ro? (remainder x
3a30: 20 79 29 29 29 29 29 0a 20 20 20 20 28 66 61 69 y))))). (fai
3a40: 6c 20 27 61 73 73 6f 63 3a 31 29 29 0a 0a 28 6f l 'assoc:1))..(o
3a50: 72 20 28 65 71 75 61 6c 3f 20 27 28 28 31 20 2e r (equal? '((1 .
3a60: 20 23 74 29 20 28 32 20 2e 20 23 66 29 29 20 28 #t) (2 . #f)) (
3a70: 61 6c 69 73 74 2d 63 6f 6e 73 20 31 20 23 74 20 alist-cons 1 #t
3a80: 27 28 28 32 20 2e 20 23 66 29 29 29 29 0a 20 20 '((2 . #f)))).
3a90: 20 20 28 66 61 69 6c 20 27 61 6c 69 73 74 2d 63 (fail 'alist-c
3aa0: 6f 6e 73 3a 31 29 29 0a 0a 28 6f 72 20 28 6c 65 ons:1))..(or (le
3ab0: 74 2a 20 28 28 61 20 28 6c 69 73 74 20 28 63 6f t* ((a (list (co
3ac0: 6e 73 20 31 20 32 29 20 28 63 6f 6e 73 20 33 20 ns 1 2) (cons 3
3ad0: 34 29 29 29 0a 09 20 20 20 28 62 20 28 61 6c 69 4))).. (b (ali
3ae0: 73 74 2d 63 6f 70 79 20 61 29 29 29 0a 20 20 20 st-copy a))).
3af0: 20 20 20 28 61 6e 64 20 28 65 71 75 61 6c 3f 20 (and (equal?
3b00: 61 20 62 29 0a 09 20 20 20 28 65 76 65 72 79 20 a b).. (every
3b10: 28 6c 61 6d 62 64 61 20 28 78 29 20 28 6e 6f 74 (lambda (x) (not
3b20: 20 28 6d 65 6d 71 20 78 20 62 29 29 29 20 61 29 (memq x b))) a)
3b30: 0a 09 20 20 20 28 65 76 65 72 79 20 28 6c 61 6d .. (every (lam
3b40: 62 64 61 20 28 78 29 20 28 6e 6f 74 20 28 6d 65 bda (x) (not (me
3b50: 6d 71 20 78 20 61 29 29 29 20 62 29 29 29 0a 20 mq x a))) b))).
3b60: 20 20 20 28 66 61 69 6c 20 27 61 6c 69 73 74 2d (fail 'alist-
3b70: 63 6f 70 79 3a 31 29 29 0a 0a 28 6f 72 20 28 65 copy:1))..(or (e
3b80: 71 75 61 6c 3f 20 27 28 28 31 20 2e 20 23 74 29 qual? '((1 . #t)
3b90: 20 28 32 20 2e 20 23 74 29 20 28 34 20 2e 20 23 (2 . #t) (4 . #
3ba0: 74 29 29 0a 09 20 20 20 20 28 61 6c 69 73 74 2d t)).. (alist-
3bb0: 64 65 6c 65 74 65 20 35 20 27 28 28 31 20 2e 20 delete 5 '((1 .
3bc0: 23 74 29 20 28 32 20 2e 20 23 74 29 20 28 33 37 #t) (2 . #t) (37
3bd0: 20 2e 20 23 74 29 20 28 34 20 2e 20 23 74 29 20 . #t) (4 . #t)
3be0: 28 34 38 20 23 74 29 29 20 3c 29 29 0a 20 20 20 (48 #t)) <)).
3bf0: 20 28 66 61 69 6c 20 27 61 6c 69 73 74 2d 64 65 (fail 'alist-de
3c00: 6c 65 74 65 3a 31 29 29 0a 28 6f 72 20 28 65 71 lete:1)).(or (eq
3c10: 75 61 6c 3f 20 27 28 28 31 20 2e 20 23 74 29 20 ual? '((1 . #t)
3c20: 28 32 20 2e 20 23 74 29 20 28 34 20 2e 20 23 74 (2 . #t) (4 . #t
3c30: 29 29 0a 09 20 20 20 20 28 61 6c 69 73 74 2d 64 )).. (alist-d
3c40: 65 6c 65 74 65 20 37 20 27 28 28 31 20 2e 20 23 elete 7 '((1 . #
3c50: 74 29 20 28 32 20 2e 20 23 74 29 20 28 37 20 2e t) (2 . #t) (7 .
3c60: 20 23 74 29 20 28 34 20 2e 20 23 74 29 20 28 37 #t) (4 . #t) (7
3c70: 20 23 74 29 29 29 29 0a 20 20 20 20 28 66 61 69 #t)))). (fai
3c80: 6c 20 27 61 6c 69 73 74 2d 64 65 6c 65 74 65 3a l 'alist-delete:
3c90: 32 29 29 0a 0a 28 6f 72 20 28 6c 65 74 2a 20 28 2))..(or (let* (
3ca0: 28 78 20 28 6c 69 73 74 2d 63 6f 70 79 20 27 28 (x (list-copy '(
3cb0: 28 31 20 2e 20 23 74 29 20 28 32 20 2e 20 23 74 (1 . #t) (2 . #t
3cc0: 29 20 28 37 20 2e 20 23 74 29 20 28 34 20 2e 20 ) (7 . #t) (4 .
3cd0: 23 74 29 20 28 37 20 23 74 29 29 29 29 0a 09 20 #t) (7 #t))))..
3ce0: 20 20 28 79 20 28 6c 69 73 74 2d 63 6f 70 79 20 (y (list-copy
3cf0: 78 29 29 0a 09 20 20 20 28 63 65 6c 6c 73 20 28 x)).. (cells (
3d00: 70 61 69 72 2d 66 6f 6c 64 20 63 6f 6e 73 20 27 pair-fold cons '
3d10: 28 29 20 78 29 29 0a 09 20 20 20 28 72 20 28 61 () x)).. (r (a
3d20: 6c 69 73 74 2d 64 65 6c 65 74 65 21 20 37 20 78 list-delete! 7 x
3d30: 29 29 29 0a 20 20 20 20 20 20 28 61 6e 64 20 28 ))). (and (
3d40: 65 71 75 61 6c 3f 20 72 20 27 28 28 31 20 2e 20 equal? r '((1 .
3d50: 23 74 29 20 28 32 20 2e 20 23 74 29 20 28 34 20 #t) (2 . #t) (4
3d60: 2e 20 23 74 29 29 29 0a 09 20 20 20 28 65 76 65 . #t))).. (eve
3d70: 72 79 20 28 6c 61 6d 62 64 61 20 28 78 29 20 28 ry (lambda (x) (
3d80: 6d 65 6d 71 20 78 20 63 65 6c 6c 73 29 29 20 28 memq x cells)) (
3d90: 70 61 69 72 2d 66 6f 6c 64 20 63 6f 6e 73 20 27 pair-fold cons '
3da0: 28 29 20 72 29 29 0a 09 20 20 20 28 65 76 65 72 () r)).. (ever
3db0: 79 20 28 6c 61 6d 62 64 61 20 28 78 29 20 28 6d y (lambda (x) (m
3dc0: 65 6d 71 20 78 20 79 29 29 20 72 29 29 29 0a 20 emq x y)) r))).
3dd0: 20 20 20 28 66 61 69 6c 20 27 61 6c 69 73 74 2d (fail 'alist-
3de0: 64 65 6c 65 74 65 21 3a 31 29 29 0a 0a 28 6f 72 delete!:1))..(or
3df0: 20 28 6c 73 65 74 3c 3d 20 65 71 3f 20 27 28 61 (lset<= eq? '(a
3e00: 29 20 27 28 61 20 62 20 61 29 20 27 28 61 20 62 ) '(a b a) '(a b
3e10: 20 63 20 63 29 29 0a 20 20 20 20 28 66 61 69 6c c c)). (fail
3e20: 20 27 6c 73 65 74 3c 3d 3a 31 29 29 0a 28 6f 72 'lset<=:1)).(or
3e30: 20 28 6e 6f 74 20 28 6c 73 65 74 3c 3d 20 65 71 (not (lset<= eq
3e40: 3f 20 27 28 61 29 20 27 28 61 20 62 20 61 29 20 ? '(a) '(a b a)
3e50: 27 28 61 29 29 29 0a 20 20 20 20 28 66 61 69 6c '(a))). (fail
3e60: 20 27 6c 73 65 74 3c 3d 3a 32 29 29 0a 28 6f 72 'lset<=:2)).(or
3e70: 20 28 6c 73 65 74 3c 3d 20 65 71 3f 29 0a 20 20 (lset<= eq?).
3e80: 20 20 28 66 61 69 6c 20 27 6c 73 65 74 3c 3d 3a (fail 'lset<=:
3e90: 33 29 29 0a 28 6f 72 20 28 6c 73 65 74 3c 3d 20 3)).(or (lset<=
3ea0: 65 71 3f 20 27 28 61 29 29 0a 20 20 20 20 28 66 eq? '(a)). (f
3eb0: 61 69 6c 20 27 6c 73 65 74 3c 3d 3a 34 29 29 0a ail 'lset<=:4)).
3ec0: 0a 28 6f 72 20 28 6c 73 65 74 3d 20 65 71 3f 20 .(or (lset= eq?
3ed0: 27 28 62 20 65 20 61 29 20 27 28 61 20 65 20 62 '(b e a) '(a e b
3ee0: 29 20 27 28 65 20 65 20 62 20 61 29 29 0a 20 20 ) '(e e b a)).
3ef0: 20 20 28 66 61 69 6c 20 27 6c 73 65 74 3d 3a 31 (fail 'lset=:1
3f00: 29 29 0a 28 6f 72 20 28 6e 6f 74 20 28 6c 73 65 )).(or (not (lse
3f10: 74 3d 20 65 71 3f 20 27 28 62 20 65 20 61 29 20 t= eq? '(b e a)
3f20: 27 28 61 20 65 20 62 29 20 27 28 65 20 65 20 62 '(a e b) '(e e b
3f30: 20 61 20 63 29 29 29 0a 20 20 20 20 28 66 61 69 a c))). (fai
3f40: 6c 20 27 6c 73 65 74 3d 3a 32 29 29 0a 28 6f 72 l 'lset=:2)).(or
3f50: 20 28 6c 73 65 74 3d 20 65 71 3f 29 0a 20 20 20 (lset= eq?).
3f60: 20 28 66 61 69 6c 20 27 6c 73 65 74 3d 3a 33 29 (fail 'lset=:3)
3f70: 29 0a 28 6f 72 20 28 6c 73 65 74 3d 20 65 71 3f ).(or (lset= eq?
3f80: 20 27 28 61 29 29 0a 20 20 20 20 28 66 61 69 6c '(a)). (fail
3f90: 20 27 6c 73 65 74 3d 3a 34 29 29 0a 0a 28 6f 72 'lset=:4))..(or
3fa0: 20 28 65 71 75 61 6c 3f 20 27 28 75 20 6f 20 69 (equal? '(u o i
3fb0: 20 61 20 62 20 63 20 64 20 63 20 65 29 20 0a 09 a b c d c e) ..
3fc0: 20 20 20 20 28 6c 73 65 74 2d 61 64 6a 6f 69 6e (lset-adjoin
3fd0: 20 65 71 3f 20 27 28 61 20 62 20 63 20 64 20 63 eq? '(a b c d c
3fe0: 20 65 29 20 27 61 20 27 65 20 27 69 20 27 6f 20 e) 'a 'e 'i 'o
3ff0: 27 75 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 'u)). (fail '
4000: 6c 73 65 74 2d 61 64 6a 6f 69 6e 3a 31 29 29 0a lset-adjoin:1)).
4010: 0a 28 6f 72 20 28 65 71 75 61 6c 3f 20 27 28 75 .(or (equal? '(u
4020: 20 6f 20 69 20 61 20 62 20 63 20 64 20 65 29 0a o i a b c d e).
4030: 09 20 20 20 20 28 6c 73 65 74 2d 75 6e 69 6f 6e . (lset-union
4040: 20 65 71 3f 20 27 28 61 20 62 20 63 20 64 20 65 eq? '(a b c d e
4050: 29 20 27 28 61 20 65 20 69 20 6f 20 75 29 29 29 ) '(a e i o u)))
4060: 0a 20 20 20 20 28 66 61 69 6c 20 27 6c 73 65 74 . (fail 'lset
4070: 2d 75 6e 69 6f 6e 3a 31 29 29 0a 28 6f 72 20 28 -union:1)).(or (
4080: 65 71 75 61 6c 3f 20 27 28 78 20 61 20 61 20 63 equal? '(x a a c
4090: 29 20 28 6c 73 65 74 2d 75 6e 69 6f 6e 20 65 71 ) (lset-union eq
40a0: 3f 20 27 28 61 20 61 20 63 29 20 27 28 78 20 61 ? '(a a c) '(x a
40b0: 20 78 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 x))). (fail
40c0: 27 6c 73 65 74 2d 75 6e 69 6f 6e 3a 32 29 29 0a 'lset-union:2)).
40d0: 28 6f 72 20 28 6e 75 6c 6c 3f 20 28 6c 73 65 74 (or (null? (lset
40e0: 2d 75 6e 69 6f 6e 20 65 71 3f 29 29 0a 20 20 20 -union eq?)).
40f0: 20 28 66 61 69 6c 20 27 6c 73 65 74 2d 75 6e 69 (fail 'lset-uni
4100: 6f 6e 3a 33 29 29 0a 28 6f 72 20 28 65 71 75 61 on:3)).(or (equa
4110: 6c 3f 20 27 28 61 20 62 20 63 29 20 28 6c 73 65 l? '(a b c) (lse
4120: 74 2d 75 6e 69 6f 6e 20 65 71 3f 20 27 28 61 20 t-union eq? '(a
4130: 62 20 63 29 29 29 0a 20 20 20 20 28 66 61 69 6c b c))). (fail
4140: 20 27 6c 73 65 74 2d 75 6e 69 6f 6e 3a 34 29 29 'lset-union:4))
4150: 0a 0a 28 6f 72 20 28 65 71 75 61 6c 3f 20 27 28 ..(or (equal? '(
4160: 61 20 65 29 20 28 6c 73 65 74 2d 69 6e 74 65 72 a e) (lset-inter
4170: 73 65 63 74 69 6f 6e 20 65 71 3f 20 27 28 61 20 section eq? '(a
4180: 62 20 63 20 64 20 65 29 20 27 28 61 20 65 20 69 b c d e) '(a e i
4190: 20 6f 20 75 29 29 29 0a 20 20 20 20 28 66 61 69 o u))). (fai
41a0: 6c 20 27 6c 73 65 74 2d 69 6e 74 65 72 73 65 63 l 'lset-intersec
41b0: 74 69 6f 6e 3a 31 29 29 0a 28 6f 72 20 28 65 71 tion:1)).(or (eq
41c0: 75 61 6c 3f 20 27 28 61 20 78 20 61 29 20 28 6c ual? '(a x a) (l
41d0: 73 65 74 2d 69 6e 74 65 72 73 65 63 74 69 6f 6e set-intersection
41e0: 20 65 71 3f 20 27 28 61 20 78 20 79 20 61 29 20 eq? '(a x y a)
41f0: 27 28 78 20 61 20 78 20 7a 29 29 29 0a 20 20 20 '(x a x z))).
4200: 20 28 66 61 69 6c 20 27 6c 73 65 74 2d 69 6e 74 (fail 'lset-int
4210: 65 72 73 65 63 74 69 6f 6e 3a 32 29 29 0a 28 6f ersection:2)).(o
4220: 72 20 28 65 71 75 61 6c 3f 20 27 28 61 20 62 20 r (equal? '(a b
4230: 63 29 20 28 6c 73 65 74 2d 69 6e 74 65 72 73 65 c) (lset-interse
4240: 63 74 69 6f 6e 20 65 71 3f 20 27 28 61 20 62 20 ction eq? '(a b
4250: 63 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 c))). (fail '
4260: 6c 73 65 74 2d 69 6e 74 65 72 73 65 63 74 69 6f lset-intersectio
4270: 6e 3a 33 29 29 0a 0a 28 6f 72 20 28 65 71 75 61 n:3))..(or (equa
4280: 6c 3f 20 27 28 62 20 63 20 64 29 20 28 6c 73 65 l? '(b c d) (lse
4290: 74 2d 64 69 66 66 65 72 65 6e 63 65 20 65 71 3f t-difference eq?
42a0: 20 27 28 61 20 62 20 63 20 64 20 65 29 20 27 28 '(a b c d e) '(
42b0: 61 20 65 20 69 20 6f 20 75 29 29 29 0a 20 20 20 a e i o u))).
42c0: 20 28 66 61 69 6c 20 27 6c 73 65 74 2d 64 69 66 (fail 'lset-dif
42d0: 66 65 72 65 6e 63 65 3a 31 29 29 0a 28 6f 72 20 ference:1)).(or
42e0: 28 65 71 75 61 6c 3f 20 27 28 61 20 62 20 63 29 (equal? '(a b c)
42f0: 20 28 6c 73 65 74 2d 64 69 66 66 65 72 65 6e 63 (lset-differenc
4300: 65 20 65 71 3f 20 27 28 61 20 62 20 63 29 29 29 e eq? '(a b c)))
4310: 0a 20 20 20 20 28 66 61 69 6c 20 27 6c 73 65 74 . (fail 'lset
4320: 2d 64 69 66 66 65 72 65 6e 63 65 3a 32 29 29 0a -difference:2)).
4330: 0a 28 6f 72 20 28 6c 73 65 74 3d 20 65 71 3f 20 .(or (lset= eq?
4340: 27 28 64 20 63 20 62 20 69 20 6f 20 75 29 20 28 '(d c b i o u) (
4350: 6c 73 65 74 2d 78 6f 72 20 65 71 3f 20 27 28 61 lset-xor eq? '(a
4360: 20 62 20 63 20 64 20 65 29 20 27 28 61 20 65 20 b c d e) '(a e
4370: 69 20 6f 20 75 29 29 29 0a 20 20 20 20 28 66 61 i o u))). (fa
4380: 69 6c 20 27 6c 73 65 74 2d 78 6f 72 3a 31 29 29 il 'lset-xor:1))
4390: 0a 28 6f 72 20 28 6c 73 65 74 3d 20 65 71 3f 20 .(or (lset= eq?
43a0: 27 28 29 20 28 6c 73 65 74 2d 78 6f 72 20 65 71 '() (lset-xor eq
43b0: 3f 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 6c ?)). (fail 'l
43c0: 73 65 74 2d 78 6f 72 3a 32 29 29 0a 28 6f 72 20 set-xor:2)).(or
43d0: 28 6c 73 65 74 3d 20 65 71 3f 20 27 28 61 20 62 (lset= eq? '(a b
43e0: 20 63 20 64 20 65 29 20 28 6c 73 65 74 2d 78 6f c d e) (lset-xo
43f0: 72 20 65 71 3f 20 27 28 61 20 62 20 63 20 64 20 r eq? '(a b c d
4400: 65 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 e))). (fail '
4410: 6c 73 65 74 2d 78 6f 72 3a 33 29 29 0a 0a 28 6f lset-xor:3))..(o
4420: 72 20 28 6c 65 74 2d 76 61 6c 75 65 73 20 28 28 r (let-values ((
4430: 28 64 20 69 29 20 28 6c 73 65 74 2d 64 69 66 66 (d i) (lset-diff
4440: 2b 69 6e 74 65 72 73 65 63 74 69 6f 6e 20 65 71 +intersection eq
4450: 3f 20 27 28 61 20 62 20 63 20 64 20 65 29 20 27 ? '(a b c d e) '
4460: 28 63 20 64 20 66 29 29 29 29 0a 20 20 20 20 20 (c d f)))).
4470: 20 28 61 6e 64 20 28 65 71 75 61 6c 3f 20 64 20 (and (equal? d
4480: 27 28 61 20 62 20 65 29 29 0a 09 20 20 20 28 65 '(a b e)).. (e
4490: 71 75 61 6c 3f 20 69 20 27 28 63 20 64 29 29 29 qual? i '(c d)))
44a0: 29 0a 20 20 20 20 28 66 61 69 6c 20 27 6c 73 65 ). (fail 'lse
44b0: 74 2d 64 69 66 66 2b 69 6e 74 65 72 73 65 63 74 t-diff+intersect
44c0: 69 6f 6e 3a 31 29 29 0a 0a 3b 20 46 49 58 4d 45 ion:1))..; FIXME
44d0: 3a 20 46 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 : For the follow
44e0: 69 6e 67 20 66 69 76 65 20 70 72 6f 63 65 64 75 ing five procedu
44f0: 72 65 73 2c 20 6e 65 65 64 20 74 6f 20 63 68 65 res, need to che
4500: 63 6b 20 74 68 61 74 20 63 65 6c 6c 73 0a 3b 20 ck that cells.;
4510: 72 65 74 75 72 6e 65 64 20 61 72 65 20 66 72 6f returned are fro
4520: 6d 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 2e m the arguments.
4530: 0a 0a 28 6f 72 20 28 65 71 75 61 6c 3f 20 27 28 ..(or (equal? '(
4540: 75 20 6f 20 69 20 61 20 62 20 63 20 64 20 65 29 u o i a b c d e)
4550: 0a 09 20 20 20 20 28 6c 73 65 74 2d 75 6e 69 6f .. (lset-unio
4560: 6e 21 20 65 71 3f 20 28 6c 69 73 74 20 27 61 20 n! eq? (list 'a
4570: 27 62 20 27 63 20 27 64 20 27 65 29 20 28 6c 69 'b 'c 'd 'e) (li
4580: 73 74 20 27 61 20 27 65 20 27 69 20 27 6f 20 27 st 'a 'e 'i 'o '
4590: 75 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 u))). (fail '
45a0: 6c 73 65 74 2d 75 6e 69 6f 6e 21 3a 31 29 29 0a lset-union!:1)).
45b0: 28 6f 72 20 28 65 71 75 61 6c 3f 20 27 28 78 20 (or (equal? '(x
45c0: 61 20 61 20 63 29 20 28 6c 73 65 74 2d 75 6e 69 a a c) (lset-uni
45d0: 6f 6e 21 20 65 71 3f 20 28 6c 69 73 74 20 27 61 on! eq? (list 'a
45e0: 20 27 61 20 27 63 29 20 28 6c 69 73 74 20 27 78 'a 'c) (list 'x
45f0: 20 27 61 20 27 78 29 29 29 0a 20 20 20 20 28 66 'a 'x))). (f
4600: 61 69 6c 20 27 6c 73 65 74 2d 75 6e 69 6f 6e 21 ail 'lset-union!
4610: 3a 32 29 29 0a 28 6f 72 20 28 6e 75 6c 6c 3f 20 :2)).(or (null?
4620: 28 6c 73 65 74 2d 75 6e 69 6f 6e 21 20 65 71 3f (lset-union! eq?
4630: 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 6c 73 )). (fail 'ls
4640: 65 74 2d 75 6e 69 6f 6e 21 3a 33 29 29 0a 28 6f et-union!:3)).(o
4650: 72 20 28 65 71 75 61 6c 3f 20 27 28 61 20 62 20 r (equal? '(a b
4660: 63 29 20 28 6c 73 65 74 2d 75 6e 69 6f 6e 21 20 c) (lset-union!
4670: 65 71 3f 20 28 6c 69 73 74 20 27 61 20 27 62 20 eq? (list 'a 'b
4680: 27 63 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 'c))). (fail
4690: 27 6c 73 65 74 2d 75 6e 69 6f 6e 21 3a 34 29 29 'lset-union!:4))
46a0: 0a 0a 28 6f 72 20 28 65 71 75 61 6c 3f 20 27 28 ..(or (equal? '(
46b0: 61 20 65 29 20 28 6c 73 65 74 2d 69 6e 74 65 72 a e) (lset-inter
46c0: 73 65 63 74 69 6f 6e 21 20 65 71 3f 20 28 6c 69 section! eq? (li
46d0: 73 74 20 27 61 20 27 62 20 27 63 20 27 64 20 27 st 'a 'b 'c 'd '
46e0: 65 29 20 0a 09 09 09 09 20 20 20 20 20 20 20 28 e) ..... (
46f0: 6c 69 73 74 20 27 61 20 27 65 20 27 69 20 27 6f list 'a 'e 'i 'o
4700: 20 27 75 29 29 29 0a 20 20 20 20 28 66 61 69 6c 'u))). (fail
4710: 20 27 6c 73 65 74 2d 69 6e 74 65 72 73 65 63 74 'lset-intersect
4720: 69 6f 6e 21 3a 31 29 29 0a 28 6f 72 20 28 65 71 ion!:1)).(or (eq
4730: 75 61 6c 3f 20 27 28 61 20 78 20 61 29 20 28 6c ual? '(a x a) (l
4740: 73 65 74 2d 69 6e 74 65 72 73 65 63 74 69 6f 6e set-intersection
4750: 21 20 65 71 3f 20 28 6c 69 73 74 20 27 61 20 27 ! eq? (list 'a '
4760: 78 20 27 79 20 27 61 29 20 0a 09 09 09 09 09 20 x 'y 'a) ......
4770: 28 6c 69 73 74 20 27 78 20 27 61 20 27 78 20 27 (list 'x 'a 'x '
4780: 7a 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 z))). (fail '
4790: 6c 73 65 74 2d 69 6e 74 65 72 73 65 63 74 69 6f lset-intersectio
47a0: 6e 21 3a 32 29 29 0a 28 6f 72 20 28 65 71 75 61 n!:2)).(or (equa
47b0: 6c 3f 20 27 28 61 20 62 20 63 29 20 28 6c 73 65 l? '(a b c) (lse
47c0: 74 2d 69 6e 74 65 72 73 65 63 74 69 6f 6e 21 20 t-intersection!
47d0: 65 71 3f 20 28 6c 69 73 74 20 27 61 20 27 62 20 eq? (list 'a 'b
47e0: 27 63 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 'c))). (fail
47f0: 27 6c 73 65 74 2d 69 6e 74 65 72 73 65 63 74 69 'lset-intersecti
4800: 6f 6e 21 3a 33 29 29 0a 0a 28 6f 72 20 28 65 71 on!:3))..(or (eq
4810: 75 61 6c 3f 20 27 28 62 20 63 20 64 29 20 28 6c ual? '(b c d) (l
4820: 73 65 74 2d 64 69 66 66 65 72 65 6e 63 65 21 20 set-difference!
4830: 65 71 3f 20 28 6c 69 73 74 20 27 61 20 27 62 20 eq? (list 'a 'b
4840: 27 63 20 27 64 20 27 65 29 0a 09 09 09 09 20 20 'c 'd 'e).....
4850: 20 20 20 20 20 28 6c 69 73 74 20 27 61 20 27 65 (list 'a 'e
4860: 20 27 69 20 27 6f 20 27 75 29 29 29 0a 20 20 20 'i 'o 'u))).
4870: 20 28 66 61 69 6c 20 27 6c 73 65 74 2d 64 69 66 (fail 'lset-dif
4880: 66 65 72 65 6e 63 65 21 3a 31 29 29 0a 28 6f 72 ference!:1)).(or
4890: 20 28 65 71 75 61 6c 3f 20 27 28 61 20 62 20 63 (equal? '(a b c
48a0: 29 20 28 6c 73 65 74 2d 64 69 66 66 65 72 65 6e ) (lset-differen
48b0: 63 65 21 20 65 71 3f 20 28 6c 69 73 74 20 27 61 ce! eq? (list 'a
48c0: 20 27 62 20 27 63 29 29 29 0a 20 20 20 20 28 66 'b 'c))). (f
48d0: 61 69 6c 20 27 6c 73 65 74 2d 64 69 66 66 65 72 ail 'lset-differ
48e0: 65 6e 63 65 21 3a 32 29 29 0a 0a 28 6f 72 20 28 ence!:2))..(or (
48f0: 6c 73 65 74 3d 20 65 71 3f 20 27 28 64 20 63 20 lset= eq? '(d c
4900: 62 20 69 20 6f 20 75 29 20 28 6c 73 65 74 2d 78 b i o u) (lset-x
4910: 6f 72 21 20 65 71 3f 20 28 6c 69 73 74 20 27 61 or! eq? (list 'a
4920: 20 27 62 20 27 63 20 27 64 20 27 65 29 0a 09 09 'b 'c 'd 'e)...
4930: 09 09 09 20 28 6c 69 73 74 20 27 61 20 27 65 20 ... (list 'a 'e
4940: 27 69 20 27 6f 20 27 75 29 29 29 0a 20 20 20 20 'i 'o 'u))).
4950: 28 66 61 69 6c 20 27 6c 73 65 74 2d 78 6f 72 21 (fail 'lset-xor!
4960: 3a 31 29 29 0a 28 6f 72 20 28 6c 73 65 74 3d 20 :1)).(or (lset=
4970: 65 71 3f 20 27 28 29 20 28 6c 73 65 74 2d 78 6f eq? '() (lset-xo
4980: 72 21 20 65 71 3f 29 29 0a 20 20 20 20 28 66 61 r! eq?)). (fa
4990: 69 6c 20 27 6c 73 65 74 2d 78 6f 72 21 3a 32 29 il 'lset-xor!:2)
49a0: 29 0a 28 6f 72 20 28 6c 73 65 74 3d 20 65 71 3f ).(or (lset= eq?
49b0: 20 27 28 61 20 62 20 63 20 64 20 65 29 20 28 6c '(a b c d e) (l
49c0: 73 65 74 2d 78 6f 72 21 20 65 71 3f 20 28 6c 69 set-xor! eq? (li
49d0: 73 74 20 27 61 20 27 62 20 27 63 20 27 64 20 27 st 'a 'b 'c 'd '
49e0: 65 29 29 29 0a 20 20 20 20 28 66 61 69 6c 20 27 e))). (fail '
49f0: 6c 73 65 74 2d 78 6f 72 21 3a 33 29 29 0a 0a 28 lset-xor!:3))..(
4a00: 6f 72 20 28 6c 65 74 2d 76 61 6c 75 65 73 20 28 or (let-values (
4a10: 28 28 64 20 69 29 20 28 6c 73 65 74 2d 64 69 66 ((d i) (lset-dif
4a20: 66 2b 69 6e 74 65 72 73 65 63 74 69 6f 6e 21 20 f+intersection!
4a30: 65 71 3f 20 28 6c 69 73 74 20 27 61 20 27 62 20 eq? (list 'a 'b
4a40: 27 63 20 27 64 20 27 65 29 0a 09 09 09 09 09 09 'c 'd 'e).......
4a50: 20 28 6c 69 73 74 20 27 63 20 27 64 20 27 66 29 (list 'c 'd 'f)
4a60: 29 29 29 0a 20 20 20 20 20 20 28 61 6e 64 20 28 ))). (and (
4a70: 65 71 75 61 6c 3f 20 64 20 27 28 61 20 62 20 65 equal? d '(a b e
4a80: 29 29 0a 09 20 20 20 28 65 71 75 61 6c 3f 20 69 )).. (equal? i
4a90: 20 27 28 63 20 64 29 29 29 29 0a 20 20 20 20 28 '(c d)))). (
4aa0: 66 61 69 6c 20 27 6c 73 65 74 2d 64 69 66 66 2b fail 'lset-diff+
4ab0: 69 6e 74 65 72 73 65 63 74 69 6f 6e 21 3a 31 29 intersection!:1)
4ac0: 29 0a 0a 28 77 72 69 74 65 6c 6e 20 22 44 6f 6e )..(writeln "Don
4ad0: 65 2e 22 29 0a e.").