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