Hex Artifact Content
Not logged in

Artifact 005a453850879dd4949999e68b4cef01061f9f6a:


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.").