Hex Artifact Content
Not logged in

Artifact 3e909f8133816933f6057c931c6e15bd9a19f5c5:


0000: 23 21 72 36 72 73 0a 3b 20 3c 50 4c 41 49 4e 54  #!r6rs.; <PLAINT
0010: 45 58 54 3e 0a 3b 20 45 78 61 6d 70 6c 65 73 20  EXT>.; Examples 
0020: 66 6f 72 20 45 61 67 65 72 20 43 6f 6d 70 72 65  for Eager Compre
0030: 68 65 6e 73 69 6f 6e 73 20 69 6e 20 5b 6f 75 74  hensions in [out
0040: 65 72 2e 2e 69 6e 6e 65 72 7c 65 78 70 72 5d 2d  er..inner|expr]-
0050: 43 6f 6e 76 65 6e 74 69 6f 6e 0a 3b 20 3d 3d 3d  Convention.; ===
0060: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0070: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0080: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0090: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
00a0: 0a 3b 0a 3b 20 73 65 62 61 73 74 69 61 6e 2e 65  .;.; sebastian.e
00b0: 67 6e 65 72 40 70 68 69 6c 69 70 73 2e 63 6f 6d  gner@philips.com
00c0: 2c 20 45 69 6e 64 68 6f 76 65 6e 2c 20 54 68 65  , Eindhoven, The
00d0: 20 4e 65 74 68 65 72 6c 61 6e 64 73 2c 20 32 35   Netherlands, 25
00e0: 2d 41 70 72 2d 32 30 30 35 2e 0a 3b 20 53 63 68  -Apr-2005..; Sch
00f0: 65 6d 65 20 52 35 52 53 20 28 69 6e 63 6c 2e 20  eme R5RS (incl. 
0100: 6d 61 63 72 6f 73 29 2c 20 53 52 46 49 2d 32 33  macros), SRFI-23
0110: 20 28 65 72 72 6f 72 29 2e 0a 3b 20 0a 3b 20 52   (error)..; .; R
0120: 75 6e 6e 69 6e 67 20 74 68 65 20 65 78 61 6d 70  unning the examp
0130: 6c 65 73 20 69 6e 20 53 63 68 65 6d 65 34 38 20  les in Scheme48 
0140: 28 76 65 72 73 69 6f 6e 20 31 2e 31 29 3a 0a 3b  (version 1.1):.;
0150: 20 20 20 2c 6f 70 65 6e 20 73 72 66 69 2d 32 33     ,open srfi-23
0160: 0a 3b 20 20 20 2c 6c 6f 61 64 20 65 63 2e 73 63  .;   ,load ec.sc
0170: 6d 0a 3b 20 20 20 28 64 65 66 69 6e 65 20 6d 79  m.;   (define my
0180: 2d 6f 70 65 6e 2d 6f 75 74 70 75 74 2d 66 69 6c  -open-output-fil
0190: 65 20 6f 70 65 6e 2d 6f 75 74 70 75 74 2d 66 69  e open-output-fi
01a0: 6c 65 29 0a 3b 20 20 20 28 64 65 66 69 6e 65 20  le).;   (define 
01b0: 6d 79 2d 63 61 6c 6c 2d 77 69 74 68 2d 69 6e 70  my-call-with-inp
01c0: 75 74 2d 66 69 6c 65 20 63 61 6c 6c 2d 77 69 74  ut-file call-wit
01d0: 68 2d 69 6e 70 75 74 2d 66 69 6c 65 29 0a 3b 20  h-input-file).; 
01e0: 20 20 2c 6c 6f 61 64 20 65 78 61 6d 70 6c 65 73    ,load examples
01f0: 2e 73 63 6d 0a 3b 0a 3b 20 52 75 6e 6e 69 6e 67  .scm.;.; Running
0200: 20 74 68 65 20 65 78 61 6d 70 6c 65 73 20 69 6e   the examples in
0210: 20 50 4c 54 2f 44 72 53 63 68 65 6d 65 20 28 76   PLT/DrScheme (v
0220: 65 72 73 69 6f 6e 20 32 30 38 29 3a 20 0a 3b 20  ersion 208): .; 
0230: 20 20 28 6c 6f 61 64 20 22 65 63 2e 73 63 6d 22    (load "ec.scm"
0240: 29 0a 3b 20 20 20 28 64 65 66 69 6e 65 20 28 6d  ).;   (define (m
0250: 79 2d 6f 70 65 6e 2d 6f 75 74 70 75 74 2d 66 69  y-open-output-fi
0260: 6c 65 20 66 69 6c 65 6e 61 6d 65 29 0a 3b 20 20  le filename).;  
0270: 20 20 20 28 6f 70 65 6e 2d 6f 75 74 70 75 74 2d     (open-output-
0280: 66 69 6c 65 20 66 69 6c 65 6e 61 6d 65 20 27 72  file filename 'r
0290: 65 70 6c 61 63 65 20 27 74 65 78 74 29 20 29 0a  eplace 'text) ).
02a0: 3b 20 20 20 28 64 65 66 69 6e 65 20 28 6d 79 2d  ;   (define (my-
02b0: 63 61 6c 6c 2d 77 69 74 68 2d 69 6e 70 75 74 2d  call-with-input-
02c0: 66 69 6c 65 20 66 69 6c 65 6e 61 6d 65 20 74 68  file filename th
02d0: 75 6e 6b 29 0a 3b 20 20 20 20 20 28 63 61 6c 6c  unk).;     (call
02e0: 2d 77 69 74 68 2d 69 6e 70 75 74 2d 66 69 6c 65  -with-input-file
02f0: 20 66 69 6c 65 6e 61 6d 65 20 74 68 75 6e 6b 20   filename thunk 
0300: 27 74 65 78 74 29 20 29 0a 3b 20 20 20 28 6c 6f  'text) ).;   (lo
0310: 61 64 20 22 65 78 61 6d 70 6c 65 73 2e 73 63 6d  ad "examples.scm
0320: 22 29 0a 3b 0a 3b 20 52 75 6e 6e 69 6e 67 20 74  ").;.; Running t
0330: 68 65 20 65 78 61 6d 70 6c 65 73 20 69 6e 20 53  he examples in S
0340: 43 4d 20 28 76 65 72 73 69 6f 6e 20 35 64 37 29  CM (version 5d7)
0350: 3a 0a 3b 20 20 20 28 72 65 71 75 69 72 65 20 27  :.;   (require '
0360: 6d 61 63 72 6f 29 20 28 72 65 71 75 69 72 65 20  macro) (require 
0370: 27 72 65 63 6f 72 64 29 0a 3b 20 20 20 28 6c 6f  'record).;   (lo
0380: 61 64 20 22 65 63 2e 73 63 6d 22 29 0a 3b 20 20  ad "ec.scm").;  
0390: 20 28 64 65 66 69 6e 65 20 6d 79 2d 6f 70 65 6e   (define my-open
03a0: 2d 6f 75 74 70 75 74 2d 66 69 6c 65 20 6f 70 65  -output-file ope
03b0: 6e 2d 6f 75 74 70 75 74 2d 66 69 6c 65 29 0a 3b  n-output-file).;
03c0: 20 20 20 28 64 65 66 69 6e 65 20 6d 79 2d 63 61     (define my-ca
03d0: 6c 6c 2d 77 69 74 68 2d 69 6e 70 75 74 2d 66 69  ll-with-input-fi
03e0: 6c 65 20 63 61 6c 6c 2d 77 69 74 68 2d 69 6e 70  le call-with-inp
03f0: 75 74 2d 66 69 6c 65 29 0a 3b 20 20 20 28 6c 6f  ut-file).;   (lo
0400: 61 64 20 22 65 78 61 6d 70 6c 65 73 2e 73 63 6d  ad "examples.scm
0410: 22 29 0a 0a 28 69 6d 70 6f 72 74 0a 20 20 28 65  ")..(import.  (e
0420: 78 63 65 70 74 20 28 72 6e 72 73 29 20 65 72 72  xcept (rnrs) err
0430: 6f 72 29 0a 20 20 28 72 6e 72 73 20 6d 75 74 61  or).  (rnrs muta
0440: 62 6c 65 2d 73 74 72 69 6e 67 73 29 0a 20 20 28  ble-strings).  (
0450: 73 75 72 66 61 67 65 20 73 34 32 20 65 61 67 65  surfage s42 eage
0460: 72 2d 63 6f 6d 70 72 65 68 65 6e 73 69 6f 6e 73  r-comprehensions
0470: 29 0a 20 20 28 73 75 72 66 61 67 65 20 73 32 33  ).  (surfage s23
0480: 20 65 72 72 6f 72 29 29 0a 0a 28 64 65 66 69 6e   error))..(defin
0490: 65 20 28 6d 79 2d 6f 70 65 6e 2d 6f 75 74 70 75  e (my-open-outpu
04a0: 74 2d 66 69 6c 65 20 66 69 6c 65 6e 61 6d 65 29  t-file filename)
04b0: 0a 20 20 28 6f 70 65 6e 2d 66 69 6c 65 2d 6f 75  .  (open-file-ou
04c0: 74 70 75 74 2d 70 6f 72 74 20 66 69 6c 65 6e 61  tput-port filena
04d0: 6d 65 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  me .            
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 69               (fi
04f0: 6c 65 2d 6f 70 74 69 6f 6e 73 20 6e 6f 2d 66 61  le-options no-fa
0500: 69 6c 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  il).            
0510: 20 20 20 20 20 20 20 20 20 20 20 20 20 27 62 6c               'bl
0520: 6f 63 6b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ock.            
0530: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 61               (na
0540: 74 69 76 65 2d 74 72 61 6e 73 63 6f 64 65 72 29  tive-transcoder)
0550: 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 6d 79 2d  ))..(define (my-
0560: 63 61 6c 6c 2d 77 69 74 68 2d 69 6e 70 75 74 2d  call-with-input-
0570: 66 69 6c 65 20 66 69 6c 65 6e 61 6d 65 20 74 68  file filename th
0580: 75 6e 6b 29 0a 20 20 28 63 61 6c 6c 2d 77 69 74  unk).  (call-wit
0590: 68 2d 69 6e 70 75 74 2d 66 69 6c 65 20 66 69 6c  h-input-file fil
05a0: 65 6e 61 6d 65 20 74 68 75 6e 6b 29 29 0a 0a 3b  ename thunk))..;
05b0: 20 54 6f 6f 6c 73 20 66 6f 72 20 63 68 65 63 6b   Tools for check
05c0: 69 6e 67 20 72 65 73 75 6c 74 73 0a 3b 20 3d 3d  ing results.; ==
05d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
05e0: 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 69 6e  ========..(defin
05f0: 65 20 28 6d 79 2d 65 71 75 61 6c 3f 20 78 20 79  e (my-equal? x y
0600: 29 0a 20 20 28 63 6f 6e 64 0a 20 20 20 28 28 6f  ).  (cond.   ((o
0610: 72 20 28 62 6f 6f 6c 65 61 6e 3f 20 78 29 20 0a  r (boolean? x) .
0620: 20 20 20 20 20 20 20 20 28 6e 75 6c 6c 3f 20 78          (null? x
0630: 29 0a 20 20 20 20 20 20 20 20 28 73 79 6d 62 6f  ).        (symbo
0640: 6c 3f 20 78 29 20 0a 20 20 20 20 20 20 20 20 28  l? x) .        (
0650: 63 68 61 72 3f 20 78 29 20 0a 20 20 20 20 20 20  char? x) .      
0660: 20 20 28 69 6e 70 75 74 2d 70 6f 72 74 3f 20 78    (input-port? x
0670: 29 0a 20 20 20 20 20 20 20 20 28 6f 75 74 70 75  ).        (outpu
0680: 74 2d 70 6f 72 74 3f 20 78 29 20 29 0a 20 20 20  t-port? x) ).   
0690: 20 28 65 71 76 3f 20 78 20 79 29 20 29 0a 20 20   (eqv? x y) ).  
06a0: 20 28 28 73 74 72 69 6e 67 3f 20 78 29 0a 20 20   ((string? x).  
06b0: 20 20 28 61 6e 64 20 28 73 74 72 69 6e 67 3f 20    (and (string? 
06c0: 79 29 20 28 73 74 72 69 6e 67 3d 3f 20 78 20 79  y) (string=? x y
06d0: 29 29 20 29 0a 20 20 20 28 28 76 65 63 74 6f 72  )) ).   ((vector
06e0: 3f 20 78 29 0a 20 20 20 20 28 61 6e 64 20 28 76  ? x).    (and (v
06f0: 65 63 74 6f 72 3f 20 79 29 0a 20 20 20 20 20 20  ector? y).      
0700: 20 20 20 28 6d 79 2d 65 71 75 61 6c 3f 20 28 76     (my-equal? (v
0710: 65 63 74 6f 72 2d 3e 6c 69 73 74 20 78 29 20 28  ector->list x) (
0720: 76 65 63 74 6f 72 2d 3e 6c 69 73 74 20 79 29 29  vector->list y))
0730: 20 29 29 0a 20 20 20 28 28 70 61 69 72 3f 20 78   )).   ((pair? x
0740: 29 0a 20 20 20 20 28 61 6e 64 20 28 70 61 69 72  ).    (and (pair
0750: 3f 20 79 29 0a 20 20 20 20 20 20 20 20 20 28 6d  ? y).         (m
0760: 79 2d 65 71 75 61 6c 3f 20 28 63 61 72 20 78 29  y-equal? (car x)
0770: 20 28 63 61 72 20 79 29 29 0a 20 20 20 20 20 20   (car y)).      
0780: 20 20 20 28 6d 79 2d 65 71 75 61 6c 3f 20 28 63     (my-equal? (c
0790: 64 72 20 78 29 20 28 63 64 72 20 79 29 29 20 29  dr x) (cdr y)) )
07a0: 29 0a 20 20 20 28 28 72 65 61 6c 3f 20 78 29 0a  ).   ((real? x).
07b0: 20 20 20 20 28 61 6e 64 20 28 72 65 61 6c 3f 20      (and (real? 
07c0: 79 29 0a 20 20 20 20 20 20 20 20 20 28 65 71 76  y).         (eqv
07d0: 3f 20 28 65 78 61 63 74 3f 20 78 29 20 28 65 78  ? (exact? x) (ex
07e0: 61 63 74 3f 20 79 29 29 0a 20 20 20 20 20 20 20  act? y)).       
07f0: 20 20 28 69 66 20 28 65 78 61 63 74 3f 20 78 29    (if (exact? x)
0800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 28 3d  .             (=
0810: 20 78 20 79 29 0a 20 20 20 20 20 20 20 20 20 20   x y).          
0820: 20 20 20 28 3c 20 28 61 62 73 20 28 2d 20 78 20     (< (abs (- x 
0830: 79 29 29 20 28 2f 20 31 20 28 65 78 70 74 20 31  y)) (/ 1 (expt 1
0840: 30 20 36 29 29 29 20 29 29 29 20 3b 20 77 69 6c  0 6))) ))) ; wil
0850: 6c 20 64 6f 20 68 65 72 65 0a 20 20 20 28 65 6c  l do here.   (el
0860: 73 65 0a 20 20 20 20 28 65 72 72 6f 72 20 22 75  se.    (error "u
0870: 6e 72 65 63 6f 67 6e 69 7a 65 64 20 74 79 70 65  nrecognized type
0880: 22 20 78 29 20 29 29 29 0a 0a 28 64 65 66 69 6e  " x) )))..(defin
0890: 65 20 6d 79 2d 63 68 65 63 6b 2d 63 6f 72 72 65  e my-check-corre
08a0: 63 74 20 30 29 0a 28 64 65 66 69 6e 65 20 6d 79  ct 0).(define my
08b0: 2d 63 68 65 63 6b 2d 77 72 6f 6e 67 20 20 20 30  -check-wrong   0
08c0: 29 0a 0a 28 64 65 66 69 6e 65 2d 73 79 6e 74 61  )..(define-synta
08d0: 78 20 6d 79 2d 63 68 65 63 6b 0a 20 20 28 73 79  x my-check.  (sy
08e0: 6e 74 61 78 2d 72 75 6c 65 73 20 28 3d 3e 29 0a  ntax-rules (=>).
08f0: 20 20 20 20 28 28 6d 79 2d 63 68 65 63 6b 20 65      ((my-check e
0900: 63 20 3d 3e 20 64 65 73 69 72 65 64 2d 72 65 73  c => desired-res
0910: 75 6c 74 29 0a 20 20 20 20 20 28 62 65 67 69 6e  ult).     (begin
0920: 0a 20 20 20 20 20 20 20 28 6e 65 77 6c 69 6e 65  .       (newline
0930: 29 0a 20 20 20 20 20 20 20 28 77 72 69 74 65 20  ).       (write 
0940: 28 71 75 6f 74 65 20 65 63 29 29 0a 20 20 20 20  (quote ec)).    
0950: 20 20 20 28 6e 65 77 6c 69 6e 65 29 0a 20 20 20     (newline).   
0960: 20 20 20 20 28 6c 65 74 20 28 28 61 63 74 75 61      (let ((actua
0970: 6c 2d 72 65 73 75 6c 74 20 65 63 29 29 0a 20 20  l-result ec)).  
0980: 20 20 20 20 20 20 20 28 64 69 73 70 6c 61 79 20         (display 
0990: 22 20 20 3d 3e 20 22 29 0a 20 20 20 20 20 20 20  "  => ").       
09a0: 20 20 28 77 72 69 74 65 20 61 63 74 75 61 6c 2d    (write actual-
09b0: 72 65 73 75 6c 74 29 0a 20 20 20 20 20 20 20 20  result).        
09c0: 20 28 69 66 20 28 6d 79 2d 65 71 75 61 6c 3f 20   (if (my-equal? 
09d0: 61 63 74 75 61 6c 2d 72 65 73 75 6c 74 20 64 65  actual-result de
09e0: 73 69 72 65 64 2d 72 65 73 75 6c 74 29 0a 20 20  sired-result).  
09f0: 20 20 20 20 20 20 20 20 20 20 20 28 62 65 67 69             (begi
0a00: 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
0a10: 20 28 64 69 73 70 6c 61 79 20 22 20 3b 20 63 6f   (display " ; co
0a20: 72 72 65 63 74 22 29 0a 20 20 20 20 20 20 20 20  rrect").        
0a30: 20 20 20 20 20 20 20 28 73 65 74 21 20 6d 79 2d         (set! my-
0a40: 63 68 65 63 6b 2d 63 6f 72 72 65 63 74 20 28 2b  check-correct (+
0a50: 20 6d 79 2d 63 68 65 63 6b 2d 63 6f 72 72 65 63   my-check-correc
0a60: 74 20 31 29 29 20 29 0a 20 20 20 20 20 20 20 20  t 1)) ).        
0a70: 20 20 20 20 20 28 62 65 67 69 6e 0a 20 20 20 20       (begin.    
0a80: 20 20 20 20 20 20 20 20 20 20 20 28 64 69 73 70             (disp
0a90: 6c 61 79 20 22 20 3b 20 2a 2a 2a 20 77 72 6f 6e  lay " ; *** wron
0aa0: 67 20 2a 2a 2a 2c 20 64 65 73 69 72 65 64 20 72  g ***, desired r
0ab0: 65 73 75 6c 74 3a 22 29 0a 20 20 20 20 20 20 20  esult:").       
0ac0: 20 20 20 20 20 20 20 20 28 6e 65 77 6c 69 6e 65          (newline
0ad0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
0ae0: 20 28 64 69 73 70 6c 61 79 20 22 20 20 3d 3e 20   (display "  => 
0af0: 22 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ").             
0b00: 20 20 28 77 72 69 74 65 20 64 65 73 69 72 65 64    (write desired
0b10: 2d 72 65 73 75 6c 74 29 0a 20 20 20 20 20 20 20  -result).       
0b20: 20 20 20 20 20 20 20 20 28 73 65 74 21 20 6d 79          (set! my
0b30: 2d 63 68 65 63 6b 2d 77 72 6f 6e 67 20 28 2b 20  -check-wrong (+ 
0b40: 6d 79 2d 63 68 65 63 6b 2d 77 72 6f 6e 67 20 31  my-check-wrong 1
0b50: 29 29 20 29 29 0a 20 20 20 20 20 20 20 20 20 28  )) )).         (
0b60: 6e 65 77 6c 69 6e 65 29 20 29 29 29 29 29 0a 20  newline) ))))). 
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 0a 0a 3b 20              ..; 
0b80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0b90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0ba0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0bb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0bc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 20 64 6f 2d  ==========.; do-
0bd0: 65 63 20 0a 3b 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ec .; ==========
0be0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0bf0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0c00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0c10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0c20: 0a 0a 28 6d 79 2d 63 68 65 63 6b 20 0a 20 20 28  ..(my-check .  (
0c30: 6c 65 74 20 28 28 78 20 30 29 29 20 28 64 6f 2d  let ((x 0)) (do-
0c40: 65 63 20 28 73 65 74 21 20 78 20 28 2b 20 78 20  ec (set! x (+ x 
0c50: 31 29 29 29 20 78 29 20 0a 20 20 3d 3e 20 31 29  1))) x) .  => 1)
0c60: 0a 0a 28 6d 79 2d 63 68 65 63 6b 20 0a 20 20 28  ..(my-check .  (
0c70: 6c 65 74 20 28 28 78 20 30 29 29 20 28 64 6f 2d  let ((x 0)) (do-
0c80: 65 63 20 28 3a 72 61 6e 67 65 20 69 20 31 30 29  ec (:range i 10)
0c90: 20 28 73 65 74 21 20 78 20 28 2b 20 78 20 31 29   (set! x (+ x 1)
0ca0: 29 29 20 78 29 20 0a 20 20 3d 3e 20 31 30 29 0a  )) x) .  => 10).
0cb0: 0a 28 6d 79 2d 63 68 65 63 6b 20 0a 20 20 28 6c  .(my-check .  (l
0cc0: 65 74 20 28 28 78 20 30 29 29 20 28 64 6f 2d 65  et ((x 0)) (do-e
0cd0: 63 20 28 3a 72 61 6e 67 65 20 6e 20 31 30 29 20  c (:range n 10) 
0ce0: 28 3a 72 61 6e 67 65 20 6b 20 6e 29 20 28 73 65  (:range k n) (se
0cf0: 74 21 20 78 20 28 2b 20 78 20 31 29 29 29 20 78  t! x (+ x 1))) x
0d00: 29 20 0a 20 20 3d 3e 20 34 35 29 0a 0a 0a 3b 20  ) .  => 45)...; 
0d10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0d20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0d30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0d40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0d50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 20 6c 69 73  ==========.; lis
0d60: 74 2d 65 63 20 61 6e 64 20 62 61 73 69 63 20 71  t-ec and basic q
0d70: 75 61 6c 69 66 69 65 72 73 20 0a 3b 20 3d 3d 3d  ualifiers .; ===
0d80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0d90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0da0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0db0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0dc0: 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 6d 79 2d 63 68 65  =======..(my-che
0dd0: 63 6b 20 28 6c 69 73 74 2d 65 63 20 31 29 20 3d  ck (list-ec 1) =
0de0: 3e 20 27 28 31 29 29 0a 0a 28 6d 79 2d 63 68 65  > '(1))..(my-che
0df0: 63 6b 20 28 6c 69 73 74 2d 65 63 20 28 3a 72 61  ck (list-ec (:ra
0e00: 6e 67 65 20 69 20 34 29 20 69 29 20 3d 3e 20 27  nge i 4) i) => '
0e10: 28 30 20 31 20 32 20 33 29 29 0a 0a 28 6d 79 2d  (0 1 2 3))..(my-
0e20: 63 68 65 63 6b 20 28 6c 69 73 74 2d 65 63 20 28  check (list-ec (
0e30: 3a 72 61 6e 67 65 20 6e 20 33 29 20 28 3a 72 61  :range n 3) (:ra
0e40: 6e 67 65 20 6b 20 28 2b 20 6e 20 31 29 29 20 28  nge k (+ n 1)) (
0e50: 6c 69 73 74 20 6e 20 6b 29 29 20 0a 20 20 3d 3e  list n k)) .  =>
0e60: 20 27 28 28 30 20 30 29 20 28 31 20 30 29 20 28   '((0 0) (1 0) (
0e70: 31 20 31 29 20 28 32 20 30 29 20 28 32 20 31 29  1 1) (2 0) (2 1)
0e80: 20 28 32 20 32 29 29 20 29 0a 0a 28 6d 79 2d 63   (2 2)) )..(my-c
0e90: 68 65 63 6b 20 0a 20 20 28 6c 69 73 74 2d 65 63  heck .  (list-ec
0ea0: 20 28 3a 72 61 6e 67 65 20 6e 20 35 29 20 28 69   (:range n 5) (i
0eb0: 66 20 28 65 76 65 6e 3f 20 6e 29 29 20 28 3a 72  f (even? n)) (:r
0ec0: 61 6e 67 65 20 6b 20 28 2b 20 6e 20 31 29 29 20  ange k (+ n 1)) 
0ed0: 28 6c 69 73 74 20 6e 20 6b 29 29 20 0a 20 20 3d  (list n k)) .  =
0ee0: 3e 20 27 28 28 30 20 30 29 20 28 32 20 30 29 20  > '((0 0) (2 0) 
0ef0: 28 32 20 31 29 20 28 32 20 32 29 20 28 34 20 30  (2 1) (2 2) (4 0
0f00: 29 20 28 34 20 31 29 20 28 34 20 32 29 20 28 34  ) (4 1) (4 2) (4
0f10: 20 33 29 20 28 34 20 34 29 29 20 29 0a 0a 28 6d   3) (4 4)) )..(m
0f20: 79 2d 63 68 65 63 6b 20 0a 20 20 28 6c 69 73 74  y-check .  (list
0f30: 2d 65 63 20 28 3a 72 61 6e 67 65 20 6e 20 35 29  -ec (:range n 5)
0f40: 20 28 6e 6f 74 20 28 65 76 65 6e 3f 20 6e 29 29   (not (even? n))
0f50: 20 28 3a 72 61 6e 67 65 20 6b 20 28 2b 20 6e 20   (:range k (+ n 
0f60: 31 29 29 20 28 6c 69 73 74 20 6e 20 6b 29 29 20  1)) (list n k)) 
0f70: 0a 20 20 3d 3e 20 27 28 28 31 20 30 29 20 28 31  .  => '((1 0) (1
0f80: 20 31 29 20 28 33 20 30 29 20 28 33 20 31 29 20   1) (3 0) (3 1) 
0f90: 28 33 20 32 29 20 28 33 20 33 29 29 20 29 0a 0a  (3 2) (3 3)) )..
0fa0: 28 6d 79 2d 63 68 65 63 6b 0a 20 20 28 6c 69 73  (my-check.  (lis
0fb0: 74 2d 65 63 20 28 3a 72 61 6e 67 65 20 6e 20 35  t-ec (:range n 5
0fc0: 29 20 0a 20 20 20 20 20 20 20 20 20 20 20 28 61  ) .           (a
0fd0: 6e 64 20 28 65 76 65 6e 3f 20 6e 29 20 28 3e 20  nd (even? n) (> 
0fe0: 6e 20 32 29 29 20 0a 20 20 20 20 20 20 20 20 20  n 2)) .         
0ff0: 20 20 28 3a 72 61 6e 67 65 20 6b 20 28 2b 20 6e    (:range k (+ n
1000: 20 31 29 29 20 0a 20 20 20 20 20 20 20 20 20 20   1)) .          
1010: 20 28 6c 69 73 74 20 6e 20 6b 29 20 29 0a 20 20   (list n k) ).  
1020: 3d 3e 20 27 28 28 34 20 30 29 20 28 34 20 31 29  => '((4 0) (4 1)
1030: 20 28 34 20 32 29 20 28 34 20 33 29 20 28 34 20   (4 2) (4 3) (4 
1040: 34 29 29 20 29 0a 0a 28 6d 79 2d 63 68 65 63 6b  4)) )..(my-check
1050: 0a 20 20 28 6c 69 73 74 2d 65 63 20 28 3a 72 61  .  (list-ec (:ra
1060: 6e 67 65 20 6e 20 35 29 20 0a 20 20 20 20 20 20  nge n 5) .      
1070: 20 20 20 20 20 28 6f 72 20 28 65 76 65 6e 3f 20       (or (even? 
1080: 6e 29 20 28 3e 20 6e 20 33 29 29 20 0a 20 20 20  n) (> n 3)) .   
1090: 20 20 20 20 20 20 20 20 28 3a 72 61 6e 67 65 20          (:range 
10a0: 6b 20 28 2b 20 6e 20 31 29 29 20 0a 20 20 20 20  k (+ n 1)) .    
10b0: 20 20 20 20 20 20 20 28 6c 69 73 74 20 6e 20 6b         (list n k
10c0: 29 20 29 0a 20 20 3d 3e 20 27 28 28 30 20 30 29  ) ).  => '((0 0)
10d0: 20 28 32 20 30 29 20 28 32 20 31 29 20 28 32 20   (2 0) (2 1) (2 
10e0: 32 29 20 28 34 20 30 29 20 28 34 20 31 29 20 28  2) (4 0) (4 1) (
10f0: 34 20 32 29 20 28 34 20 33 29 20 28 34 20 34 29  4 2) (4 3) (4 4)
1100: 29 20 29 0a 0a 28 6d 79 2d 63 68 65 63 6b 0a 20  ) )..(my-check. 
1110: 28 6c 65 74 20 28 28 78 20 30 29 29 20 28 6c 69  (let ((x 0)) (li
1120: 73 74 2d 65 63 20 28 3a 72 61 6e 67 65 20 6e 20  st-ec (:range n 
1130: 31 30 29 20 28 62 65 67 69 6e 20 28 73 65 74 21  10) (begin (set!
1140: 20 78 20 28 2b 20 78 20 31 29 29 29 20 6e 29 20   x (+ x 1))) n) 
1150: 78 29 0a 20 3d 3e 20 31 30 20 29 0a 0a 28 6d 79  x). => 10 )..(my
1160: 2d 63 68 65 63 6b 0a 20 28 6c 69 73 74 2d 65 63  -check. (list-ec
1170: 20 28 6e 65 73 74 65 64 20 28 3a 72 61 6e 67 65   (nested (:range
1180: 20 6e 20 33 29 20 28 3a 72 61 6e 67 65 20 6b 20   n 3) (:range k 
1190: 6e 29 29 20 6b 29 0a 20 3d 3e 20 27 28 30 20 30  n)) k). => '(0 0
11a0: 20 31 29 20 29 0a 0a 0a 3b 20 3d 3d 3d 3d 3d 3d   1) )...; ======
11b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
11c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
11d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
11e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
11f0: 3d 3d 3d 3d 0a 3b 20 4f 74 68 65 72 20 63 6f 6d  ====.; Other com
1200: 70 72 65 68 65 6e 73 69 6f 6e 73 0a 3b 20 3d 3d  prehensions.; ==
1210: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1220: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1230: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1240: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1250: 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 6d 79 2d 63 68  ========..(my-ch
1260: 65 63 6b 20 28 61 70 70 65 6e 64 2d 65 63 20 27  eck (append-ec '
1270: 28 61 20 62 29 29 20 3d 3e 20 27 28 61 20 62 29  (a b)) => '(a b)
1280: 29 0a 28 6d 79 2d 63 68 65 63 6b 20 28 61 70 70  ).(my-check (app
1290: 65 6e 64 2d 65 63 20 28 3a 72 61 6e 67 65 20 69  end-ec (:range i
12a0: 20 30 29 20 27 28 61 20 62 29 29 20 3d 3e 20 27   0) '(a b)) => '
12b0: 28 29 29 0a 28 6d 79 2d 63 68 65 63 6b 20 28 61  ()).(my-check (a
12c0: 70 70 65 6e 64 2d 65 63 20 28 3a 72 61 6e 67 65  ppend-ec (:range
12d0: 20 69 20 31 29 20 27 28 61 20 62 29 29 20 3d 3e   i 1) '(a b)) =>
12e0: 20 27 28 61 20 62 29 29 0a 28 6d 79 2d 63 68 65   '(a b)).(my-che
12f0: 63 6b 20 28 61 70 70 65 6e 64 2d 65 63 20 28 3a  ck (append-ec (:
1300: 72 61 6e 67 65 20 69 20 32 29 20 27 28 61 20 62  range i 2) '(a b
1310: 29 29 20 3d 3e 20 27 28 61 20 62 20 61 20 62 29  )) => '(a b a b)
1320: 29 0a 0a 28 6d 79 2d 63 68 65 63 6b 20 28 73 74  )..(my-check (st
1330: 72 69 6e 67 2d 65 63 20 23 5c 61 29 20 3d 3e 20  ring-ec #\a) => 
1340: 28 73 74 72 69 6e 67 20 23 5c 61 29 29 0a 28 6d  (string #\a)).(m
1350: 79 2d 63 68 65 63 6b 20 28 73 74 72 69 6e 67 2d  y-check (string-
1360: 65 63 20 28 3a 72 61 6e 67 65 20 69 20 30 29 20  ec (:range i 0) 
1370: 23 5c 61 29 20 3d 3e 20 22 22 29 0a 28 6d 79 2d  #\a) => "").(my-
1380: 63 68 65 63 6b 20 28 73 74 72 69 6e 67 2d 65 63  check (string-ec
1390: 20 28 3a 72 61 6e 67 65 20 69 20 31 29 20 23 5c   (:range i 1) #\
13a0: 61 29 20 3d 3e 20 22 61 22 29 0a 28 6d 79 2d 63  a) => "a").(my-c
13b0: 68 65 63 6b 20 28 73 74 72 69 6e 67 2d 65 63 20  heck (string-ec 
13c0: 28 3a 72 61 6e 67 65 20 69 20 32 29 20 23 5c 61  (:range i 2) #\a
13d0: 29 20 3d 3e 20 22 61 61 22 29 0a 0a 28 6d 79 2d  ) => "aa")..(my-
13e0: 63 68 65 63 6b 20 28 73 74 72 69 6e 67 2d 61 70  check (string-ap
13f0: 70 65 6e 64 2d 65 63 20 22 61 62 22 29 20 3d 3e  pend-ec "ab") =>
1400: 20 22 61 62 22 29 0a 28 6d 79 2d 63 68 65 63 6b   "ab").(my-check
1410: 20 28 73 74 72 69 6e 67 2d 61 70 70 65 6e 64 2d   (string-append-
1420: 65 63 20 28 3a 72 61 6e 67 65 20 69 20 30 29 20  ec (:range i 0) 
1430: 22 61 62 22 29 20 3d 3e 20 22 22 29 0a 28 6d 79  "ab") => "").(my
1440: 2d 63 68 65 63 6b 20 28 73 74 72 69 6e 67 2d 61  -check (string-a
1450: 70 70 65 6e 64 2d 65 63 20 28 3a 72 61 6e 67 65  ppend-ec (:range
1460: 20 69 20 31 29 20 22 61 62 22 29 20 3d 3e 20 22   i 1) "ab") => "
1470: 61 62 22 29 0a 28 6d 79 2d 63 68 65 63 6b 20 28  ab").(my-check (
1480: 73 74 72 69 6e 67 2d 61 70 70 65 6e 64 2d 65 63  string-append-ec
1490: 20 28 3a 72 61 6e 67 65 20 69 20 32 29 20 22 61   (:range i 2) "a
14a0: 62 22 29 20 3d 3e 20 22 61 62 61 62 22 29 0a 0a  b") => "abab")..
14b0: 28 6d 79 2d 63 68 65 63 6b 20 28 76 65 63 74 6f  (my-check (vecto
14c0: 72 2d 65 63 20 31 29 20 3d 3e 20 28 76 65 63 74  r-ec 1) => (vect
14d0: 6f 72 20 31 29 29 0a 28 6d 79 2d 63 68 65 63 6b  or 1)).(my-check
14e0: 20 28 76 65 63 74 6f 72 2d 65 63 20 28 3a 72 61   (vector-ec (:ra
14f0: 6e 67 65 20 69 20 30 29 20 69 29 20 3d 3e 20 28  nge i 0) i) => (
1500: 76 65 63 74 6f 72 29 29 0a 28 6d 79 2d 63 68 65  vector)).(my-che
1510: 63 6b 20 28 76 65 63 74 6f 72 2d 65 63 20 28 3a  ck (vector-ec (:
1520: 72 61 6e 67 65 20 69 20 31 29 20 69 29 20 3d 3e  range i 1) i) =>
1530: 20 28 76 65 63 74 6f 72 20 30 29 29 0a 28 6d 79   (vector 0)).(my
1540: 2d 63 68 65 63 6b 20 28 76 65 63 74 6f 72 2d 65  -check (vector-e
1550: 63 20 28 3a 72 61 6e 67 65 20 69 20 32 29 20 69  c (:range i 2) i
1560: 29 20 3d 3e 20 28 76 65 63 74 6f 72 20 30 20 31  ) => (vector 0 1
1570: 29 29 0a 0a 28 6d 79 2d 63 68 65 63 6b 20 28 76  ))..(my-check (v
1580: 65 63 74 6f 72 2d 6f 66 2d 6c 65 6e 67 74 68 2d  ector-of-length-
1590: 65 63 20 31 20 31 29 20 3d 3e 20 28 76 65 63 74  ec 1 1) => (vect
15a0: 6f 72 20 31 29 29 0a 28 6d 79 2d 63 68 65 63 6b  or 1)).(my-check
15b0: 20 28 76 65 63 74 6f 72 2d 6f 66 2d 6c 65 6e 67   (vector-of-leng
15c0: 74 68 2d 65 63 20 30 20 28 3a 72 61 6e 67 65 20  th-ec 0 (:range 
15d0: 69 20 30 29 20 69 29 20 3d 3e 20 28 76 65 63 74  i 0) i) => (vect
15e0: 6f 72 29 29 0a 28 6d 79 2d 63 68 65 63 6b 20 28  or)).(my-check (
15f0: 76 65 63 74 6f 72 2d 6f 66 2d 6c 65 6e 67 74 68  vector-of-length
1600: 2d 65 63 20 31 20 28 3a 72 61 6e 67 65 20 69 20  -ec 1 (:range i 
1610: 31 29 20 69 29 20 3d 3e 20 28 76 65 63 74 6f 72  1) i) => (vector
1620: 20 30 29 29 0a 28 6d 79 2d 63 68 65 63 6b 20 28   0)).(my-check (
1630: 76 65 63 74 6f 72 2d 6f 66 2d 6c 65 6e 67 74 68  vector-of-length
1640: 2d 65 63 20 32 20 28 3a 72 61 6e 67 65 20 69 20  -ec 2 (:range i 
1650: 32 29 20 69 29 20 3d 3e 20 28 76 65 63 74 6f 72  2) i) => (vector
1660: 20 30 20 31 29 29 0a 0a 28 6d 79 2d 63 68 65 63   0 1))..(my-chec
1670: 6b 20 28 73 75 6d 2d 65 63 20 31 29 20 3d 3e 20  k (sum-ec 1) => 
1680: 31 29 0a 28 6d 79 2d 63 68 65 63 6b 20 28 73 75  1).(my-check (su
1690: 6d 2d 65 63 20 28 3a 72 61 6e 67 65 20 69 20 30  m-ec (:range i 0
16a0: 29 20 69 29 20 3d 3e 20 30 29 0a 28 6d 79 2d 63  ) i) => 0).(my-c
16b0: 68 65 63 6b 20 28 73 75 6d 2d 65 63 20 28 3a 72  heck (sum-ec (:r
16c0: 61 6e 67 65 20 69 20 31 29 20 69 29 20 3d 3e 20  ange i 1) i) => 
16d0: 30 29 0a 28 6d 79 2d 63 68 65 63 6b 20 28 73 75  0).(my-check (su
16e0: 6d 2d 65 63 20 28 3a 72 61 6e 67 65 20 69 20 32  m-ec (:range i 2
16f0: 29 20 69 29 20 3d 3e 20 31 29 0a 28 6d 79 2d 63  ) i) => 1).(my-c
1700: 68 65 63 6b 20 28 73 75 6d 2d 65 63 20 28 3a 72  heck (sum-ec (:r
1710: 61 6e 67 65 20 69 20 33 29 20 69 29 20 3d 3e 20  ange i 3) i) => 
1720: 33 29 0a 0a 28 6d 79 2d 63 68 65 63 6b 20 28 70  3)..(my-check (p
1730: 72 6f 64 75 63 74 2d 65 63 20 31 29 20 3d 3e 20  roduct-ec 1) => 
1740: 31 29 0a 28 6d 79 2d 63 68 65 63 6b 20 28 70 72  1).(my-check (pr
1750: 6f 64 75 63 74 2d 65 63 20 28 3a 72 61 6e 67 65  oduct-ec (:range
1760: 20 69 20 31 20 30 29 20 69 29 20 3d 3e 20 31 29   i 1 0) i) => 1)
1770: 0a 28 6d 79 2d 63 68 65 63 6b 20 28 70 72 6f 64  .(my-check (prod
1780: 75 63 74 2d 65 63 20 28 3a 72 61 6e 67 65 20 69  uct-ec (:range i
1790: 20 31 20 31 29 20 69 29 20 3d 3e 20 31 29 0a 28   1 1) i) => 1).(
17a0: 6d 79 2d 63 68 65 63 6b 20 28 70 72 6f 64 75 63  my-check (produc
17b0: 74 2d 65 63 20 28 3a 72 61 6e 67 65 20 69 20 31  t-ec (:range i 1
17c0: 20 32 29 20 69 29 20 3d 3e 20 31 29 0a 28 6d 79   2) i) => 1).(my
17d0: 2d 63 68 65 63 6b 20 28 70 72 6f 64 75 63 74 2d  -check (product-
17e0: 65 63 20 28 3a 72 61 6e 67 65 20 69 20 31 20 33  ec (:range i 1 3
17f0: 29 20 69 29 20 3d 3e 20 32 29 0a 28 6d 79 2d 63  ) i) => 2).(my-c
1800: 68 65 63 6b 20 28 70 72 6f 64 75 63 74 2d 65 63  heck (product-ec
1810: 20 28 3a 72 61 6e 67 65 20 69 20 31 20 34 29 20   (:range i 1 4) 
1820: 69 29 20 3d 3e 20 36 29 0a 0a 28 6d 79 2d 63 68  i) => 6)..(my-ch
1830: 65 63 6b 20 28 6d 69 6e 2d 65 63 20 31 29 20 3d  eck (min-ec 1) =
1840: 3e 20 31 29 0a 28 6d 79 2d 63 68 65 63 6b 20 28  > 1).(my-check (
1850: 6d 69 6e 2d 65 63 20 28 3a 72 61 6e 67 65 20 69  min-ec (:range i
1860: 20 31 29 20 69 29 20 3d 3e 20 30 29 0a 28 6d 79   1) i) => 0).(my
1870: 2d 63 68 65 63 6b 20 28 6d 69 6e 2d 65 63 20 28  -check (min-ec (
1880: 3a 72 61 6e 67 65 20 69 20 32 29 20 69 29 20 3d  :range i 2) i) =
1890: 3e 20 30 29 0a 0a 28 6d 79 2d 63 68 65 63 6b 20  > 0)..(my-check 
18a0: 28 6d 61 78 2d 65 63 20 31 29 20 3d 3e 20 31 29  (max-ec 1) => 1)
18b0: 0a 28 6d 79 2d 63 68 65 63 6b 20 28 6d 61 78 2d  .(my-check (max-
18c0: 65 63 20 28 3a 72 61 6e 67 65 20 69 20 31 29 20  ec (:range i 1) 
18d0: 69 29 20 3d 3e 20 30 29 0a 28 6d 79 2d 63 68 65  i) => 0).(my-che
18e0: 63 6b 20 28 6d 61 78 2d 65 63 20 28 3a 72 61 6e  ck (max-ec (:ran
18f0: 67 65 20 69 20 32 29 20 69 29 20 3d 3e 20 31 29  ge i 2) i) => 1)
1900: 0a 0a 28 6d 79 2d 63 68 65 63 6b 20 28 66 69 72  ..(my-check (fir
1910: 73 74 2d 65 63 20 23 66 20 31 29 20 3d 3e 20 31  st-ec #f 1) => 1
1920: 29 0a 28 6d 79 2d 63 68 65 63 6b 20 28 66 69 72  ).(my-check (fir
1930: 73 74 2d 65 63 20 23 66 20 28 3a 72 61 6e 67 65  st-ec #f (:range
1940: 20 69 20 30 29 20 69 29 20 3d 3e 20 23 66 29 0a   i 0) i) => #f).
1950: 28 6d 79 2d 63 68 65 63 6b 20 28 66 69 72 73 74  (my-check (first
1960: 2d 65 63 20 23 66 20 28 3a 72 61 6e 67 65 20 69  -ec #f (:range i
1970: 20 31 29 20 69 29 20 3d 3e 20 30 29 0a 28 6d 79   1) i) => 0).(my
1980: 2d 63 68 65 63 6b 20 28 66 69 72 73 74 2d 65 63  -check (first-ec
1990: 20 23 66 20 28 3a 72 61 6e 67 65 20 69 20 32 29   #f (:range i 2)
19a0: 20 69 29 20 3d 3e 20 30 29 0a 0a 28 6d 79 2d 63   i) => 0)..(my-c
19b0: 68 65 63 6b 20 0a 20 20 28 6c 65 74 20 28 28 6c  heck .  (let ((l
19c0: 61 73 74 2d 69 20 2d 31 29 29 0a 20 20 20 20 28  ast-i -1)).    (
19d0: 66 69 72 73 74 2d 65 63 20 23 66 20 28 3a 72 61  first-ec #f (:ra
19e0: 6e 67 65 20 69 20 31 30 29 20 28 62 65 67 69 6e  nge i 10) (begin
19f0: 20 28 73 65 74 21 20 6c 61 73 74 2d 69 20 69 29   (set! last-i i)
1a00: 29 20 69 29 0a 20 20 20 20 6c 61 73 74 2d 69 20  ) i).    last-i 
1a10: 29 0a 20 20 3d 3e 20 30 20 29 0a 0a 28 6d 79 2d  ).  => 0 )..(my-
1a20: 63 68 65 63 6b 20 28 6c 61 73 74 2d 65 63 20 23  check (last-ec #
1a30: 66 20 31 29 20 3d 3e 20 31 29 0a 28 6d 79 2d 63  f 1) => 1).(my-c
1a40: 68 65 63 6b 20 28 6c 61 73 74 2d 65 63 20 23 66  heck (last-ec #f
1a50: 20 28 3a 72 61 6e 67 65 20 69 20 30 29 20 69 29   (:range i 0) i)
1a60: 20 3d 3e 20 23 66 29 0a 28 6d 79 2d 63 68 65 63   => #f).(my-chec
1a70: 6b 20 28 6c 61 73 74 2d 65 63 20 23 66 20 28 3a  k (last-ec #f (:
1a80: 72 61 6e 67 65 20 69 20 31 29 20 69 29 20 3d 3e  range i 1) i) =>
1a90: 20 30 29 0a 28 6d 79 2d 63 68 65 63 6b 20 28 6c   0).(my-check (l
1aa0: 61 73 74 2d 65 63 20 23 66 20 28 3a 72 61 6e 67  ast-ec #f (:rang
1ab0: 65 20 69 20 32 29 20 69 29 20 3d 3e 20 31 29 0a  e i 2) i) => 1).
1ac0: 0a 28 6d 79 2d 63 68 65 63 6b 20 28 61 6e 79 3f  .(my-check (any?
1ad0: 2d 65 63 20 23 66 29 20 3d 3e 20 23 66 29 0a 28  -ec #f) => #f).(
1ae0: 6d 79 2d 63 68 65 63 6b 20 28 61 6e 79 3f 2d 65  my-check (any?-e
1af0: 63 20 23 74 29 20 3d 3e 20 23 74 29 0a 28 6d 79  c #t) => #t).(my
1b00: 2d 63 68 65 63 6b 20 28 61 6e 79 3f 2d 65 63 20  -check (any?-ec 
1b10: 28 3a 72 61 6e 67 65 20 69 20 32 20 32 29 20 28  (:range i 2 2) (
1b20: 65 76 65 6e 3f 20 69 29 29 20 3d 3e 20 23 66 29  even? i)) => #f)
1b30: 0a 28 6d 79 2d 63 68 65 63 6b 20 28 61 6e 79 3f  .(my-check (any?
1b40: 2d 65 63 20 28 3a 72 61 6e 67 65 20 69 20 32 20  -ec (:range i 2 
1b50: 33 29 20 28 65 76 65 6e 3f 20 69 29 29 20 3d 3e  3) (even? i)) =>
1b60: 20 23 74 29 0a 0a 28 6d 79 2d 63 68 65 63 6b 20   #t)..(my-check 
1b70: 28 65 76 65 72 79 3f 2d 65 63 20 23 66 29 20 3d  (every?-ec #f) =
1b80: 3e 20 23 66 29 0a 28 6d 79 2d 63 68 65 63 6b 20  > #f).(my-check 
1b90: 28 65 76 65 72 79 3f 2d 65 63 20 23 74 29 20 3d  (every?-ec #t) =
1ba0: 3e 20 23 74 29 0a 28 6d 79 2d 63 68 65 63 6b 20  > #t).(my-check 
1bb0: 28 65 76 65 72 79 3f 2d 65 63 20 28 3a 72 61 6e  (every?-ec (:ran
1bc0: 67 65 20 69 20 32 20 32 29 20 28 65 76 65 6e 3f  ge i 2 2) (even?
1bd0: 20 69 29 29 20 3d 3e 20 23 74 29 0a 28 6d 79 2d   i)) => #t).(my-
1be0: 63 68 65 63 6b 20 28 65 76 65 72 79 3f 2d 65 63  check (every?-ec
1bf0: 20 28 3a 72 61 6e 67 65 20 69 20 32 20 33 29 20   (:range i 2 3) 
1c00: 28 65 76 65 6e 3f 20 69 29 29 20 3d 3e 20 23 74  (even? i)) => #t
1c10: 29 0a 28 6d 79 2d 63 68 65 63 6b 20 28 65 76 65  ).(my-check (eve
1c20: 72 79 3f 2d 65 63 20 28 3a 72 61 6e 67 65 20 69  ry?-ec (:range i
1c30: 20 32 20 34 29 20 28 65 76 65 6e 3f 20 69 29 29   2 4) (even? i))
1c40: 20 3d 3e 20 23 66 29 0a 0a 28 6d 79 2d 63 68 65   => #f)..(my-che
1c50: 63 6b 20 0a 20 28 6c 65 74 20 28 28 73 75 6d 2d  ck . (let ((sum-
1c60: 73 71 72 20 28 6c 61 6d 62 64 61 20 28 78 20 72  sqr (lambda (x r
1c70: 65 73 75 6c 74 29 20 28 2b 20 72 65 73 75 6c 74  esult) (+ result
1c80: 20 28 2a 20 78 20 78 29 29 29 29 29 0a 20 20 20   (* x x))))).   
1c90: 28 66 6f 6c 64 2d 65 63 20 30 20 28 3a 72 61 6e  (fold-ec 0 (:ran
1ca0: 67 65 20 69 20 31 30 29 20 69 20 73 75 6d 2d 73  ge i 10) i sum-s
1cb0: 71 72 29 20 29 0a 20 3d 3e 20 32 38 35 20 29 0a  qr) ). => 285 ).
1cc0: 0a 28 6d 79 2d 63 68 65 63 6b 20 0a 20 28 6c 65  .(my-check . (le
1cd0: 74 20 28 28 6d 69 6e 75 73 2d 31 20 28 6c 61 6d  t ((minus-1 (lam
1ce0: 62 64 61 20 28 78 29 20 28 2d 20 78 20 31 29 29  bda (x) (- x 1))
1cf0: 29 0a 20 20 20 20 20 20 20 28 73 75 6d 2d 73 71  ).       (sum-sq
1d00: 72 20 28 6c 61 6d 62 64 61 20 28 78 20 72 65 73  r (lambda (x res
1d10: 75 6c 74 29 20 28 2b 20 72 65 73 75 6c 74 20 28  ult) (+ result (
1d20: 2a 20 78 20 78 29 29 29 29 29 0a 20 20 20 28 66  * x x))))).   (f
1d30: 6f 6c 64 33 2d 65 63 20 28 65 72 72 6f 72 20 22  old3-ec (error "
1d40: 77 72 6f 6e 67 22 29 20 28 3a 72 61 6e 67 65 20  wrong") (:range 
1d50: 69 20 31 30 29 20 69 20 6d 69 6e 75 73 2d 31 20  i 10) i minus-1 
1d60: 73 75 6d 2d 73 71 72 29 20 29 0a 20 3d 3e 20 32  sum-sqr) ). => 2
1d70: 38 34 20 29 0a 0a 28 6d 79 2d 63 68 65 63 6b 20  84 )..(my-check 
1d80: 0a 20 28 66 6f 6c 64 33 2d 65 63 20 27 69 6e 66  . (fold3-ec 'inf
1d90: 69 6e 69 74 79 20 28 3a 72 61 6e 67 65 20 69 20  inity (:range i 
1da0: 30 29 20 69 20 6d 69 6e 20 6d 69 6e 29 0a 20 3d  0) i min min). =
1db0: 3e 20 27 69 6e 66 69 6e 69 74 79 20 29 0a 0a 0a  > 'infinity )...
1dc0: 3b 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ; ==============
1dd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1de0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1df0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1e00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 20 54  ============.; T
1e10: 79 70 65 64 20 67 65 6e 65 72 61 74 6f 72 73 0a  yped generators.
1e20: 3b 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ; ==============
1e30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1e40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1e50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1e60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 6d  ============..(m
1e70: 79 2d 63 68 65 63 6b 20 28 6c 69 73 74 2d 65 63  y-check (list-ec
1e80: 20 28 3a 6c 69 73 74 20 78 20 27 28 29 29 20 78   (:list x '()) x
1e90: 29 20 3d 3e 20 27 28 29 29 0a 28 6d 79 2d 63 68  ) => '()).(my-ch
1ea0: 65 63 6b 20 28 6c 69 73 74 2d 65 63 20 28 3a 6c  eck (list-ec (:l
1eb0: 69 73 74 20 78 20 27 28 31 29 29 20 78 29 20 3d  ist x '(1)) x) =
1ec0: 3e 20 27 28 31 29 29 0a 28 6d 79 2d 63 68 65 63  > '(1)).(my-chec
1ed0: 6b 20 28 6c 69 73 74 2d 65 63 20 28 3a 6c 69 73  k (list-ec (:lis
1ee0: 74 20 78 20 27 28 31 20 32 20 33 29 29 20 78 29  t x '(1 2 3)) x)
1ef0: 20 3d 3e 20 27 28 31 20 32 20 33 29 29 0a 28 6d   => '(1 2 3)).(m
1f00: 79 2d 63 68 65 63 6b 20 28 6c 69 73 74 2d 65 63  y-check (list-ec
1f10: 20 28 3a 6c 69 73 74 20 78 20 27 28 31 29 20 27   (:list x '(1) '
1f20: 28 32 29 29 20 78 29 20 3d 3e 20 27 28 31 20 32  (2)) x) => '(1 2
1f30: 29 29 0a 28 6d 79 2d 63 68 65 63 6b 20 28 6c 69  )).(my-check (li
1f40: 73 74 2d 65 63 20 28 3a 6c 69 73 74 20 78 20 27  st-ec (:list x '
1f50: 28 31 29 20 27 28 32 29 20 27 28 33 29 29 20 78  (1) '(2) '(3)) x
1f60: 29 20 3d 3e 20 27 28 31 20 32 20 33 29 29 0a 0a  ) => '(1 2 3))..
1f70: 28 6d 79 2d 63 68 65 63 6b 20 28 6c 69 73 74 2d  (my-check (list-
1f80: 65 63 20 28 3a 73 74 72 69 6e 67 20 63 20 22 22  ec (:string c ""
1f90: 29 20 63 29 20 3d 3e 20 27 28 29 29 0a 28 6d 79  ) c) => '()).(my
1fa0: 2d 63 68 65 63 6b 20 28 6c 69 73 74 2d 65 63 20  -check (list-ec 
1fb0: 28 3a 73 74 72 69 6e 67 20 63 20 22 31 22 29 20  (:string c "1") 
1fc0: 63 29 20 3d 3e 20 27 28 23 5c 31 29 29 0a 28 6d  c) => '(#\1)).(m
1fd0: 79 2d 63 68 65 63 6b 20 28 6c 69 73 74 2d 65 63  y-check (list-ec
1fe0: 20 28 3a 73 74 72 69 6e 67 20 63 20 22 31 32 33   (:string c "123
1ff0: 22 29 20 63 29 20 3d 3e 20 27 28 23 5c 31 20 23  ") c) => '(#\1 #
2000: 5c 32 20 23 5c 33 29 29 0a 28 6d 79 2d 63 68 65  \2 #\3)).(my-che
2010: 63 6b 20 28 6c 69 73 74 2d 65 63 20 28 3a 73 74  ck (list-ec (:st
2020: 72 69 6e 67 20 63 20 22 31 22 20 22 32 22 29 20  ring c "1" "2") 
2030: 63 29 20 3d 3e 20 27 28 23 5c 31 20 23 5c 32 29  c) => '(#\1 #\2)
2040: 29 0a 28 6d 79 2d 63 68 65 63 6b 20 28 6c 69 73  ).(my-check (lis
2050: 74 2d 65 63 20 28 3a 73 74 72 69 6e 67 20 63 20  t-ec (:string c 
2060: 22 31 22 20 22 32 22 20 22 33 22 29 20 63 29 20  "1" "2" "3") c) 
2070: 3d 3e 20 27 28 23 5c 31 20 23 5c 32 20 23 5c 33  => '(#\1 #\2 #\3
2080: 29 29 0a 0a 28 6d 79 2d 63 68 65 63 6b 20 28 6c  ))..(my-check (l
2090: 69 73 74 2d 65 63 20 28 3a 76 65 63 74 6f 72 20  ist-ec (:vector 
20a0: 78 20 28 76 65 63 74 6f 72 29 29 20 78 29 20 3d  x (vector)) x) =
20b0: 3e 20 27 28 29 29 0a 28 6d 79 2d 63 68 65 63 6b  > '()).(my-check
20c0: 20 28 6c 69 73 74 2d 65 63 20 28 3a 76 65 63 74   (list-ec (:vect
20d0: 6f 72 20 78 20 28 76 65 63 74 6f 72 20 31 29 29  or x (vector 1))
20e0: 20 78 29 20 3d 3e 20 27 28 31 29 29 0a 28 6d 79   x) => '(1)).(my
20f0: 2d 63 68 65 63 6b 20 28 6c 69 73 74 2d 65 63 20  -check (list-ec 
2100: 28 3a 76 65 63 74 6f 72 20 78 20 28 76 65 63 74  (:vector x (vect
2110: 6f 72 20 31 20 32 20 33 29 29 20 78 29 20 3d 3e  or 1 2 3)) x) =>
2120: 20 27 28 31 20 32 20 33 29 29 0a 28 6d 79 2d 63   '(1 2 3)).(my-c
2130: 68 65 63 6b 20 28 6c 69 73 74 2d 65 63 20 28 3a  heck (list-ec (:
2140: 76 65 63 74 6f 72 20 78 20 28 76 65 63 74 6f 72  vector x (vector
2150: 20 31 29 20 28 76 65 63 74 6f 72 20 32 29 29 20   1) (vector 2)) 
2160: 78 29 20 3d 3e 20 27 28 31 20 32 29 29 0a 28 6d  x) => '(1 2)).(m
2170: 79 2d 63 68 65 63 6b 20 0a 20 28 6c 69 73 74 2d  y-check . (list-
2180: 65 63 20 28 3a 76 65 63 74 6f 72 20 78 20 28 76  ec (:vector x (v
2190: 65 63 74 6f 72 20 31 29 20 28 76 65 63 74 6f 72  ector 1) (vector
21a0: 20 32 29 20 28 76 65 63 74 6f 72 20 33 29 29 20   2) (vector 3)) 
21b0: 78 29 0a 20 3d 3e 20 27 28 31 20 32 20 33 29 29  x). => '(1 2 3))
21c0: 0a 0a 28 6d 79 2d 63 68 65 63 6b 20 28 6c 69 73  ..(my-check (lis
21d0: 74 2d 65 63 20 28 3a 72 61 6e 67 65 20 78 20 2d  t-ec (:range x -
21e0: 32 29 20 78 29 20 3d 3e 20 27 28 29 29 0a 28 6d  2) x) => '()).(m
21f0: 79 2d 63 68 65 63 6b 20 28 6c 69 73 74 2d 65 63  y-check (list-ec
2200: 20 28 3a 72 61 6e 67 65 20 78 20 2d 31 29 20 78   (:range x -1) x
2210: 29 20 3d 3e 20 27 28 29 29 0a 28 6d 79 2d 63 68  ) => '()).(my-ch
2220: 65 63 6b 20 28 6c 69 73 74 2d 65 63 20 28 3a 72  eck (list-ec (:r
2230: 61 6e 67 65 20 78 20 20 30 29 20 78 29 20 3d 3e  ange x  0) x) =>
2240: 20 27 28 29 29 0a 28 6d 79 2d 63 68 65 63 6b 20   '()).(my-check 
2250: 28 6c 69 73 74 2d 65 63 20 28 3a 72 61 6e 67 65  (list-ec (:range
2260: 20 78 20 20 31 29 20 78 29 20 3d 3e 20 27 28 30   x  1) x) => '(0
2270: 29 29 0a 28 6d 79 2d 63 68 65 63 6b 20 28 6c 69  )).(my-check (li
2280: 73 74 2d 65 63 20 28 3a 72 61 6e 67 65 20 78 20  st-ec (:range x 
2290: 20 32 29 20 78 29 20 3d 3e 20 27 28 30 20 31 29   2) x) => '(0 1)
22a0: 29 0a 0a 28 6d 79 2d 63 68 65 63 6b 20 28 6c 69  )..(my-check (li
22b0: 73 74 2d 65 63 20 28 3a 72 61 6e 67 65 20 78 20  st-ec (:range x 
22c0: 20 30 20 20 33 29 20 78 29 20 3d 3e 20 27 28 30   0  3) x) => '(0
22d0: 20 31 20 32 29 29 0a 28 6d 79 2d 63 68 65 63 6b   1 2)).(my-check
22e0: 20 28 6c 69 73 74 2d 65 63 20 28 3a 72 61 6e 67   (list-ec (:rang
22f0: 65 20 78 20 20 31 20 20 33 29 20 78 29 20 3d 3e  e x  1  3) x) =>
2300: 20 27 28 31 20 32 29 29 0a 28 6d 79 2d 63 68 65   '(1 2)).(my-che
2310: 63 6b 20 28 6c 69 73 74 2d 65 63 20 28 3a 72 61  ck (list-ec (:ra
2320: 6e 67 65 20 78 20 2d 32 20 2d 31 29 20 78 29 20  nge x -2 -1) x) 
2330: 3d 3e 20 27 28 2d 32 29 29 0a 28 6d 79 2d 63 68  => '(-2)).(my-ch
2340: 65 63 6b 20 28 6c 69 73 74 2d 65 63 20 28 3a 72  eck (list-ec (:r
2350: 61 6e 67 65 20 78 20 2d 32 20 2d 32 29 20 78 29  ange x -2 -2) x)
2360: 20 3d 3e 20 27 28 29 29 0a 0a 28 6d 79 2d 63 68   => '())..(my-ch
2370: 65 63 6b 20 28 6c 69 73 74 2d 65 63 20 28 3a 72  eck (list-ec (:r
2380: 61 6e 67 65 20 78 20 31 20 35 20 20 32 29 20 78  ange x 1 5  2) x
2390: 29 20 3d 3e 20 27 28 31 20 33 29 29 0a 28 6d 79  ) => '(1 3)).(my
23a0: 2d 63 68 65 63 6b 20 28 6c 69 73 74 2d 65 63 20  -check (list-ec 
23b0: 28 3a 72 61 6e 67 65 20 78 20 31 20 36 20 20 32  (:range x 1 6  2
23c0: 29 20 78 29 20 3d 3e 20 27 28 31 20 33 20 35 29  ) x) => '(1 3 5)
23d0: 29 0a 28 6d 79 2d 63 68 65 63 6b 20 28 6c 69 73  ).(my-check (lis
23e0: 74 2d 65 63 20 28 3a 72 61 6e 67 65 20 78 20 35  t-ec (:range x 5
23f0: 20 31 20 2d 32 29 20 78 29 20 3d 3e 20 27 28 35   1 -2) x) => '(5
2400: 20 33 29 29 0a 28 6d 79 2d 63 68 65 63 6b 20 28   3)).(my-check (
2410: 6c 69 73 74 2d 65 63 20 28 3a 72 61 6e 67 65 20  list-ec (:range 
2420: 78 20 36 20 31 20 2d 32 29 20 78 29 20 3d 3e 20  x 6 1 -2) x) => 
2430: 27 28 36 20 34 20 32 29 29 0a 0a 28 6d 79 2d 63  '(6 4 2))..(my-c
2440: 68 65 63 6b 20 28 6c 69 73 74 2d 65 63 20 28 3a  heck (list-ec (:
2450: 72 65 61 6c 2d 72 61 6e 67 65 20 78 20 30 2e 30  real-range x 0.0
2460: 20 33 2e 30 29 20 20 20 20 20 78 29 20 3d 3e 20   3.0)     x) => 
2470: 27 28 30 2e 20 31 2e 20 32 2e 29 29 0a 28 6d 79  '(0. 1. 2.)).(my
2480: 2d 63 68 65 63 6b 20 28 6c 69 73 74 2d 65 63 20  -check (list-ec 
2490: 28 3a 72 65 61 6c 2d 72 61 6e 67 65 20 78 20 30  (:real-range x 0
24a0: 20 20 20 33 2e 30 29 20 20 20 20 20 78 29 20 3d     3.0)     x) =
24b0: 3e 20 27 28 30 2e 20 31 2e 20 32 2e 29 29 0a 28  > '(0. 1. 2.)).(
24c0: 6d 79 2d 63 68 65 63 6b 20 28 6c 69 73 74 2d 65  my-check (list-e
24d0: 63 20 28 3a 72 65 61 6c 2d 72 61 6e 67 65 20 78  c (:real-range x
24e0: 20 30 20 20 20 33 20 20 20 31 2e 30 29 20 78 29   0   3   1.0) x)
24f0: 20 3d 3e 20 27 28 30 2e 20 31 2e 20 32 2e 29 29   => '(0. 1. 2.))
2500: 0a 0a 28 6d 79 2d 63 68 65 63 6b 20 0a 20 28 73  ..(my-check . (s
2510: 74 72 69 6e 67 2d 65 63 20 28 3a 63 68 61 72 2d  tring-ec (:char-
2520: 72 61 6e 67 65 20 63 20 23 5c 61 20 23 5c 7a 29  range c #\a #\z)
2530: 20 63 29 20 0a 20 3d 3e 20 22 61 62 63 64 65 66   c) . => "abcdef
2540: 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76  ghijklmnopqrstuv
2550: 77 78 79 7a 22 20 29 0a 0a 28 6d 79 2d 63 68 65  wxyz" )..(my-che
2560: 63 6b 20 0a 20 28 62 65 67 69 6e 0a 20 20 20 28  ck . (begin.   (
2570: 6c 65 74 20 28 28 66 20 28 6d 79 2d 6f 70 65 6e  let ((f (my-open
2580: 2d 6f 75 74 70 75 74 2d 66 69 6c 65 20 22 74 6d  -output-file "tm
2590: 70 31 22 29 29 29 0a 20 20 20 20 20 28 64 6f 2d  p1"))).     (do-
25a0: 65 63 20 28 3a 72 61 6e 67 65 20 6e 20 31 30 29  ec (:range n 10)
25b0: 20 28 62 65 67 69 6e 20 28 77 72 69 74 65 20 6e   (begin (write n
25c0: 20 66 29 20 28 6e 65 77 6c 69 6e 65 20 66 29 29   f) (newline f))
25d0: 29 0a 20 20 20 20 20 28 63 6c 6f 73 65 2d 6f 75  ).     (close-ou
25e0: 74 70 75 74 2d 70 6f 72 74 20 66 29 29 0a 20 20  tput-port f)).  
25f0: 20 28 6d 79 2d 63 61 6c 6c 2d 77 69 74 68 2d 69   (my-call-with-i
2600: 6e 70 75 74 2d 66 69 6c 65 20 22 74 6d 70 31 22  nput-file "tmp1"
2610: 0a 20 20 20 20 28 6c 61 6d 62 64 61 20 28 70 6f  .    (lambda (po
2620: 72 74 29 20 28 6c 69 73 74 2d 65 63 20 28 3a 70  rt) (list-ec (:p
2630: 6f 72 74 20 78 20 70 6f 72 74 20 72 65 61 64 29  ort x port read)
2640: 20 78 29 29 20 29 29 0a 20 3d 3e 20 28 6c 69 73   x)) )). => (lis
2650: 74 2d 65 63 20 28 3a 72 61 6e 67 65 20 6e 20 31  t-ec (:range n 1
2660: 30 29 20 6e 29 20 29 0a 0a 28 6d 79 2d 63 68 65  0) n) )..(my-che
2670: 63 6b 20 0a 20 28 62 65 67 69 6e 0a 20 20 20 28  ck . (begin.   (
2680: 6c 65 74 20 28 28 66 20 28 6d 79 2d 6f 70 65 6e  let ((f (my-open
2690: 2d 6f 75 74 70 75 74 2d 66 69 6c 65 20 22 74 6d  -output-file "tm
26a0: 70 31 22 29 29 29 0a 20 20 20 20 20 28 64 6f 2d  p1"))).     (do-
26b0: 65 63 20 28 3a 72 61 6e 67 65 20 6e 20 31 30 29  ec (:range n 10)
26c0: 20 28 62 65 67 69 6e 20 28 77 72 69 74 65 20 6e   (begin (write n
26d0: 20 66 29 20 28 6e 65 77 6c 69 6e 65 20 66 29 29   f) (newline f))
26e0: 29 0a 20 20 20 20 20 28 63 6c 6f 73 65 2d 6f 75  ).     (close-ou
26f0: 74 70 75 74 2d 70 6f 72 74 20 66 29 29 0a 20 20  tput-port f)).  
2700: 20 28 6d 79 2d 63 61 6c 6c 2d 77 69 74 68 2d 69   (my-call-with-i
2710: 6e 70 75 74 2d 66 69 6c 65 20 22 74 6d 70 31 22  nput-file "tmp1"
2720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2730: 20 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28   .     (lambda (
2740: 70 6f 72 74 29 20 28 6c 69 73 74 2d 65 63 20 28  port) (list-ec (
2750: 3a 70 6f 72 74 20 78 20 70 6f 72 74 29 20 78 29  :port x port) x)
2760: 29 20 29 29 0a 20 3d 3e 20 28 6c 69 73 74 2d 65  ) )). => (list-e
2770: 63 20 28 3a 72 61 6e 67 65 20 6e 20 31 30 29 20  c (:range n 10) 
2780: 6e 29 20 29 0a 0a 0a 3b 20 3d 3d 3d 3d 3d 3d 3d  n) )...; =======
2790: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
27a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
27b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
27c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
27d0: 3d 3d 3d 0a 3b 20 54 68 65 20 73 70 65 63 69 61  ===.; The specia
27e0: 6c 20 67 65 6e 65 72 61 74 6f 72 73 20 3a 64 6f  l generators :do
27f0: 20 3a 6c 65 74 20 3a 70 61 72 61 6c 6c 65 6c 20   :let :parallel 
2800: 3a 77 68 69 6c 65 20 3a 75 6e 74 69 6c 0a 3b 20  :while :until.; 
2810: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2820: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2830: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2840: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
2850: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 6d 79 2d  ==========..(my-
2860: 63 68 65 63 6b 20 28 6c 69 73 74 2d 65 63 20 28  check (list-ec (
2870: 3a 64 6f 20 28 28 69 20 30 29 29 20 28 3c 20 69  :do ((i 0)) (< i
2880: 20 34 29 20 28 28 2b 20 69 20 31 29 29 29 20 69   4) ((+ i 1))) i
2890: 29 20 3d 3e 20 27 28 30 20 31 20 32 20 33 29 29  ) => '(0 1 2 3))
28a0: 0a 0a 28 6d 79 2d 63 68 65 63 6b 20 0a 20 28 6c  ..(my-check . (l
28b0: 69 73 74 2d 65 63 20 0a 20 20 28 3a 64 6f 20 28  ist-ec .  (:do (
28c0: 6c 65 74 20 28 28 78 20 27 78 29 29 29 0a 20 20  let ((x 'x))).  
28d0: 20 20 20 20 20 28 28 69 20 30 29 29 20 0a 20 20       ((i 0)) .  
28e0: 20 20 20 20 20 28 3c 20 69 20 34 29 20 0a 20 20       (< i 4) .  
28f0: 20 20 20 20 20 28 6c 65 74 20 28 28 6a 20 28 2d       (let ((j (-
2900: 20 31 30 20 69 29 29 29 29 0a 20 20 20 20 20 20   10 i)))).      
2910: 20 23 74 0a 20 20 20 20 20 20 20 28 28 2b 20 69   #t.       ((+ i
2920: 20 31 29 29 20 29 0a 20 20 6a 20 29 0a 20 3d 3e   1)) ).  j ). =>
2930: 20 27 28 31 30 20 39 20 38 20 37 29 20 29 0a 0a   '(10 9 8 7) )..
2940: 28 6d 79 2d 63 68 65 63 6b 20 28 6c 69 73 74 2d  (my-check (list-
2950: 65 63 20 28 3a 6c 65 74 20 78 20 31 29 20 78 29  ec (:let x 1) x)
2960: 20 3d 3e 20 27 28 31 29 29 0a 28 6d 79 2d 63 68   => '(1)).(my-ch
2970: 65 63 6b 20 28 6c 69 73 74 2d 65 63 20 28 3a 6c  eck (list-ec (:l
2980: 65 74 20 78 20 31 29 20 28 3a 6c 65 74 20 79 20  et x 1) (:let y 
2990: 28 2b 20 78 20 31 29 29 20 79 29 20 3d 3e 20 27  (+ x 1)) y) => '
29a0: 28 32 29 29 0a 28 6d 79 2d 63 68 65 63 6b 20 28  (2)).(my-check (
29b0: 6c 69 73 74 2d 65 63 20 28 3a 6c 65 74 20 78 20  list-ec (:let x 
29c0: 31 29 20 28 3a 6c 65 74 20 78 20 28 2b 20 78 20  1) (:let x (+ x 
29d0: 31 29 29 20 78 29 20 3d 3e 20 27 28 32 29 29 0a  1)) x) => '(2)).
29e0: 0a 28 6d 79 2d 63 68 65 63 6b 20 0a 20 28 6c 69  .(my-check . (li
29f0: 73 74 2d 65 63 20 28 3a 70 61 72 61 6c 6c 65 6c  st-ec (:parallel
2a00: 20 28 3a 72 61 6e 67 65 20 69 20 31 20 31 30 29   (:range i 1 10)
2a10: 20 28 3a 6c 69 73 74 20 78 20 27 28 61 20 62 20   (:list x '(a b 
2a20: 63 29 29 29 20 28 6c 69 73 74 20 69 20 78 29 29  c))) (list i x))
2a30: 0a 20 3d 3e 20 27 28 28 31 20 61 29 20 28 32 20  . => '((1 a) (2 
2a40: 62 29 20 28 33 20 63 29 29 20 29 0a 0a 28 6d 79  b) (3 c)) )..(my
2a50: 2d 63 68 65 63 6b 20 0a 20 28 6c 69 73 74 2d 65  -check . (list-e
2a60: 63 20 28 3a 77 68 69 6c 65 20 28 3a 72 61 6e 67  c (:while (:rang
2a70: 65 20 69 20 31 20 31 30 29 20 28 3c 20 69 20 35  e i 1 10) (< i 5
2a80: 29 29 20 69 29 0a 20 3d 3e 20 27 28 31 20 32 20  )) i). => '(1 2 
2a90: 33 20 34 29 20 29 0a 0a 28 6d 79 2d 63 68 65 63  3 4) )..(my-chec
2aa0: 6b 20 0a 20 28 6c 69 73 74 2d 65 63 20 28 3a 75  k . (list-ec (:u
2ab0: 6e 74 69 6c 20 28 3a 72 61 6e 67 65 20 69 20 31  ntil (:range i 1
2ac0: 20 31 30 29 20 28 3e 3d 20 69 20 35 29 29 20 69   10) (>= i 5)) i
2ad0: 29 0a 20 3d 3e 20 27 28 31 20 32 20 33 20 34 20  ). => '(1 2 3 4 
2ae0: 35 29 20 29 0a 0a 3b 20 77 69 74 68 20 67 65 6e  5) )..; with gen
2af0: 65 72 61 74 6f 72 20 74 68 61 74 20 6d 69 67 68  erator that migh
2b00: 74 20 75 73 65 20 69 6e 6e 65 72 20 62 69 6e 64  t use inner bind
2b10: 69 6e 67 73 0a 0a 28 6d 79 2d 63 68 65 63 6b 0a  ings..(my-check.
2b20: 20 28 6c 69 73 74 2d 65 63 20 28 3a 77 68 69 6c   (list-ec (:whil
2b30: 65 20 28 3a 6c 69 73 74 20 69 20 27 28 31 20 32  e (:list i '(1 2
2b40: 20 33 20 34 20 35 20 36 20 37 20 38 20 39 29 29   3 4 5 6 7 8 9))
2b50: 20 28 3c 20 69 20 35 29 29 20 69 29 0a 20 3d 3e   (< i 5)) i). =>
2b60: 20 27 28 31 20 32 20 33 20 34 29 20 29 0a 3b 20   '(1 2 3 4) ).; 
2b70: 57 61 73 20 62 72 6f 6b 65 6e 20 69 6e 20 6f 72  Was broken in or
2b80: 69 67 69 6e 61 6c 20 72 65 66 65 72 65 6e 63 65  iginal reference
2b90: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
2ba0: 61 73 20 70 6f 69 6e 74 65 64 0a 3b 20 6f 75 74  as pointed.; out
2bb0: 20 62 79 20 73 75 6e 6e 61 6e 40 68 61 6e 64 67   by sunnan@handg
2bc0: 72 61 6e 61 74 2e 6f 72 67 20 6f 6e 20 32 34 2d  ranat.org on 24-
2bd0: 41 70 72 2d 32 30 30 35 20 63 6f 6d 70 2e 6c 61  Apr-2005 comp.la
2be0: 6e 67 2e 73 63 68 65 6d 65 2e 0a 3b 20 52 65 66  ng.scheme..; Ref
2bf0: 65 72 20 74 6f 20 68 74 74 70 3a 2f 2f 67 72 6f  er to http://gro
2c00: 75 70 73 2d 62 65 74 61 2e 67 6f 6f 67 6c 65 2e  ups-beta.google.
2c10: 63 6f 6d 2f 67 72 6f 75 70 2f 63 6f 6d 70 2e 6c  com/group/comp.l
2c20: 61 6e 67 2e 73 63 68 65 6d 65 2f 0a 3b 20 62 72  ang.scheme/.; br
2c30: 6f 77 73 65 5f 74 68 72 65 61 64 2f 74 68 72 65  owse_thread/thre
2c40: 61 64 2f 66 35 33 33 33 32 32 30 65 61 65 65 65  ad/f5333220eaeee
2c50: 64 36 36 2f 37 35 39 32 36 36 33 34 63 66 33 31  d66/75926634cf31
2c60: 63 30 33 38 23 37 35 39 32 36 36 33 34 63 66 33  c038#75926634cf3
2c70: 31 63 30 33 38 0a 0a 28 6d 79 2d 63 68 65 63 6b  1c038..(my-check
2c80: 20 0a 20 28 6c 69 73 74 2d 65 63 20 28 3a 75 6e   . (list-ec (:un
2c90: 74 69 6c 20 28 3a 6c 69 73 74 20 69 20 27 28 31  til (:list i '(1
2ca0: 20 32 20 33 20 34 20 35 20 36 20 37 20 38 20 39   2 3 4 5 6 7 8 9
2cb0: 29 29 20 28 3e 3d 20 69 20 35 29 29 20 69 29 0a  )) (>= i 5)) i).
2cc0: 20 3d 3e 20 27 28 31 20 32 20 33 20 34 20 35 29   => '(1 2 3 4 5)
2cd0: 20 29 0a 0a 3b 20 63 6f 6d 62 69 6e 65 20 3a 77   )..; combine :w
2ce0: 68 69 6c 65 2f 3a 75 6e 74 69 6c 20 61 6e 64 20  hile/:until and 
2cf0: 3a 70 61 72 61 6c 6c 65 6c 0a 0a 28 6d 79 2d 63  :parallel..(my-c
2d00: 68 65 63 6b 0a 20 28 6c 69 73 74 2d 65 63 20 28  heck. (list-ec (
2d10: 3a 77 68 69 6c 65 20 28 3a 70 61 72 61 6c 6c 65  :while (:paralle
2d20: 6c 20 28 3a 72 61 6e 67 65 20 69 20 31 20 31 30  l (:range i 1 10
2d30: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
2d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
2d50: 3a 6c 69 73 74 20 6a 20 27 28 31 20 32 20 33 20  :list j '(1 2 3 
2d60: 34 20 35 20 36 20 37 20 38 20 39 29 29 29 0a 20  4 5 6 7 8 9))). 
2d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d80: 20 28 3c 20 69 20 35 29 29 0a 20 20 20 20 20 20   (< i 5)).      
2d90: 20 20 20 20 28 6c 69 73 74 20 69 20 6a 29 29 0a      (list i j)).
2da0: 20 3d 3e 20 27 28 28 31 20 31 29 20 28 32 20 32   => '((1 1) (2 2
2db0: 29 20 28 33 20 33 29 20 28 34 20 34 29 29 29 0a  ) (3 3) (4 4))).
2dc0: 0a 28 6d 79 2d 63 68 65 63 6b 0a 20 28 6c 69 73  .(my-check. (lis
2dd0: 74 2d 65 63 20 28 3a 75 6e 74 69 6c 20 28 3a 70  t-ec (:until (:p
2de0: 61 72 61 6c 6c 65 6c 20 28 3a 72 61 6e 67 65 20  arallel (:range 
2df0: 69 20 31 20 31 30 29 0a 20 20 20 20 20 20 20 20  i 1 10).        
2e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e10: 20 20 20 20 20 28 3a 6c 69 73 74 20 6a 20 27 28       (:list j '(
2e20: 31 20 32 20 33 20 34 20 35 20 36 20 37 20 38 20  1 2 3 4 5 6 7 8 
2e30: 39 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20  9))).           
2e40: 20 20 20 20 20 20 20 28 3e 3d 20 69 20 35 29 29         (>= i 5))
2e50: 0a 20 20 20 20 20 20 20 20 20 20 28 6c 69 73 74  .          (list
2e60: 20 69 20 6a 29 29 0a 20 3d 3e 20 27 28 28 31 20   i j)). => '((1 
2e70: 31 29 20 28 32 20 32 29 20 28 33 20 33 29 20 28  1) (2 2) (3 3) (
2e80: 34 20 34 29 20 28 35 20 35 29 29 29 0a 0a 3b 20  4 4) (5 5)))..; 
2e90: 63 68 65 63 6b 20 74 68 61 74 20 3a 77 68 69 6c  check that :whil
2ea0: 65 2f 3a 75 6e 74 69 6c 20 72 65 61 6c 6c 79 20  e/:until really 
2eb0: 73 74 6f 70 20 74 68 65 20 67 65 6e 65 72 61 74  stop the generat
2ec0: 6f 72 0a 0a 28 6d 79 2d 63 68 65 63 6b 0a 20 28  or..(my-check. (
2ed0: 6c 65 74 20 28 28 6e 20 30 29 29 0a 20 20 20 28  let ((n 0)).   (
2ee0: 64 6f 2d 65 63 20 28 3a 77 68 69 6c 65 20 28 3a  do-ec (:while (:
2ef0: 72 61 6e 67 65 20 69 20 31 20 31 30 29 20 28 62  range i 1 10) (b
2f00: 65 67 69 6e 20 28 73 65 74 21 20 6e 20 28 2b 20  egin (set! n (+ 
2f10: 6e 20 31 29 29 20 28 3c 20 69 20 35 29 29 29 0a  n 1)) (< i 5))).
2f20: 20 20 20 20 20 20 20 20 20 20 28 69 66 20 23 66            (if #f
2f30: 20 23 66 29 29 0a 20 20 20 6e 29 0a 20 3d 3e 20   #f)).   n). => 
2f40: 35 29 0a 0a 28 6d 79 2d 63 68 65 63 6b 0a 20 28  5)..(my-check. (
2f50: 6c 65 74 20 28 28 6e 20 30 29 29 0a 20 20 20 28  let ((n 0)).   (
2f60: 64 6f 2d 65 63 20 28 3a 75 6e 74 69 6c 20 28 3a  do-ec (:until (:
2f70: 72 61 6e 67 65 20 69 20 31 20 31 30 29 20 28 62  range i 1 10) (b
2f80: 65 67 69 6e 20 28 73 65 74 21 20 6e 20 28 2b 20  egin (set! n (+ 
2f90: 6e 20 31 29 29 20 28 3e 3d 20 69 20 35 29 29 29  n 1)) (>= i 5)))
2fa0: 0a 20 20 20 20 20 20 20 20 20 20 28 69 66 20 23  .          (if #
2fb0: 66 20 23 66 29 29 0a 20 20 20 6e 29 0a 20 3d 3e  f #f)).   n). =>
2fc0: 20 35 29 0a 0a 28 6d 79 2d 63 68 65 63 6b 0a 20   5)..(my-check. 
2fd0: 28 6c 65 74 20 28 28 6e 20 30 29 29 0a 20 20 20  (let ((n 0)).   
2fe0: 28 64 6f 2d 65 63 20 28 3a 77 68 69 6c 65 20 28  (do-ec (:while (
2ff0: 3a 70 61 72 61 6c 6c 65 6c 20 28 3a 72 61 6e 67  :parallel (:rang
3000: 65 20 69 20 31 20 31 30 29 0a 20 20 20 20 20 20  e i 1 10).      
3010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3020: 20 20 20 20 20 20 20 28 3a 64 6f 20 28 29 20 28         (:do () (
3030: 62 65 67 69 6e 20 28 73 65 74 21 20 6e 20 28 2b  begin (set! n (+
3040: 20 6e 20 31 29 29 20 23 74 29 20 28 29 29 29 0a   n 1)) #t) ())).
3050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3060: 20 20 28 3c 20 69 20 35 29 29 0a 20 20 20 20 20    (< i 5)).     
3070: 20 20 20 20 20 28 69 66 20 23 66 20 23 66 29 29       (if #f #f))
3080: 0a 20 20 20 6e 29 0a 20 3d 3e 20 35 29 0a 0a 28  .   n). => 5)..(
3090: 6d 79 2d 63 68 65 63 6b 0a 20 28 6c 65 74 20 28  my-check. (let (
30a0: 28 6e 20 30 29 29 0a 20 20 20 28 64 6f 2d 65 63  (n 0)).   (do-ec
30b0: 20 28 3a 75 6e 74 69 6c 20 28 3a 70 61 72 61 6c   (:until (:paral
30c0: 6c 65 6c 20 28 3a 72 61 6e 67 65 20 69 20 31 20  lel (:range i 1 
30d0: 31 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  10).            
30e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f0: 20 28 3a 64 6f 20 28 29 20 28 62 65 67 69 6e 20   (:do () (begin 
3100: 28 73 65 74 21 20 6e 20 28 2b 20 6e 20 31 29 29  (set! n (+ n 1))
3110: 20 23 74 29 20 28 29 29 29 0a 20 20 20 20 20 20   #t) ())).      
3120: 20 20 20 20 20 20 20 20 20 20 20 20 28 3e 3d 20              (>= 
3130: 69 20 35 29 29 0a 20 20 20 20 20 20 20 20 20 20  i 5)).          
3140: 28 69 66 20 23 66 20 23 66 29 29 0a 20 20 20 6e  (if #f #f)).   n
3150: 29 0a 20 3d 3e 20 35 29 0a 0a 3b 20 3d 3d 3d 3d  ). => 5)..; ====
3160: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3170: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3180: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3190: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
31a0: 3d 3d 3d 3d 3d 3d 0a 3b 20 54 68 65 20 64 69 73  ======.; The dis
31b0: 70 61 74 63 68 69 6e 67 20 67 65 6e 65 72 61 74  patching generat
31c0: 6f 72 0a 3b 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  or.; ===========
31d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
31e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
31f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3200: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a  ===============.
3210: 0a 28 6d 79 2d 63 68 65 63 6b 20 28 6c 69 73 74  .(my-check (list
3220: 2d 65 63 20 28 3a 20 63 20 27 28 61 20 62 29 29  -ec (: c '(a b))
3230: 20 63 29 20 3d 3e 20 27 28 61 20 62 29 29 0a 28   c) => '(a b)).(
3240: 6d 79 2d 63 68 65 63 6b 20 28 6c 69 73 74 2d 65  my-check (list-e
3250: 63 20 28 3a 20 63 20 27 28 61 20 62 29 20 27 28  c (: c '(a b) '(
3260: 63 20 64 29 29 20 63 29 20 3d 3e 20 27 28 61 20  c d)) c) => '(a 
3270: 62 20 63 20 64 29 29 0a 0a 28 6d 79 2d 63 68 65  b c d))..(my-che
3280: 63 6b 20 28 6c 69 73 74 2d 65 63 20 28 3a 20 63  ck (list-ec (: c
3290: 20 22 61 62 22 29 20 63 29 20 3d 3e 20 27 28 23   "ab") c) => '(#
32a0: 5c 61 20 23 5c 62 29 29 0a 28 6d 79 2d 63 68 65  \a #\b)).(my-che
32b0: 63 6b 20 28 6c 69 73 74 2d 65 63 20 28 3a 20 63  ck (list-ec (: c
32c0: 20 22 61 62 22 20 22 63 64 22 29 20 63 29 20 3d   "ab" "cd") c) =
32d0: 3e 20 27 28 23 5c 61 20 23 5c 62 20 23 5c 63 20  > '(#\a #\b #\c 
32e0: 23 5c 64 29 29 0a 0a 28 6d 79 2d 63 68 65 63 6b  #\d))..(my-check
32f0: 20 28 6c 69 73 74 2d 65 63 20 28 3a 20 63 20 28   (list-ec (: c (
3300: 76 65 63 74 6f 72 20 27 61 20 27 62 29 29 20 63  vector 'a 'b)) c
3310: 29 20 3d 3e 20 27 28 61 20 62 29 29 0a 28 6d 79  ) => '(a b)).(my
3320: 2d 63 68 65 63 6b 20 28 6c 69 73 74 2d 65 63 20  -check (list-ec 
3330: 28 3a 20 63 20 28 76 65 63 74 6f 72 20 27 61 20  (: c (vector 'a 
3340: 27 62 29 20 28 76 65 63 74 6f 72 20 27 63 29 29  'b) (vector 'c))
3350: 20 63 29 20 3d 3e 20 27 28 61 20 62 20 63 29 29   c) => '(a b c))
3360: 0a 0a 28 6d 79 2d 63 68 65 63 6b 20 28 6c 69 73  ..(my-check (lis
3370: 74 2d 65 63 20 28 3a 20 69 20 30 29 20 69 29 20  t-ec (: i 0) i) 
3380: 3d 3e 20 27 28 29 29 0a 28 6d 79 2d 63 68 65 63  => '()).(my-chec
3390: 6b 20 28 6c 69 73 74 2d 65 63 20 28 3a 20 69 20  k (list-ec (: i 
33a0: 31 29 20 69 29 20 3d 3e 20 27 28 30 29 29 0a 28  1) i) => '(0)).(
33b0: 6d 79 2d 63 68 65 63 6b 20 28 6c 69 73 74 2d 65  my-check (list-e
33c0: 63 20 28 3a 20 69 20 31 30 29 20 69 29 20 3d 3e  c (: i 10) i) =>
33d0: 20 27 28 30 20 31 20 32 20 33 20 34 20 35 20 36   '(0 1 2 3 4 5 6
33e0: 20 37 20 38 20 39 29 29 0a 28 6d 79 2d 63 68 65   7 8 9)).(my-che
33f0: 63 6b 20 28 6c 69 73 74 2d 65 63 20 28 3a 20 69  ck (list-ec (: i
3400: 20 31 20 32 29 20 69 29 20 3d 3e 20 27 28 31 29   1 2) i) => '(1)
3410: 29 0a 28 6d 79 2d 63 68 65 63 6b 20 28 6c 69 73  ).(my-check (lis
3420: 74 2d 65 63 20 28 3a 20 69 20 31 20 32 20 33 29  t-ec (: i 1 2 3)
3430: 20 69 29 20 3d 3e 20 27 28 31 29 29 0a 28 6d 79   i) => '(1)).(my
3440: 2d 63 68 65 63 6b 20 28 6c 69 73 74 2d 65 63 20  -check (list-ec 
3450: 28 3a 20 69 20 31 20 39 20 33 29 20 69 29 20 3d  (: i 1 9 3) i) =
3460: 3e 20 27 28 31 20 34 20 37 29 29 0a 0a 28 6d 79  > '(1 4 7))..(my
3470: 2d 63 68 65 63 6b 20 28 6c 69 73 74 2d 65 63 20  -check (list-ec 
3480: 28 3a 20 69 20 30 2e 30 20 31 2e 30 20 30 2e 32  (: i 0.0 1.0 0.2
3490: 29 20 69 29 20 3d 3e 20 27 28 30 2e 20 30 2e 32  ) i) => '(0. 0.2
34a0: 20 30 2e 34 20 30 2e 36 20 30 2e 38 29 29 0a 0a   0.4 0.6 0.8))..
34b0: 28 6d 79 2d 63 68 65 63 6b 20 28 6c 69 73 74 2d  (my-check (list-
34c0: 65 63 20 28 3a 20 63 20 23 5c 61 20 23 5c 63 29  ec (: c #\a #\c)
34d0: 20 63 29 20 3d 3e 20 27 28 23 5c 61 20 23 5c 62   c) => '(#\a #\b
34e0: 20 23 5c 63 29 29 0a 0a 28 6d 79 2d 63 68 65 63   #\c))..(my-chec
34f0: 6b 20 0a 20 28 62 65 67 69 6e 0a 20 20 20 28 6c  k . (begin.   (l
3500: 65 74 20 28 28 66 20 28 6d 79 2d 6f 70 65 6e 2d  et ((f (my-open-
3510: 6f 75 74 70 75 74 2d 66 69 6c 65 20 22 74 6d 70  output-file "tmp
3520: 31 22 29 29 29 0a 20 20 20 20 20 28 64 6f 2d 65  1"))).     (do-e
3530: 63 20 28 3a 72 61 6e 67 65 20 6e 20 31 30 29 20  c (:range n 10) 
3540: 28 62 65 67 69 6e 20 28 77 72 69 74 65 20 6e 20  (begin (write n 
3550: 66 29 20 28 6e 65 77 6c 69 6e 65 20 66 29 29 29  f) (newline f)))
3560: 0a 20 20 20 20 20 28 63 6c 6f 73 65 2d 6f 75 74  .     (close-out
3570: 70 75 74 2d 70 6f 72 74 20 66 29 29 0a 20 20 20  put-port f)).   
3580: 28 6d 79 2d 63 61 6c 6c 2d 77 69 74 68 2d 69 6e  (my-call-with-in
3590: 70 75 74 2d 66 69 6c 65 20 22 74 6d 70 31 22 20  put-file "tmp1" 
35a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35b0: 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 70  .     (lambda (p
35c0: 6f 72 74 29 20 28 6c 69 73 74 2d 65 63 20 28 3a  ort) (list-ec (:
35d0: 20 78 20 70 6f 72 74 20 72 65 61 64 29 20 78 29   x port read) x)
35e0: 29 20 29 29 0a 20 3d 3e 20 28 6c 69 73 74 2d 65  ) )). => (list-e
35f0: 63 20 28 3a 72 61 6e 67 65 20 6e 20 31 30 29 20  c (:range n 10) 
3600: 6e 29 20 29 0a 20 20 20 20 0a 28 6d 79 2d 63 68  n) ).    .(my-ch
3610: 65 63 6b 20 0a 20 28 62 65 67 69 6e 0a 20 20 20  eck . (begin.   
3620: 28 6c 65 74 20 28 28 66 20 28 6d 79 2d 6f 70 65  (let ((f (my-ope
3630: 6e 2d 6f 75 74 70 75 74 2d 66 69 6c 65 20 22 74  n-output-file "t
3640: 6d 70 31 22 29 29 29 0a 20 20 20 20 20 28 64 6f  mp1"))).     (do
3650: 2d 65 63 20 28 3a 72 61 6e 67 65 20 6e 20 31 30  -ec (:range n 10
3660: 29 20 28 62 65 67 69 6e 20 28 77 72 69 74 65 20  ) (begin (write 
3670: 6e 20 66 29 20 28 6e 65 77 6c 69 6e 65 20 66 29  n f) (newline f)
3680: 29 29 0a 20 20 20 20 20 28 63 6c 6f 73 65 2d 6f  )).     (close-o
3690: 75 74 70 75 74 2d 70 6f 72 74 20 66 29 29 0a 20  utput-port f)). 
36a0: 20 20 28 6d 79 2d 63 61 6c 6c 2d 77 69 74 68 2d    (my-call-with-
36b0: 69 6e 70 75 74 2d 66 69 6c 65 20 22 74 6d 70 31  input-file "tmp1
36c0: 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  "               
36d0: 20 20 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20    .     (lambda 
36e0: 28 70 6f 72 74 29 20 28 6c 69 73 74 2d 65 63 20  (port) (list-ec 
36f0: 28 3a 20 78 20 70 6f 72 74 29 20 78 29 29 20 29  (: x port) x)) )
3700: 29 0a 20 3d 3e 20 28 6c 69 73 74 2d 65 63 20 28  ). => (list-ec (
3710: 3a 72 61 6e 67 65 20 6e 20 31 30 29 20 6e 29 20  :range n 10) n) 
3720: 29 0a 0a 0a 3b 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  )...; ==========
3730: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3740: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3750: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3760: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3770: 0a 3b 20 57 69 74 68 20 69 6e 64 65 78 20 76 61  .; With index va
3780: 72 69 61 62 6c 65 0a 3b 20 3d 3d 3d 3d 3d 3d 3d  riable.; =======
3790: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
37a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
37b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
37c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
37d0: 3d 3d 3d 0a 0a 28 6d 79 2d 63 68 65 63 6b 20 28  ===..(my-check (
37e0: 6c 69 73 74 2d 65 63 20 28 3a 6c 69 73 74 20 63  list-ec (:list c
37f0: 20 28 69 6e 64 65 78 20 69 29 20 27 28 61 20 62   (index i) '(a b
3800: 29 29 20 28 6c 69 73 74 20 63 20 69 29 29 20 3d  )) (list c i)) =
3810: 3e 20 27 28 28 61 20 30 29 20 28 62 20 31 29 29  > '((a 0) (b 1))
3820: 29 0a 28 6d 79 2d 63 68 65 63 6b 20 28 6c 69 73  ).(my-check (lis
3830: 74 2d 65 63 20 28 3a 73 74 72 69 6e 67 20 63 20  t-ec (:string c 
3840: 28 69 6e 64 65 78 20 69 29 20 22 61 22 29 20 28  (index i) "a") (
3850: 6c 69 73 74 20 63 20 69 29 29 20 3d 3e 20 27 28  list c i)) => '(
3860: 28 23 5c 61 20 30 29 29 29 0a 28 6d 79 2d 63 68  (#\a 0))).(my-ch
3870: 65 63 6b 20 28 6c 69 73 74 2d 65 63 20 28 3a 76  eck (list-ec (:v
3880: 65 63 74 6f 72 20 63 20 28 69 6e 64 65 78 20 69  ector c (index i
3890: 29 20 28 76 65 63 74 6f 72 20 27 61 29 29 20 28  ) (vector 'a)) (
38a0: 6c 69 73 74 20 63 20 69 29 29 20 3d 3e 20 27 28  list c i)) => '(
38b0: 28 61 20 30 29 29 29 0a 0a 28 6d 79 2d 63 68 65  (a 0)))..(my-che
38c0: 63 6b 20 0a 20 28 6c 69 73 74 2d 65 63 20 28 3a  ck . (list-ec (:
38d0: 72 61 6e 67 65 20 69 20 28 69 6e 64 65 78 20 6a  range i (index j
38e0: 29 20 30 20 2d 33 20 2d 31 29 20 28 6c 69 73 74  ) 0 -3 -1) (list
38f0: 20 69 20 6a 29 29 20 0a 20 3d 3e 20 27 28 28 30   i j)) . => '((0
3900: 20 30 29 20 28 2d 31 20 31 29 20 28 2d 32 20 32   0) (-1 1) (-2 2
3910: 29 29 20 29 0a 0a 28 6d 79 2d 63 68 65 63 6b 20  )) )..(my-check 
3920: 0a 20 28 6c 69 73 74 2d 65 63 20 28 3a 72 65 61  . (list-ec (:rea
3930: 6c 2d 72 61 6e 67 65 20 69 20 28 69 6e 64 65 78  l-range i (index
3940: 20 6a 29 20 30 20 31 20 30 2e 32 29 20 28 6c 69   j) 0 1 0.2) (li
3950: 73 74 20 69 20 6a 29 29 20 0a 20 3d 3e 20 27 28  st i j)) . => '(
3960: 28 30 2e 20 30 29 20 28 30 2e 32 20 31 29 20 28  (0. 0) (0.2 1) (
3970: 30 2e 34 20 32 29 20 28 30 2e 36 20 33 29 20 28  0.4 2) (0.6 3) (
3980: 30 2e 38 20 34 29 29 20 29 0a 0a 28 6d 79 2d 63  0.8 4)) )..(my-c
3990: 68 65 63 6b 20 0a 20 28 6c 69 73 74 2d 65 63 20  heck . (list-ec 
39a0: 28 3a 63 68 61 72 2d 72 61 6e 67 65 20 63 20 28  (:char-range c (
39b0: 69 6e 64 65 78 20 69 29 20 23 5c 61 20 23 5c 63  index i) #\a #\c
39c0: 29 20 28 6c 69 73 74 20 63 20 69 29 29 20 0a 20  ) (list c i)) . 
39d0: 3d 3e 20 27 28 28 23 5c 61 20 30 29 20 28 23 5c  => '((#\a 0) (#\
39e0: 62 20 31 29 20 28 23 5c 63 20 32 29 29 20 29 0a  b 1) (#\c 2)) ).
39f0: 0a 28 6d 79 2d 63 68 65 63 6b 20 0a 20 28 6c 69  .(my-check . (li
3a00: 73 74 2d 65 63 20 28 3a 20 78 20 28 69 6e 64 65  st-ec (: x (inde
3a10: 78 20 69 29 20 27 28 61 20 62 20 63 20 64 29 29  x i) '(a b c d))
3a20: 20 28 6c 69 73 74 20 78 20 69 29 29 0a 20 3d 3e   (list x i)). =>
3a30: 20 27 28 28 61 20 30 29 20 28 62 20 31 29 20 28   '((a 0) (b 1) (
3a40: 63 20 32 29 20 28 64 20 33 29 29 20 29 0a 0a 28  c 2) (d 3)) )..(
3a50: 6d 79 2d 63 68 65 63 6b 20 0a 20 28 62 65 67 69  my-check . (begi
3a60: 6e 0a 20 20 20 28 6c 65 74 20 28 28 66 20 28 6d  n.   (let ((f (m
3a70: 79 2d 6f 70 65 6e 2d 6f 75 74 70 75 74 2d 66 69  y-open-output-fi
3a80: 6c 65 20 22 74 6d 70 31 22 29 29 29 0a 20 20 20  le "tmp1"))).   
3a90: 20 20 28 64 6f 2d 65 63 20 28 3a 72 61 6e 67 65    (do-ec (:range
3aa0: 20 6e 20 31 30 29 20 28 62 65 67 69 6e 20 28 77   n 10) (begin (w
3ab0: 72 69 74 65 20 6e 20 66 29 20 28 6e 65 77 6c 69  rite n f) (newli
3ac0: 6e 65 20 66 29 29 29 0a 20 20 20 20 20 28 63 6c  ne f))).     (cl
3ad0: 6f 73 65 2d 6f 75 74 70 75 74 2d 70 6f 72 74 20  ose-output-port 
3ae0: 66 29 29 0a 20 20 20 28 6d 79 2d 63 61 6c 6c 2d  f)).   (my-call-
3af0: 77 69 74 68 2d 69 6e 70 75 74 2d 66 69 6c 65 20  with-input-file 
3b00: 22 74 6d 70 31 22 0a 20 20 20 20 20 28 6c 61 6d  "tmp1".     (lam
3b10: 62 64 61 20 28 70 6f 72 74 29 20 28 6c 69 73 74  bda (port) (list
3b20: 2d 65 63 20 28 3a 20 78 20 28 69 6e 64 65 78 20  -ec (: x (index 
3b30: 69 29 20 70 6f 72 74 29 20 28 6c 69 73 74 20 78  i) port) (list x
3b40: 20 69 29 29 29 20 29 29 0a 20 3d 3e 20 27 28 28   i))) )). => '((
3b50: 30 20 30 29 20 28 31 20 31 29 20 28 32 20 32 29  0 0) (1 1) (2 2)
3b60: 20 28 33 20 33 29 20 28 34 20 34 29 20 28 35 20   (3 3) (4 4) (5 
3b70: 35 29 20 28 36 20 36 29 20 28 37 20 37 29 20 28  5) (6 6) (7 7) (
3b80: 38 20 38 29 20 28 39 20 39 29 29 20 29 0a 0a 0a  8 8) (9 9)) )...
3b90: 3b 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ; ==============
3ba0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3bb0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3bc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3bd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 20 54  ============.; T
3be0: 68 65 20 65 78 61 6d 70 6c 65 73 20 66 72 6f 6d  he examples from
3bf0: 20 74 68 65 20 53 52 46 49 20 64 6f 63 75 6d 65   the SRFI docume
3c00: 6e 74 0a 3b 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  nt.; ===========
3c10: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3c20: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3c30: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3c40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a  ===============.
3c50: 0a 3b 20 66 72 6f 6d 20 41 62 73 74 72 61 63 74  .; from Abstract
3c60: 0a 0a 28 6d 79 2d 63 68 65 63 6b 20 28 6c 69 73  ..(my-check (lis
3c70: 74 2d 65 63 20 28 3a 20 69 20 35 29 20 28 2a 20  t-ec (: i 5) (* 
3c80: 69 20 69 29 29 20 3d 3e 20 27 28 30 20 31 20 34  i i)) => '(0 1 4
3c90: 20 39 20 31 36 29 29 0a 0a 28 6d 79 2d 63 68 65   9 16))..(my-che
3ca0: 63 6b 20 0a 20 20 28 6c 69 73 74 2d 65 63 20 28  ck .  (list-ec (
3cb0: 3a 20 6e 20 31 20 34 29 20 28 3a 20 69 20 6e 29  : n 1 4) (: i n)
3cc0: 20 28 6c 69 73 74 20 6e 20 69 29 29 20 0a 20 20   (list n i)) .  
3cd0: 3d 3e 20 27 28 28 31 20 30 29 20 28 32 20 30 29  => '((1 0) (2 0)
3ce0: 20 28 32 20 31 29 20 28 33 20 30 29 20 28 33 20   (2 1) (3 0) (3 
3cf0: 31 29 20 28 33 20 32 29 29 20 29 0a 0a 3b 20 66  1) (3 2)) )..; f
3d00: 72 6f 6d 20 47 65 6e 65 72 61 74 6f 72 73 0a 0a  rom Generators..
3d10: 28 6d 79 2d 63 68 65 63 6b 20 0a 20 20 28 6c 69  (my-check .  (li
3d20: 73 74 2d 65 63 20 28 3a 20 78 20 28 69 6e 64 65  st-ec (: x (inde
3d30: 78 20 69 29 20 22 61 62 63 22 29 20 28 6c 69 73  x i) "abc") (lis
3d40: 74 20 78 20 69 29 29 20 0a 20 20 3d 3e 20 27 28  t x i)) .  => '(
3d50: 28 23 5c 61 20 30 29 20 28 23 5c 62 20 31 29 20  (#\a 0) (#\b 1) 
3d60: 28 23 5c 63 20 32 29 29 20 29 0a 0a 28 6d 79 2d  (#\c 2)) )..(my-
3d70: 63 68 65 63 6b 0a 20 20 28 6c 69 73 74 2d 65 63  check.  (list-ec
3d80: 20 28 3a 73 74 72 69 6e 67 20 63 20 28 69 6e 64   (:string c (ind
3d90: 65 78 20 69 29 20 22 61 22 20 22 62 22 29 20 28  ex i) "a" "b") (
3da0: 63 6f 6e 73 20 63 20 69 29 29 0a 20 20 3d 3e 20  cons c i)).  => 
3db0: 27 28 28 23 5c 61 20 2e 20 30 29 20 28 23 5c 62  '((#\a . 0) (#\b
3dc0: 20 2e 20 31 29 29 20 29 0a 0a 0a 3b 20 3d 3d 3d   . 1)) )...; ===
3dd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3de0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3df0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3e00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3e10: 3d 3d 3d 3d 3d 3d 3d 0a 3b 20 4c 69 74 74 6c 65  =======.; Little
3e20: 20 53 68 6f 70 20 6f 66 20 48 6f 72 72 6f 72 73   Shop of Horrors
3e30: 0a 3b 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  .; =============
3e40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3e50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3e60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3e70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28  =============..(
3e80: 6d 79 2d 63 68 65 63 6b 20 28 6c 69 73 74 2d 65  my-check (list-e
3e90: 63 20 28 3a 72 61 6e 67 65 20 78 20 35 29 20 28  c (:range x 5) (
3ea0: 3a 72 61 6e 67 65 20 78 20 78 29 20 78 29 20 3d  :range x x) x) =
3eb0: 3e 20 27 28 30 20 30 20 31 20 30 20 31 20 32 20  > '(0 0 1 0 1 2 
3ec0: 30 20 31 20 32 20 33 29 29 0a 0a 28 6d 79 2d 63  0 1 2 3))..(my-c
3ed0: 68 65 63 6b 20 28 6c 69 73 74 2d 65 63 20 28 3a  heck (list-ec (:
3ee0: 6c 69 73 74 20 78 20 27 28 32 20 22 32 33 22 20  list x '(2 "23" 
3ef0: 28 34 29 29 29 20 28 3a 20 79 20 78 29 20 79 29  (4))) (: y x) y)
3f00: 20 3d 3e 20 27 28 30 20 31 20 23 5c 32 20 23 5c   => '(0 1 #\2 #\
3f10: 33 20 34 29 29 0a 0a 28 6d 79 2d 63 68 65 63 6b  3 4))..(my-check
3f20: 20 0a 20 28 6c 69 73 74 2d 65 63 20 28 3a 70 61   . (list-ec (:pa
3f30: 72 61 6c 6c 65 6c 20 28 3a 69 6e 74 65 67 65 72  rallel (:integer
3f40: 73 20 78 29 20 0a 20 20 20 20 20 20 20 20 20 20  s x) .          
3f50: 20 20 20 20 20 20 20 20 20 20 20 28 3a 64 6f 20             (:do 
3f60: 28 28 69 20 31 30 29 29 20 28 3c 20 78 20 69 29  ((i 10)) (< x i)
3f70: 20 28 28 2d 20 69 20 31 29 29 29 29 0a 20 20 20   ((- i 1)))).   
3f80: 20 20 20 20 20 20 20 28 6c 69 73 74 20 78 20 69         (list x i
3f90: 29 29 0a 20 3d 3e 20 27 28 28 30 20 31 30 29 20  )). => '((0 10) 
3fa0: 28 31 20 39 29 20 28 32 20 38 29 20 28 33 20 37  (1 9) (2 8) (3 7
3fb0: 29 20 28 34 20 36 29 29 20 29 0a 0a 0a 3b 20 3d  ) (4 6)) )...; =
3fc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3fd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3fe0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
3ff0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4000: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 20 4c 65 73 73  =========.; Less
4010: 20 61 72 74 69 66 69 63 69 61 6c 20 65 78 61 6d   artificial exam
4020: 70 6c 65 73 0a 3b 20 3d 3d 3d 3d 3d 3d 3d 3d 3d  ples.; =========
4030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4040: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4050: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4060: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4070: 3d 0a 0a 28 64 65 66 69 6e 65 20 28 66 61 63 74  =..(define (fact
4080: 6f 72 69 61 6c 20 6e 29 20 3b 20 6e 20 2a 20 28  orial n) ; n * (
4090: 6e 2d 31 29 20 2a 20 2e 2e 20 2a 20 31 20 66 6f  n-1) * .. * 1 fo
40a0: 72 20 6e 20 3e 3d 20 30 0a 20 20 28 70 72 6f 64  r n >= 0.  (prod
40b0: 75 63 74 2d 65 63 20 28 3a 72 61 6e 67 65 20 6b  uct-ec (:range k
40c0: 20 32 20 28 2b 20 6e 20 31 29 29 20 6b 29 20 29   2 (+ n 1)) k) )
40d0: 0a 0a 28 6d 79 2d 63 68 65 63 6b 20 28 66 61 63  ..(my-check (fac
40e0: 74 6f 72 69 61 6c 20 20 30 29 20 3d 3e 20 31 29  torial  0) => 1)
40f0: 0a 28 6d 79 2d 63 68 65 63 6b 20 28 66 61 63 74  .(my-check (fact
4100: 6f 72 69 61 6c 20 20 31 29 20 3d 3e 20 31 29 0a  orial  1) => 1).
4110: 28 6d 79 2d 63 68 65 63 6b 20 28 66 61 63 74 6f  (my-check (facto
4120: 72 69 61 6c 20 20 33 29 20 3d 3e 20 36 29 0a 28  rial  3) => 6).(
4130: 6d 79 2d 63 68 65 63 6b 20 28 66 61 63 74 6f 72  my-check (factor
4140: 69 61 6c 20 20 35 29 20 3d 3e 20 31 32 30 29 0a  ial  5) => 120).
4150: 0a 0a 28 64 65 66 69 6e 65 20 28 65 72 61 74 6f  ..(define (erato
4160: 73 74 68 65 6e 65 73 20 6e 29 20 3b 20 70 72 69  sthenes n) ; pri
4170: 6d 65 73 20 69 6e 20 7b 32 2e 2e 6e 2d 31 7d 20  mes in {2..n-1} 
4180: 66 6f 72 20 6e 20 3e 3d 20 31 0a 20 20 28 6c 65  for n >= 1.  (le
4190: 74 20 28 28 70 3f 20 28 6d 61 6b 65 2d 73 74 72  t ((p? (make-str
41a0: 69 6e 67 20 6e 20 23 5c 31 29 29 29 0a 20 20 20  ing n #\1))).   
41b0: 20 28 64 6f 2d 65 63 20 28 3a 72 61 6e 67 65 20   (do-ec (:range 
41c0: 6b 20 32 20 6e 29 0a 20 20 20 20 20 20 20 20 20  k 2 n).         
41d0: 20 20 28 69 66 20 28 63 68 61 72 3d 3f 20 28 73    (if (char=? (s
41e0: 74 72 69 6e 67 2d 72 65 66 20 70 3f 20 6b 29 20  tring-ref p? k) 
41f0: 23 5c 31 29 29 0a 20 20 20 20 20 20 20 20 20 20  #\1)).          
4200: 20 28 3a 72 61 6e 67 65 20 69 20 28 2a 20 32 20   (:range i (* 2 
4210: 6b 29 20 6e 20 6b 29 0a 20 20 20 20 20 20 20 20  k) n k).        
4220: 20 20 20 28 73 74 72 69 6e 67 2d 73 65 74 21 20     (string-set! 
4230: 70 3f 20 69 20 23 5c 30 29 20 29 0a 20 20 20 20  p? i #\0) ).    
4240: 28 6c 69 73 74 2d 65 63 20 28 3a 72 61 6e 67 65  (list-ec (:range
4250: 20 6b 20 32 20 6e 29 20 28 69 66 20 28 63 68 61   k 2 n) (if (cha
4260: 72 3d 3f 20 28 73 74 72 69 6e 67 2d 72 65 66 20  r=? (string-ref 
4270: 70 3f 20 6b 29 20 23 5c 31 29 29 20 6b 29 20 29  p? k) #\1)) k) )
4280: 29 0a 0a 28 6d 79 2d 63 68 65 63 6b 20 0a 20 28  )..(my-check . (
4290: 65 72 61 74 6f 73 74 68 65 6e 65 73 20 35 30 29  eratosthenes 50)
42a0: 0a 20 3d 3e 20 27 28 32 20 33 20 35 20 37 20 31  . => '(2 3 5 7 1
42b0: 31 20 31 33 20 31 37 20 31 39 20 32 33 20 32 39  1 13 17 19 23 29
42c0: 20 33 31 20 33 37 20 34 31 20 34 33 20 34 37 29   31 37 41 43 47)
42d0: 20 29 0a 0a 28 6d 79 2d 63 68 65 63 6b 0a 20 28   )..(my-check. (
42e0: 6c 65 6e 67 74 68 20 28 65 72 61 74 6f 73 74 68  length (eratosth
42f0: 65 6e 65 73 20 31 30 30 30 30 30 29 29 0a 20 3d  enes 100000)). =
4300: 3e 20 39 35 39 32 20 29 20 3b 20 77 65 20 65 78  > 9592 ) ; we ex
4310: 70 65 63 74 20 31 30 5e 35 2f 6c 6e 28 31 30 5e  pect 10^5/ln(10^
4320: 35 29 0a 0a 0a 28 64 65 66 69 6e 65 20 28 70 79  5)...(define (py
4330: 74 68 61 67 6f 72 61 73 20 6e 29 20 3b 20 61 2c  thagoras n) ; a,
4340: 20 62 2c 20 63 20 73 2e 74 2e 20 31 20 3c 3d 20   b, c s.t. 1 <= 
4350: 61 20 3c 3d 20 62 20 3c 3d 20 63 20 3c 3d 20 6e  a <= b <= c <= n
4360: 2c 20 61 5e 32 20 2b 20 62 5e 32 20 3d 20 63 5e  , a^2 + b^2 = c^
4370: 32 0a 20 20 28 6c 69 73 74 2d 65 63 20 0a 20 20  2.  (list-ec .  
4380: 20 28 3a 6c 65 74 20 73 71 72 2d 6e 20 28 2a 20   (:let sqr-n (* 
4390: 6e 20 6e 29 29 0a 20 20 20 28 3a 72 61 6e 67 65  n n)).   (:range
43a0: 20 61 20 31 20 28 2b 20 6e 20 31 29 29 0a 3b 20   a 1 (+ n 1)).; 
43b0: 28 62 65 67 69 6e 20 28 64 69 73 70 6c 61 79 20  (begin (display 
43c0: 61 29 20 28 64 69 73 70 6c 61 79 20 22 20 22 29  a) (display " ")
43d0: 29 0a 20 20 20 28 3a 6c 65 74 20 73 71 72 2d 61  ).   (:let sqr-a
43e0: 20 28 2a 20 61 20 61 29 29 0a 20 20 20 28 3a 72   (* a a)).   (:r
43f0: 61 6e 67 65 20 62 20 61 20 28 2b 20 6e 20 31 29  ange b a (+ n 1)
4400: 29 20 0a 20 20 20 28 3a 6c 65 74 20 73 71 72 2d  ) .   (:let sqr-
4410: 63 20 28 2b 20 73 71 72 2d 61 20 28 2a 20 62 20  c (+ sqr-a (* b 
4420: 62 29 29 29 0a 20 20 20 28 69 66 20 28 3c 3d 20  b))).   (if (<= 
4430: 73 71 72 2d 63 20 73 71 72 2d 6e 29 29 0a 20 20  sqr-c sqr-n)).  
4440: 20 28 3a 72 61 6e 67 65 20 63 20 62 20 28 2b 20   (:range c b (+ 
4450: 6e 20 31 29 29 0a 20 20 20 28 69 66 20 28 3d 20  n 1)).   (if (= 
4460: 28 2a 20 63 20 63 29 20 73 71 72 2d 63 29 29 0a  (* c c) sqr-c)).
4470: 20 20 20 28 6c 69 73 74 20 61 20 62 20 63 29 20     (list a b c) 
4480: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 0a 28  )).           .(
4490: 6d 79 2d 63 68 65 63 6b 0a 20 28 70 79 74 68 61  my-check. (pytha
44a0: 67 6f 72 61 73 20 31 35 29 0a 20 3d 3e 20 27 28  goras 15). => '(
44b0: 28 33 20 34 20 35 29 20 28 35 20 31 32 20 31 33  (3 4 5) (5 12 13
44c0: 29 20 28 36 20 38 20 31 30 29 20 28 39 20 31 32  ) (6 8 10) (9 12
44d0: 20 31 35 29 29 20 29 0a 0a 28 6d 79 2d 63 68 65   15)) )..(my-che
44e0: 63 6b 0a 20 28 6c 65 6e 67 74 68 20 28 70 79 74  ck. (length (pyt
44f0: 68 61 67 6f 72 61 73 20 32 30 30 29 29 0a 20 3d  hagoras 200)). =
4500: 3e 20 31 32 37 20 29 0a 0a 0a 28 64 65 66 69 6e  > 127 )...(defin
4510: 65 20 28 71 73 6f 72 74 20 78 73 29 20 3b 20 73  e (qsort xs) ; s
4520: 74 61 62 6c 65 0a 20 20 28 69 66 20 28 6e 75 6c  table.  (if (nul
4530: 6c 3f 20 78 73 29 0a 20 20 20 20 20 20 27 28 29  l? xs).      '()
4540: 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 70 69  .      (let ((pi
4550: 76 6f 74 20 28 63 61 72 20 78 73 29 29 20 28 78  vot (car xs)) (x
4560: 72 65 73 74 20 28 63 64 72 20 78 73 29 29 29 0a  rest (cdr xs))).
4570: 20 20 20 20 20 20 20 20 28 61 70 70 65 6e 64 0a          (append.
4580: 20 20 20 20 20 20 20 20 20 28 71 73 6f 72 74 20           (qsort 
4590: 28 6c 69 73 74 2d 65 63 20 28 3a 6c 69 73 74 20  (list-ec (:list 
45a0: 78 20 78 72 65 73 74 29 20 28 69 66 20 28 3c 20  x xrest) (if (< 
45b0: 20 78 20 70 69 76 6f 74 29 29 20 78 29 29 0a 20   x pivot)) x)). 
45c0: 20 20 20 20 20 20 20 20 28 6c 69 73 74 20 70 69          (list pi
45d0: 76 6f 74 29 0a 20 20 20 20 20 20 20 20 20 28 71  vot).         (q
45e0: 73 6f 72 74 20 28 6c 69 73 74 2d 65 63 20 28 3a  sort (list-ec (:
45f0: 6c 69 73 74 20 78 20 78 72 65 73 74 29 20 28 69  list x xrest) (i
4600: 66 20 28 3e 3d 20 78 20 70 69 76 6f 74 29 29 20  f (>= x pivot)) 
4610: 78 29 29 20 29 29 29 29 0a 0a 28 6d 79 2d 63 68  x)) ))))..(my-ch
4620: 65 63 6b 20 0a 20 28 71 73 6f 72 74 20 27 28 31  eck . (qsort '(1
4630: 20 35 20 34 20 32 20 34 20 35 20 33 20 32 20 31   5 4 2 4 5 3 2 1
4640: 20 33 29 29 0a 20 3d 3e 20 27 28 31 20 31 20 32   3)). => '(1 1 2
4650: 20 32 20 33 20 33 20 34 20 34 20 35 20 35 29 20   2 3 3 4 4 5 5) 
4660: 29 0a 0a 0a 28 64 65 66 69 6e 65 20 28 70 69 2d  )...(define (pi-
4670: 42 42 50 20 6d 29 20 3b 20 61 70 70 72 6f 78 2e  BBP m) ; approx.
4680: 20 6f 66 20 70 69 20 77 69 74 68 69 6e 20 31 36   of pi within 16
4690: 5e 2d 6d 20 28 42 61 69 6c 65 79 2d 42 6f 72 77  ^-m (Bailey-Borw
46a0: 65 69 6e 2d 50 6c 6f 75 66 66 65 29 0a 20 20 28  ein-Plouffe).  (
46b0: 73 75 6d 2d 65 63 20 0a 20 20 20 20 28 3a 72 61  sum-ec .    (:ra
46c0: 6e 67 65 20 6e 20 30 20 28 2b 20 6d 20 31 29 29  nge n 0 (+ m 1))
46d0: 0a 20 20 20 20 28 3a 6c 65 74 20 6e 38 20 28 2a  .    (:let n8 (*
46e0: 20 38 20 6e 29 29 0a 20 20 20 20 28 2a 20 28 2d   8 n)).    (* (-
46f0: 20 28 2f 20 34 20 28 2b 20 6e 38 20 31 29 29 0a   (/ 4 (+ n8 1)).
4700: 20 20 20 20 20 20 20 20 20 20 28 2b 20 28 2f 20            (+ (/ 
4710: 32 20 28 2b 20 6e 38 20 34 29 29 0a 20 20 20 20  2 (+ n8 4)).    
4720: 20 20 20 20 20 20 20 20 20 28 2f 20 31 20 28 2b           (/ 1 (+
4730: 20 6e 38 20 35 29 29 0a 20 20 20 20 20 20 20 20   n8 5)).        
4740: 20 20 20 20 20 28 2f 20 31 20 28 2b 20 6e 38 20       (/ 1 (+ n8 
4750: 36 29 29 29 29 0a 20 20 20 20 20 20 20 28 2f 20  6)))).       (/ 
4760: 31 20 28 65 78 70 74 20 31 36 20 6e 29 29 20 29  1 (expt 16 n)) )
4770: 29 29 0a 0a 28 6d 79 2d 63 68 65 63 6b 0a 20 28  ))..(my-check. (
4780: 70 69 2d 42 42 50 20 35 29 0a 20 3d 3e 20 28 2f  pi-BBP 5). => (/
4790: 20 34 30 34 31 33 37 34 32 33 33 30 33 34 39 33   404137423303493
47a0: 31 36 37 30 37 20 31 32 38 36 34 30 39 33 37 32  16707 1286409372
47b0: 32 39 31 35 36 33 35 32 30 30 29 20 29 0a 0a 28  2915635200) )..(
47c0: 64 65 66 69 6e 65 20 28 72 65 61 64 2d 6c 69 6e  define (read-lin
47d0: 65 73 20 66 69 6c 65 6e 61 6d 65 29 20 3b 20 6c  es filename) ; l
47e0: 69 73 74 20 6f 66 20 61 6c 6c 20 6c 69 6e 65 73  ist of all lines
47f0: 0a 20 20 28 6d 79 2d 63 61 6c 6c 2d 77 69 74 68  .  (my-call-with
4800: 2d 69 6e 70 75 74 2d 66 69 6c 65 20 0a 20 20 20  -input-file .   
4810: 66 69 6c 65 6e 61 6d 65 0a 20 20 20 28 6c 61 6d  filename.   (lam
4820: 62 64 61 20 28 70 6f 72 74 29 0a 20 20 20 20 20  bda (port).     
4830: 28 6c 69 73 74 2d 65 63 20 28 3a 70 6f 72 74 20  (list-ec (:port 
4840: 6c 69 6e 65 20 70 6f 72 74 20 67 65 74 2d 6c 69  line port get-li
4850: 6e 65 29 20 6c 69 6e 65 29 20 29 29 29 0a 0a 28  ne) line) )))..(
4860: 6d 79 2d 63 68 65 63 6b 0a 20 28 62 65 67 69 6e  my-check. (begin
4870: 0a 20 20 20 28 6c 65 74 20 28 28 66 20 28 6d 79  .   (let ((f (my
4880: 2d 6f 70 65 6e 2d 6f 75 74 70 75 74 2d 66 69 6c  -open-output-fil
4890: 65 20 22 74 6d 70 31 22 29 29 29 0a 20 20 20 20  e "tmp1"))).    
48a0: 20 28 64 6f 2d 65 63 20 28 3a 72 61 6e 67 65 20   (do-ec (:range 
48b0: 6e 20 31 30 29 20 28 62 65 67 69 6e 20 28 77 72  n 10) (begin (wr
48c0: 69 74 65 20 6e 20 66 29 20 28 6e 65 77 6c 69 6e  ite n f) (newlin
48d0: 65 20 66 29 29 29 0a 20 20 20 20 20 28 63 6c 6f  e f))).     (clo
48e0: 73 65 2d 6f 75 74 70 75 74 2d 70 6f 72 74 20 66  se-output-port f
48f0: 29 29 0a 20 20 20 28 72 65 61 64 2d 6c 69 6e 65  )).   (read-line
4900: 73 20 22 74 6d 70 31 22 29 20 29 0a 20 3d 3e 20  s "tmp1") ). => 
4910: 28 6c 69 73 74 2d 65 63 20 28 3a 63 68 61 72 2d  (list-ec (:char-
4920: 72 61 6e 67 65 20 63 20 23 5c 30 20 23 5c 39 29  range c #\0 #\9)
4930: 20 28 73 74 72 69 6e 67 20 63 29 29 20 29 0a 0a   (string c)) )..
4940: 0a 3b 20 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  .; =============
4950: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4960: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4970: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
4980: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 20  =============.; 
4990: 53 75 6d 6d 61 72 79 0a 3b 20 3d 3d 3d 3d 3d 3d  Summary.; ======
49a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
49b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
49c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
49d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
49e0: 3d 3d 3d 3d 0a 0a 28 62 65 67 69 6e 0a 20 20 28  ====..(begin.  (
49f0: 6e 65 77 6c 69 6e 65 29 0a 20 20 28 6e 65 77 6c  newline).  (newl
4a00: 69 6e 65 29 0a 20 20 28 64 69 73 70 6c 61 79 20  ine).  (display 
4a10: 22 63 6f 72 72 65 63 74 20 65 78 61 6d 70 6c 65  "correct example
4a20: 73 20 3a 20 22 29 0a 20 20 28 64 69 73 70 6c 61  s : ").  (displa
4a30: 79 20 6d 79 2d 63 68 65 63 6b 2d 63 6f 72 72 65  y my-check-corre
4a40: 63 74 29 0a 20 20 28 6e 65 77 6c 69 6e 65 29 0a  ct).  (newline).
4a50: 20 20 28 64 69 73 70 6c 61 79 20 22 77 72 6f 6e    (display "wron
4a60: 67 20 65 78 61 6d 70 6c 65 73 20 20 20 3a 20 22  g examples   : "
4a70: 29 0a 20 20 28 64 69 73 70 6c 61 79 20 6d 79 2d  ).  (display my-
4a80: 63 68 65 63 6b 2d 77 72 6f 6e 67 29 0a 20 20 28  check-wrong).  (
4a90: 6e 65 77 6c 69 6e 65 29 0a 20 20 28 6e 65 77 6c  newline).  (newl
4aa0: 69 6e 65 29 20 29 0a                             ine) ).