Artifact 62cb2f949f9d132069c40e52d89882fb5071bddd:
- File srfi/s41/test.sps — part of check-in [80c8c83034] at 2016-07-07 18:11:39 on branch trunk — initial import (user: ovenpasta@pizzahack.eu size: 18306)
0000: 3b 20 23 21 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 ; #!/usr/bin/env 0010: 20 73 63 68 65 6d 65 2d 73 63 72 69 70 74 0d 0a scheme-script.. 0020: 0d 0a 3b 20 43 6f 70 79 72 69 67 68 74 20 28 43 ..; Copyright (C 0030: 29 20 32 30 30 37 20 62 79 20 50 68 69 6c 69 70 ) 2007 by Philip 0040: 20 4c 2e 20 42 65 77 69 67 20 6f 66 20 53 61 69 L. Bewig of Sai 0050: 6e 74 20 4c 6f 75 69 73 2c 20 4d 69 73 73 6f 75 nt Louis, Missou 0060: 72 69 2c 20 55 53 41 2e 0d 0a 3b 20 41 6c 6c 20 ri, USA...; All 0070: 72 69 67 68 74 73 20 72 65 73 65 72 76 65 64 2e rights reserved. 0080: 20 20 50 65 72 6d 69 73 73 69 6f 6e 20 69 73 20 Permission is 0090: 68 65 72 65 62 79 20 67 72 61 6e 74 65 64 2c 20 hereby granted, 00a0: 66 72 65 65 20 6f 66 20 63 68 61 72 67 65 2c 0d free of charge,. 00b0: 0a 3b 20 74 6f 20 61 6e 79 20 70 65 72 73 6f 6e .; to any person 00c0: 20 6f 62 74 61 69 6e 69 6e 67 20 61 20 63 6f 70 obtaining a cop 00d0: 79 20 6f 66 0d 0a 3b 20 74 68 69 73 20 73 6f 66 y of..; this sof 00e0: 74 77 61 72 65 20 61 6e 64 20 61 73 73 6f 63 69 tware and associ 00f0: 61 74 65 64 20 64 6f 63 75 6d 65 6e 74 61 74 69 ated documentati 0100: 6f 6e 20 66 69 6c 65 73 20 28 74 68 65 20 22 53 on files (the "S 0110: 6f 66 74 77 61 72 65 22 29 2c 0d 0a 3b 20 74 6f oftware"),..; to 0120: 20 64 65 61 6c 20 69 6e 20 74 68 65 20 53 6f 66 deal in the Sof 0130: 74 77 61 72 65 20 77 69 74 68 6f 75 74 20 72 65 tware without re 0140: 73 74 72 69 63 74 69 6f 6e 2c 20 69 6e 63 6c 75 striction, inclu 0150: 64 69 6e 67 20 77 69 74 68 6f 75 74 0d 0a 3b 20 ding without..; 0160: 6c 69 6d 69 74 61 74 69 6f 6e 20 74 68 65 20 72 limitation the r 0170: 69 67 68 74 73 20 74 6f 20 75 73 65 2c 20 63 6f ights to use, co 0180: 70 79 2c 20 6d 6f 64 69 66 79 2c 20 6d 65 72 67 py, modify, merg 0190: 65 2c 20 70 75 62 6c 69 73 68 2c 0d 0a 3b 20 64 e, publish,..; d 01a0: 69 73 74 72 69 62 75 74 65 2c 20 73 75 62 6c 69 istribute, subli 01b0: 63 65 6e 73 65 2c 20 61 6e 64 2f 6f 72 20 73 65 cense, and/or se 01c0: 6c 6c 20 63 6f 70 69 65 73 20 6f 66 20 74 68 65 ll copies of the 01d0: 20 53 6f 66 74 77 61 72 65 2c 20 61 6e 64 20 74 Software, and t 01e0: 6f 0d 0a 3b 20 70 65 72 6d 69 74 20 70 65 72 73 o..; permit pers 01f0: 6f 6e 73 20 74 6f 20 77 68 6f 6d 20 74 68 65 20 ons to whom the 0200: 53 6f 66 74 77 61 72 65 20 69 73 20 66 75 72 6e Software is furn 0210: 69 73 68 65 64 20 74 6f 20 64 6f 20 73 6f 2c 20 ished to do so, 0220: 73 75 62 6a 65 63 74 0d 0a 3b 20 74 6f 20 74 68 subject..; to th 0230: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 64 e following cond 0240: 69 74 69 6f 6e 73 3a 20 54 68 65 20 61 62 6f 76 itions: The abov 0250: 65 20 63 6f 70 79 72 69 67 68 74 20 6e 6f 74 69 e copyright noti 0260: 63 65 20 61 6e 64 20 74 68 69 73 0d 0a 3b 20 70 ce and this..; p 0270: 65 72 6d 69 73 73 69 6f 6e 20 6e 6f 74 69 63 65 ermission notice 0280: 20 73 68 61 6c 6c 20 62 65 20 69 6e 63 6c 75 64 shall be includ 0290: 65 64 20 69 6e 20 61 6c 6c 20 63 6f 70 69 65 73 ed in all copies 02a0: 20 6f 72 20 73 75 62 73 74 61 6e 74 69 61 6c 0d or substantial. 02b0: 0a 3b 20 70 6f 72 74 69 6f 6e 73 20 6f 66 20 74 .; portions of t 02c0: 68 65 20 53 6f 66 74 77 61 72 65 2e 20 20 54 48 he Software. TH 02d0: 45 20 53 4f 46 54 57 41 52 45 20 49 53 20 50 52 E SOFTWARE IS PR 02e0: 4f 56 49 44 45 44 20 22 41 53 20 49 53 22 2c 20 OVIDED "AS IS", 02f0: 57 49 54 48 4f 55 54 0d 0a 3b 20 57 41 52 52 41 WITHOUT..; WARRA 0300: 4e 54 59 20 4f 46 20 41 4e 59 20 4b 49 4e 44 2c NTY OF ANY KIND, 0310: 20 45 58 50 52 45 53 53 20 4f 52 20 49 4d 50 4c EXPRESS OR IMPL 0320: 49 45 44 2c 20 49 4e 43 4c 55 44 49 4e 47 20 42 IED, INCLUDING B 0330: 55 54 20 4e 4f 54 20 4c 49 4d 49 54 45 44 0d 0a UT NOT LIMITED.. 0340: 3b 20 54 4f 20 54 48 45 20 57 41 52 52 41 4e 54 ; TO THE WARRANT 0350: 49 45 53 20 4f 46 20 4d 45 52 43 48 41 4e 54 41 IES OF MERCHANTA 0360: 42 49 4c 49 54 59 2c 20 46 49 54 4e 45 53 53 20 BILITY, FITNESS 0370: 46 4f 52 20 41 20 50 41 52 54 49 43 55 4c 41 52 FOR A PARTICULAR 0380: 0d 0a 3b 20 50 55 52 50 4f 53 45 20 41 4e 44 20 ..; PURPOSE AND 0390: 4e 4f 4e 49 4e 46 52 49 4e 47 45 4d 45 4e 54 2e NONINFRINGEMENT. 03a0: 20 49 4e 20 4e 4f 20 45 56 45 4e 54 20 53 48 41 IN NO EVENT SHA 03b0: 4c 4c 20 54 48 45 20 41 55 54 48 4f 52 53 20 4f LL THE AUTHORS O 03c0: 52 0d 0a 3b 20 43 4f 50 59 52 49 47 48 54 20 48 R..; COPYRIGHT H 03d0: 4f 4c 44 45 52 53 20 42 45 20 4c 49 41 42 4c 45 OLDERS BE LIABLE 03e0: 20 46 4f 52 20 41 4e 59 20 43 4c 41 49 4d 2c 20 FOR ANY CLAIM, 03f0: 44 41 4d 41 47 45 53 20 4f 52 20 4f 54 48 45 52 DAMAGES OR OTHER 0400: 0d 0a 3b 20 4c 49 41 42 49 4c 49 54 59 2c 20 57 ..; LIABILITY, W 0410: 48 45 54 48 45 52 20 49 4e 20 41 4e 20 41 43 54 HETHER IN AN ACT 0420: 49 4f 4e 20 4f 46 20 43 4f 4e 54 52 41 43 54 2c ION OF CONTRACT, 0430: 20 54 4f 52 54 20 4f 52 20 4f 54 48 45 52 57 49 TORT OR OTHERWI 0440: 53 45 2c 0d 0a 3b 20 41 52 49 53 49 4e 47 20 46 SE,..; ARISING F 0450: 52 4f 4d 2c 20 4f 55 54 20 4f 46 20 4f 52 20 49 ROM, OUT OF OR I 0460: 4e 20 43 4f 4e 4e 45 43 54 49 4f 4e 20 57 49 54 N CONNECTION WIT 0470: 48 20 54 48 45 20 53 4f 46 54 57 41 52 45 20 4f H THE SOFTWARE O 0480: 52 20 54 48 45 20 55 53 45 0d 0a 3b 20 4f 52 20 R THE USE..; OR 0490: 4f 54 48 45 52 20 44 45 41 4c 49 4e 47 53 20 49 OTHER DEALINGS I 04a0: 4e 20 54 48 45 20 53 4f 46 54 57 41 52 45 2e 0d N THE SOFTWARE.. 04b0: 0a 0d 0a 28 69 6d 70 6f 72 74 20 28 73 75 72 66 ...(import (surf 04c0: 61 67 65 20 73 34 31 20 73 74 72 65 61 6d 73 29 age s41 streams) 04d0: 0d 0a 20 20 20 20 20 20 20 20 28 65 78 63 65 70 .. (excep 04e0: 74 20 28 72 6e 72 73 29 20 61 73 73 65 72 74 29 t (rnrs) assert) 04f0: 0d 0a 20 20 20 20 20 20 20 20 28 72 6e 72 73 20 .. (rnrs 0500: 72 35 72 73 29 29 0d 0a 0d 0a 28 64 65 66 69 6e r5rs))....(defin 0510: 65 20 28 61 64 64 31 20 6e 29 20 28 2b 20 6e 20 e (add1 n) (+ n 0520: 31 29 29 0d 0a 0d 0a 28 64 65 66 69 6e 65 20 28 1))....(define ( 0530: 6c 73 65 63 20 70 72 6f 63 20 2e 20 61 72 67 73 lsec proc . args 0540: 29 0d 0a 20 20 28 6c 61 6d 62 64 61 20 78 20 28 ).. (lambda x ( 0550: 61 70 70 6c 79 20 70 72 6f 63 20 28 61 70 70 65 apply proc (appe 0560: 6e 64 20 61 72 67 73 20 78 29 29 29 29 0d 0a 0d nd args x))))... 0570: 0a 28 64 65 66 69 6e 65 20 28 72 73 65 63 20 70 .(define (rsec p 0580: 72 6f 63 20 2e 20 61 72 67 73 29 0d 0a 20 20 28 roc . args).. ( 0590: 6c 61 6d 62 64 61 20 78 20 28 61 70 70 6c 79 20 lambda x (apply 05a0: 70 72 6f 63 20 28 72 65 76 65 72 73 65 20 28 61 proc (reverse (a 05b0: 70 70 65 6e 64 20 28 72 65 76 65 72 73 65 20 61 ppend (reverse a 05c0: 72 67 73 29 20 28 72 65 76 65 72 73 65 20 78 29 rgs) (reverse x) 05d0: 29 29 29 29 29 0d 0a 0d 0a 28 64 65 66 69 6e 65 )))))....(define 05e0: 2d 73 74 72 65 61 6d 20 28 71 73 6f 72 74 20 6c -stream (qsort l 05f0: 74 3f 20 73 74 72 6d 29 0d 0a 20 20 28 69 66 20 t? strm).. (if 0600: 28 73 74 72 65 61 6d 2d 6e 75 6c 6c 3f 20 73 74 (stream-null? st 0610: 72 6d 29 0d 0a 20 20 20 20 20 20 73 74 72 65 61 rm).. strea 0620: 6d 2d 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 28 6c m-null.. (l 0630: 65 74 20 28 28 78 20 28 73 74 72 65 61 6d 2d 63 et ((x (stream-c 0640: 61 72 20 73 74 72 6d 29 29 0d 0a 20 20 20 20 20 ar strm)).. 0650: 20 20 20 20 20 20 20 28 78 73 20 28 73 74 72 65 (xs (stre 0660: 61 6d 2d 63 64 72 20 73 74 72 6d 29 29 29 0d 0a am-cdr strm))).. 0670: 20 20 20 20 20 20 20 20 28 73 74 72 65 61 6d 2d (stream- 0680: 61 70 70 65 6e 64 0d 0a 20 20 20 20 20 20 20 20 append.. 0690: 20 20 28 71 73 6f 72 74 20 6c 74 3f 0d 0a 20 20 (qsort lt?.. 06a0: 20 20 20 20 20 20 20 20 20 20 28 73 74 72 65 61 (strea 06b0: 6d 2d 66 69 6c 74 65 72 0d 0a 20 20 20 20 20 20 m-filter.. 06c0: 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 (lambda 06d0: 28 75 29 20 28 6c 74 3f 20 75 20 78 29 29 0d 0a (u) (lt? u x)).. 06e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 78 73 xs 06f0: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 28 73 )).. (s 0700: 74 72 65 61 6d 20 78 29 0d 0a 20 20 20 20 20 20 tream x).. 0710: 20 20 20 20 28 71 73 6f 72 74 20 6c 74 3f 0d 0a (qsort lt?.. 0720: 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74 72 (str 0730: 65 61 6d 2d 66 69 6c 74 65 72 0d 0a 20 20 20 20 eam-filter.. 0740: 20 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 (lambd 0750: 61 20 28 75 29 20 28 6e 6f 74 20 28 6c 74 3f 20 a (u) (not (lt? 0760: 75 20 78 29 29 29 0d 0a 20 20 20 20 20 20 20 20 u x))).. 0770: 20 20 20 20 20 20 78 73 29 29 29 29 29 29 0d 0a xs)))))).. 0780: 0d 0a 28 64 65 66 69 6e 65 2d 73 74 72 65 61 6d ..(define-stream 0790: 20 28 69 73 6f 72 74 20 6c 74 3f 20 73 74 72 6d (isort lt? strm 07a0: 29 0d 0a 20 20 20 20 28 64 65 66 69 6e 65 2d 73 ).. (define-s 07b0: 74 72 65 61 6d 20 28 69 6e 73 65 72 74 20 73 74 tream (insert st 07c0: 72 6d 20 78 29 0d 0a 20 20 20 20 20 20 28 73 74 rm x).. (st 07d0: 72 65 61 6d 2d 6d 61 74 63 68 20 73 74 72 6d 0d ream-match strm. 07e0: 0a 20 20 20 20 20 20 20 20 28 28 29 20 28 73 74 . (() (st 07f0: 72 65 61 6d 20 78 29 29 0d 0a 20 20 20 20 20 20 ream x)).. 0800: 20 20 28 28 79 20 2e 20 79 73 29 0d 0a 20 20 20 ((y . ys).. 0810: 20 20 20 20 20 20 20 28 69 66 20 28 6c 74 3f 20 (if (lt? 0820: 79 20 78 29 0d 0a 20 20 20 20 20 20 20 20 20 20 y x).. 0830: 20 20 20 20 28 73 74 72 65 61 6d 2d 63 6f 6e 73 (stream-cons 0840: 20 79 20 28 69 6e 73 65 72 74 20 79 73 20 78 29 y (insert ys x) 0850: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ).. 0860: 20 28 73 74 72 65 61 6d 2d 63 6f 6e 73 20 78 20 (stream-cons x 0870: 73 74 72 6d 29 29 29 29 29 0d 0a 20 20 20 20 28 strm))))).. ( 0880: 73 74 72 65 61 6d 2d 66 6f 6c 64 20 69 6e 73 65 stream-fold inse 0890: 72 74 20 73 74 72 65 61 6d 2d 6e 75 6c 6c 20 73 rt stream-null s 08a0: 74 72 6d 29 29 0d 0a 0d 0a 28 64 65 66 69 6e 65 trm))....(define 08b0: 2d 73 74 72 65 61 6d 20 28 73 74 72 65 61 6d 2d -stream (stream- 08c0: 6d 65 72 67 65 20 6c 74 3f 20 2e 20 73 74 72 6d merge lt? . strm 08d0: 73 29 0d 0a 20 20 28 64 65 66 69 6e 65 2d 73 74 s).. (define-st 08e0: 72 65 61 6d 20 28 6d 65 72 67 65 20 78 78 20 79 ream (merge xx y 08f0: 79 29 0d 0a 20 20 20 20 28 73 74 72 65 61 6d 2d y).. (stream- 0900: 6d 61 74 63 68 20 78 78 20 28 28 29 20 79 79 29 match xx (() yy) 0910: 20 28 28 78 20 2e 20 78 73 29 0d 0a 20 20 20 20 ((x . xs).. 0920: 20 20 28 73 74 72 65 61 6d 2d 6d 61 74 63 68 20 (stream-match 0930: 79 79 20 28 28 29 20 78 78 29 20 28 28 79 20 2e yy (() xx) ((y . 0940: 20 79 73 29 0d 0a 20 20 20 20 20 20 20 20 28 69 ys).. (i 0950: 66 20 28 6c 74 3f 20 79 20 78 29 0d 0a 20 20 20 f (lt? y x).. 0960: 20 20 20 20 20 20 20 20 20 28 73 74 72 65 61 6d (stream 0970: 2d 63 6f 6e 73 20 79 20 28 6d 65 72 67 65 20 78 -cons y (merge x 0980: 78 20 79 73 29 29 0d 0a 20 20 20 20 20 20 20 20 x ys)).. 0990: 20 20 20 20 28 73 74 72 65 61 6d 2d 63 6f 6e 73 (stream-cons 09a0: 20 78 20 28 6d 65 72 67 65 20 78 73 20 79 79 29 x (merge xs yy) 09b0: 29 29 29 29 29 29 29 0d 0a 20 20 28 73 74 72 65 ))))))).. (stre 09c0: 61 6d 2d 6c 65 74 20 6c 6f 6f 70 20 28 28 73 74 am-let loop ((st 09d0: 72 6d 73 20 73 74 72 6d 73 29 29 0d 0a 20 20 20 rms strms)).. 09e0: 20 28 63 6f 6e 64 20 28 28 6e 75 6c 6c 3f 20 73 (cond ((null? s 09f0: 74 72 6d 73 29 20 73 74 72 65 61 6d 2d 6e 75 6c trms) stream-nul 0a00: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 28 28 l).. (( 0a10: 6e 75 6c 6c 3f 20 28 63 64 72 20 73 74 72 6d 73 null? (cdr strms 0a20: 29 29 20 28 63 61 72 20 73 74 72 6d 73 29 29 0d )) (car strms)). 0a30: 0a 20 20 20 20 20 20 20 20 20 20 28 65 6c 73 65 . (else 0a40: 20 28 6d 65 72 67 65 20 28 63 61 72 20 73 74 72 (merge (car str 0a50: 6d 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ms).. 0a60: 20 20 20 20 20 20 20 20 20 20 20 20 28 61 70 70 (app 0a70: 6c 79 20 73 74 72 65 61 6d 2d 6d 65 72 67 65 20 ly stream-merge 0a80: 6c 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 lt?.. 0a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 (c 0aa0: 64 72 20 73 74 72 6d 73 29 29 29 29 29 29 29 0d dr strms))))))). 0ab0: 0a 0d 0a 28 64 65 66 69 6e 65 2d 73 74 72 65 61 ...(define-strea 0ac0: 6d 20 28 6d 73 6f 72 74 20 6c 74 3f 20 73 74 72 m (msort lt? str 0ad0: 6d 29 0d 0a 20 20 28 6c 65 74 2a 20 28 28 6e 20 m).. (let* ((n 0ae0: 28 71 75 6f 74 69 65 6e 74 20 28 73 74 72 65 61 (quotient (strea 0af0: 6d 2d 6c 65 6e 67 74 68 20 73 74 72 6d 29 20 32 m-length strm) 2 0b00: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 28 74 73 )).. (ts 0b10: 20 28 73 74 72 65 61 6d 2d 74 61 6b 65 20 6e 20 (stream-take n 0b20: 73 74 72 6d 29 29 0d 0a 20 20 20 20 20 20 20 20 strm)).. 0b30: 20 28 64 73 20 28 73 74 72 65 61 6d 2d 64 72 6f (ds (stream-dro 0b40: 70 20 6e 20 73 74 72 6d 29 29 29 0d 0a 20 20 20 p n strm))).. 0b50: 20 28 69 66 20 28 7a 65 72 6f 3f 20 6e 29 0d 0a (if (zero? n).. 0b60: 20 20 20 20 20 20 20 20 73 74 72 6d 0d 0a 20 20 strm.. 0b70: 20 20 20 20 20 20 28 73 74 72 65 61 6d 2d 6d 65 (stream-me 0b80: 72 67 65 20 6c 74 3f 0d 0a 20 20 20 20 20 20 20 rge lt?.. 0b90: 20 20 20 28 6d 73 6f 72 74 20 3c 20 74 73 29 20 (msort < ts) 0ba0: 28 6d 73 6f 72 74 20 3c 20 64 73 29 29 29 29 29 (msort < ds))))) 0bb0: 0d 0a 0d 0a 28 64 65 66 69 6e 65 2d 73 74 72 65 ....(define-stre 0bc0: 61 6d 20 28 73 74 72 65 61 6d 2d 75 6e 69 71 75 am (stream-uniqu 0bd0: 65 20 65 71 6c 3f 20 73 74 72 6d 29 0d 0a 20 20 e eql? strm).. 0be0: 28 69 66 20 28 73 74 72 65 61 6d 2d 6e 75 6c 6c (if (stream-null 0bf0: 3f 20 73 74 72 6d 29 0d 0a 20 20 20 20 20 20 73 ? strm).. s 0c00: 74 72 65 61 6d 2d 6e 75 6c 6c 0d 0a 20 20 20 20 tream-null.. 0c10: 20 20 28 73 74 72 65 61 6d 2d 63 6f 6e 73 20 28 (stream-cons ( 0c20: 73 74 72 65 61 6d 2d 63 61 72 20 73 74 72 6d 29 stream-car strm) 0c30: 0d 0a 20 20 20 20 20 20 20 20 28 73 74 72 65 61 .. (strea 0c40: 6d 2d 75 6e 69 71 75 65 20 65 71 6c 3f 0d 0a 20 m-unique eql?.. 0c50: 20 20 20 20 20 20 20 20 20 28 73 74 72 65 61 6d (stream 0c60: 2d 64 72 6f 70 2d 77 68 69 6c 65 0d 0a 20 20 20 -drop-while.. 0c70: 20 20 20 20 20 20 20 20 20 28 6c 61 6d 62 64 61 (lambda 0c80: 20 28 78 29 0d 0a 20 20 20 20 20 20 20 20 20 20 (x).. 0c90: 20 20 20 20 28 65 71 6c 3f 20 28 73 74 72 65 61 (eql? (strea 0ca0: 6d 2d 63 61 72 20 73 74 72 6d 29 20 78 29 29 0d m-car strm) x)). 0cb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 . str 0cc0: 6d 29 29 29 29 29 0d 0a 0d 0a 28 64 65 66 69 6e m)))))....(defin 0cd0: 65 20 6e 61 74 73 0d 0a 20 20 28 73 74 72 65 61 e nats.. (strea 0ce0: 6d 2d 63 6f 6e 73 20 30 0d 0a 20 20 20 20 28 73 m-cons 0.. (s 0cf0: 74 72 65 61 6d 2d 6d 61 70 20 61 64 64 31 20 6e tream-map add1 n 0d00: 61 74 73 29 29 29 0d 0a 0d 0a 28 64 65 66 69 6e ats)))....(defin 0d10: 65 20 68 61 6d 6d 69 6e 67 0d 0a 20 20 28 73 74 e hamming.. (st 0d20: 72 65 61 6d 2d 75 6e 69 71 75 65 20 3d 0d 0a 20 ream-unique =.. 0d30: 20 20 20 28 73 74 72 65 61 6d 2d 63 6f 6e 73 20 (stream-cons 0d40: 31 0d 0a 20 20 20 20 20 20 28 73 74 72 65 61 6d 1.. (stream 0d50: 2d 6d 65 72 67 65 20 3c 0d 0a 20 20 20 20 20 20 -merge <.. 0d60: 20 20 28 73 74 72 65 61 6d 2d 6d 61 70 20 28 6c (stream-map (l 0d70: 73 65 63 20 2a 20 32 29 20 68 61 6d 6d 69 6e 67 sec * 2) hamming 0d80: 29 0d 0a 20 20 20 20 20 20 20 20 28 73 74 72 65 ).. (stre 0d90: 61 6d 2d 6d 65 72 67 65 20 3c 0d 0a 20 20 20 20 am-merge <.. 0da0: 20 20 20 20 20 20 28 73 74 72 65 61 6d 2d 6d 61 (stream-ma 0db0: 70 20 28 6c 73 65 63 20 2a 20 33 29 20 68 61 6d p (lsec * 3) ham 0dc0: 6d 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 ming).. 0dd0: 20 28 73 74 72 65 61 6d 2d 6d 61 70 20 28 6c 73 (stream-map (ls 0de0: 65 63 20 2a 20 35 29 20 68 61 6d 6d 69 6e 67 29 ec * 5) hamming) 0df0: 29 29 29 29 29 0d 0a 0d 0a 28 64 65 66 69 6e 65 )))))....(define 0e00: 20 70 72 69 6d 65 73 20 28 6c 65 74 20 28 29 0d primes (let (). 0e10: 0a 20 20 28 64 65 66 69 6e 65 2d 73 74 72 65 61 . (define-strea 0e20: 6d 20 28 6e 65 78 74 20 62 61 73 65 20 6d 75 6c m (next base mul 0e30: 74 20 73 74 72 6d 29 0d 0a 20 20 20 20 28 6c 65 t strm).. (le 0e40: 74 20 28 28 66 69 72 73 74 20 28 73 74 72 65 61 t ((first (strea 0e50: 6d 2d 63 61 72 20 73 74 72 6d 29 29 0d 0a 20 20 m-car strm)).. 0e60: 20 20 20 20 20 20 20 20 28 72 65 73 74 20 28 73 (rest (s 0e70: 74 72 65 61 6d 2d 63 64 72 20 73 74 72 6d 29 29 tream-cdr strm)) 0e80: 29 0d 0a 20 20 20 20 20 20 28 63 6f 6e 64 20 28 ).. (cond ( 0e90: 28 3c 20 66 69 72 73 74 20 6d 75 6c 74 29 0d 0a (< first mult).. 0ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 (s 0eb0: 74 72 65 61 6d 2d 63 6f 6e 73 20 66 69 72 73 74 tream-cons first 0ec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 0ed0: 20 20 28 6e 65 78 74 20 62 61 73 65 20 6d 75 6c (next base mul 0ee0: 74 20 72 65 73 74 29 29 29 0d 0a 20 20 20 20 20 t rest))).. 0ef0: 20 20 20 20 20 20 20 28 28 3c 20 6d 75 6c 74 20 ((< mult 0f00: 66 69 72 73 74 29 0d 0a 20 20 20 20 20 20 20 20 first).. 0f10: 20 20 20 20 20 20 28 6e 65 78 74 20 62 61 73 65 (next base 0f20: 20 28 2b 20 62 61 73 65 20 6d 75 6c 74 29 20 73 (+ base mult) s 0f30: 74 72 6d 29 29 0d 0a 20 20 20 20 20 20 20 20 20 trm)).. 0f40: 20 20 20 28 65 6c 73 65 20 28 6e 65 78 74 20 62 (else (next b 0f50: 61 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ase.. 0f60: 20 20 20 20 20 20 20 20 20 28 2b 20 62 61 73 65 (+ base 0f70: 20 6d 75 6c 74 29 20 72 65 73 74 29 29 29 29 29 mult) rest))))) 0f80: 0d 0a 20 20 28 64 65 66 69 6e 65 2d 73 74 72 65 .. (define-stre 0f90: 61 6d 20 28 73 69 66 74 20 62 61 73 65 20 73 74 am (sift base st 0fa0: 72 6d 29 0d 0a 20 20 20 20 28 6e 65 78 74 20 62 rm).. (next b 0fb0: 61 73 65 20 28 2b 20 62 61 73 65 20 62 61 73 65 ase (+ base base 0fc0: 29 20 73 74 72 6d 29 29 0d 0a 20 20 28 64 65 66 ) strm)).. (def 0fd0: 69 6e 65 2d 73 74 72 65 61 6d 20 28 73 69 65 76 ine-stream (siev 0fe0: 65 20 73 74 72 6d 29 0d 0a 20 20 20 20 28 6c 65 e strm).. (le 0ff0: 74 20 28 28 66 69 72 73 74 20 28 73 74 72 65 61 t ((first (strea 1000: 6d 2d 63 61 72 20 73 74 72 6d 29 29 0d 0a 20 20 m-car strm)).. 1010: 20 20 20 20 20 20 20 20 28 72 65 73 74 20 28 73 (rest (s 1020: 74 72 65 61 6d 2d 63 64 72 20 73 74 72 6d 29 29 tream-cdr strm)) 1030: 29 0d 0a 20 20 20 20 20 20 28 73 74 72 65 61 6d ).. (stream 1040: 2d 63 6f 6e 73 20 66 69 72 73 74 0d 0a 20 20 20 -cons first.. 1050: 20 20 20 20 20 28 73 69 65 76 65 20 28 73 69 66 (sieve (sif 1060: 74 20 66 69 72 73 74 20 72 65 73 74 29 29 29 29 t first rest)))) 1070: 29 0d 0a 20 20 28 73 69 65 76 65 20 28 73 74 72 ).. (sieve (str 1080: 65 61 6d 2d 66 72 6f 6d 20 32 29 29 29 29 0d 0a eam-from 2)))).. 1090: 0d 0a 28 64 65 66 69 6e 65 20 28 68 61 6e 64 6c ..(define (handl 10a0: 65 2d 61 73 73 65 72 74 69 6f 6e 20 74 68 75 6e e-assertion thun 10b0: 6b 20 65 78 70 72 20 72 65 73 75 6c 74 29 0d 0a k expr result).. 10c0: 20 20 28 63 6f 6e 64 0d 0a 20 20 20 20 5b 28 73 (cond.. [(s 10d0: 74 72 69 6e 67 3f 20 72 65 73 75 6c 74 29 20 0d tring? result) . 10e0: 0a 20 20 20 20 20 3b 3b 3b 20 65 72 72 6f 72 20 . ;;; error 10f0: 63 61 73 65 0d 0a 20 20 20 20 20 28 63 61 6c 6c case.. (call 1100: 2f 63 63 0d 0a 20 20 20 20 20 20 20 28 6c 61 6d /cc.. (lam 1110: 62 64 61 20 28 6b 29 20 0d 0a 20 20 20 20 20 20 bda (k) .. 1120: 20 20 20 3b 3b 3b 20 69 67 6e 6f 72 69 6e 67 20 ;;; ignoring 1130: 72 65 73 75 6c 74 20 73 74 72 69 6e 67 0d 0a 20 result string.. 1140: 20 20 20 20 20 20 20 20 28 77 69 74 68 2d 65 78 (with-ex 1150: 63 65 70 74 69 6f 6e 2d 68 61 6e 64 6c 65 72 20 ception-handler 1160: 6b 20 74 68 75 6e 6b 29 0d 0a 20 20 20 20 20 20 k thunk).. 1170: 20 20 20 28 65 72 72 6f 72 20 27 74 65 73 74 20 (error 'test 1180: 22 64 69 64 20 6e 6f 74 20 66 61 69 6c 22 20 65 "did not fail" e 1190: 78 70 72 29 29 29 5d 0d 0a 20 20 20 20 5b 65 6c xpr)))].. [el 11a0: 73 65 0d 0a 20 20 20 20 20 28 75 6e 6c 65 73 73 se.. (unless 11b0: 20 28 65 71 75 61 6c 3f 20 72 65 73 75 6c 74 20 (equal? result 11c0: 28 74 68 75 6e 6b 29 29 20 0d 0a 20 20 20 20 20 (thunk)) .. 11d0: 20 20 28 65 72 72 6f 72 20 27 74 65 73 74 20 22 (error 'test " 11e0: 66 61 69 6c 65 64 22 20 65 78 70 72 29 29 5d 29 failed" expr))]) 11f0: 29 0d 0a 0d 0a 28 64 65 66 69 6e 65 2d 73 79 6e )....(define-syn 1200: 74 61 78 20 61 73 73 65 72 74 0d 0a 20 20 28 73 tax assert.. (s 1210: 79 6e 74 61 78 2d 72 75 6c 65 73 20 28 29 0d 0a yntax-rules ().. 1220: 20 20 20 20 5b 28 5f 20 65 78 70 72 20 72 65 73 [(_ expr res 1230: 75 6c 74 29 20 0d 0a 20 20 20 20 20 28 68 61 6e ult) .. (han 1240: 64 6c 65 2d 61 73 73 65 72 74 69 6f 6e 20 28 6c dle-assertion (l 1250: 61 6d 62 64 61 20 28 29 20 65 78 70 72 29 20 27 ambda () expr) ' 1260: 65 78 70 72 20 72 65 73 75 6c 74 29 5d 29 29 0d expr result)])). 1270: 0a 0d 0a 28 64 65 66 69 6e 65 20 28 75 6e 69 74 ...(define (unit 1280: 2d 74 65 73 74 29 0d 0a 20 20 0d 0a 20 20 28 64 -test).. .. (d 1290: 65 66 69 6e 65 20 73 74 72 6d 31 32 33 20 28 73 efine strm123 (s 12a0: 74 72 65 61 6d 20 31 20 32 20 33 29 29 0d 0a 0d tream 1 2 3))... 12b0: 0a 20 20 3b 20 73 74 72 65 61 6d 2d 6e 75 6c 6c . ; stream-null 12c0: 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 72 .. (assert (str 12d0: 65 61 6d 3f 20 73 74 72 65 61 6d 2d 6e 75 6c 6c eam? stream-null 12e0: 29 20 23 74 29 0d 0a 20 20 28 61 73 73 65 72 74 ) #t).. (assert 12f0: 20 28 73 74 72 65 61 6d 2d 6e 75 6c 6c 3f 20 73 (stream-null? s 1300: 74 72 65 61 6d 2d 6e 75 6c 6c 29 20 23 74 29 0d tream-null) #t). 1310: 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 72 65 . (assert (stre 1320: 61 6d 2d 70 61 69 72 3f 20 73 74 72 65 61 6d 2d am-pair? stream- 1330: 6e 75 6c 6c 29 20 23 66 29 0d 0a 20 20 0d 0a 20 null) #f).. .. 1340: 20 3b 20 73 74 72 65 61 6d 2d 63 6f 6e 73 0d 0a ; stream-cons.. 1350: 20 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 (assert (strea 1360: 6d 3f 20 28 73 74 72 65 61 6d 2d 63 6f 6e 73 20 m? (stream-cons 1370: 31 20 73 74 72 65 61 6d 2d 6e 75 6c 6c 29 29 20 1 stream-null)) 1380: 23 74 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 #t).. (assert ( 1390: 73 74 72 65 61 6d 2d 6e 75 6c 6c 3f 20 28 73 74 stream-null? (st 13a0: 72 65 61 6d 2d 63 6f 6e 73 20 31 20 73 74 72 65 ream-cons 1 stre 13b0: 61 6d 2d 6e 75 6c 6c 29 29 20 23 66 29 0d 0a 20 am-null)) #f).. 13c0: 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d (assert (stream 13d0: 2d 70 61 69 72 3f 20 28 73 74 72 65 61 6d 2d 63 -pair? (stream-c 13e0: 6f 6e 73 20 31 20 73 74 72 65 61 6d 2d 6e 75 6c ons 1 stream-nul 13f0: 6c 29 29 20 23 74 29 0d 0a 20 20 0d 0a 20 20 3b l)) #t).. .. ; 1400: 20 73 74 72 65 61 6d 3f 0d 0a 20 20 28 61 73 73 stream?.. (ass 1410: 65 72 74 20 28 73 74 72 65 61 6d 3f 20 73 74 72 ert (stream? str 1420: 65 61 6d 2d 6e 75 6c 6c 29 20 23 74 29 0d 0a 20 eam-null) #t).. 1430: 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d (assert (stream 1440: 3f 20 28 73 74 72 65 61 6d 2d 63 6f 6e 73 20 31 ? (stream-cons 1 1450: 20 73 74 72 65 61 6d 2d 6e 75 6c 6c 29 29 20 23 stream-null)) # 1460: 74 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 t).. (assert (s 1470: 74 72 65 61 6d 3f 20 22 66 6f 75 72 22 29 20 23 tream? "four") # 1480: 66 29 0d 0a 20 20 0d 0a 20 20 3b 20 73 74 72 65 f).. .. ; stre 1490: 61 6d 2d 6e 75 6c 6c 3f 0d 0a 20 20 28 61 73 73 am-null?.. (ass 14a0: 65 72 74 20 28 73 74 72 65 61 6d 2d 6e 75 6c 6c ert (stream-null 14b0: 3f 20 73 74 72 65 61 6d 2d 6e 75 6c 6c 29 20 23 ? stream-null) # 14c0: 74 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 t).. (assert (s 14d0: 74 72 65 61 6d 2d 6e 75 6c 6c 3f 20 28 73 74 72 tream-null? (str 14e0: 65 61 6d 2d 63 6f 6e 73 20 31 20 73 74 72 65 61 eam-cons 1 strea 14f0: 6d 2d 6e 75 6c 6c 29 29 20 23 66 29 0d 0a 20 20 m-null)) #f).. 1500: 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d (assert (stream- 1510: 6e 75 6c 6c 3f 20 22 66 6f 75 72 22 29 20 23 66 null? "four") #f 1520: 29 0d 0a 20 20 0d 0a 20 20 3b 20 73 74 72 65 61 ).. .. ; strea 1530: 6d 2d 70 61 69 72 3f 0d 0a 20 20 28 61 73 73 65 m-pair?.. (asse 1540: 72 74 20 28 73 74 72 65 61 6d 2d 70 61 69 72 3f rt (stream-pair? 1550: 20 73 74 72 65 61 6d 2d 6e 75 6c 6c 29 20 23 66 stream-null) #f 1560: 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 ).. (assert (st 1570: 72 65 61 6d 2d 70 61 69 72 3f 20 28 73 74 72 65 ream-pair? (stre 1580: 61 6d 2d 63 6f 6e 73 20 31 20 73 74 72 65 61 6d am-cons 1 stream 1590: 2d 6e 75 6c 6c 29 29 20 23 74 29 0d 0a 20 20 28 -null)) #t).. ( 15a0: 61 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d 70 assert (stream-p 15b0: 61 69 72 3f 20 22 66 6f 75 72 22 29 20 23 66 29 air? "four") #f) 15c0: 0d 0a 20 20 0d 0a 20 20 3b 20 73 74 72 65 61 6d .. .. ; stream 15d0: 2d 63 61 72 0d 0a 20 20 28 61 73 73 65 72 74 20 -car.. (assert 15e0: 28 73 74 72 65 61 6d 2d 63 61 72 20 22 66 6f 75 (stream-car "fou 15f0: 72 22 29 20 22 73 74 72 65 61 6d 2d 63 61 72 3a r") "stream-car: 1600: 20 6e 6f 6e 2d 73 74 72 65 61 6d 22 29 0d 0a 20 non-stream").. 1610: 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d (assert (stream 1620: 2d 63 61 72 20 73 74 72 65 61 6d 2d 6e 75 6c 6c -car stream-null 1630: 29 20 22 73 74 72 65 61 6d 2d 63 61 72 3a 20 6e ) "stream-car: n 1640: 75 6c 6c 20 73 74 72 65 61 6d 22 29 0d 0a 20 20 ull stream").. 1650: 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d (assert (stream- 1660: 63 61 72 20 73 74 72 6d 31 32 33 29 20 31 29 0d car strm123) 1). 1670: 0a 20 20 0d 0a 20 20 3b 20 73 74 72 65 61 6d 2d . .. ; stream- 1680: 63 64 72 0d 0a 20 20 28 61 73 73 65 72 74 20 28 cdr.. (assert ( 1690: 73 74 72 65 61 6d 2d 63 64 72 20 22 66 6f 75 72 stream-cdr "four 16a0: 22 29 20 22 73 74 72 65 61 6d 2d 63 64 72 3a 20 ") "stream-cdr: 16b0: 6e 6f 6e 2d 73 74 72 65 61 6d 22 29 0d 0a 20 20 non-stream").. 16c0: 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d (assert (stream- 16d0: 63 64 72 20 73 74 72 65 61 6d 2d 6e 75 6c 6c 29 cdr stream-null) 16e0: 20 22 73 74 72 65 61 6d 2d 63 64 72 3a 20 6e 75 "stream-cdr: nu 16f0: 6c 6c 20 73 74 72 65 61 6d 22 29 0d 0a 20 20 28 ll stream").. ( 1700: 61 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d 63 assert (stream-c 1710: 61 72 20 28 73 74 72 65 61 6d 2d 63 64 72 20 73 ar (stream-cdr s 1720: 74 72 6d 31 32 33 29 29 20 32 29 0d 0a 20 20 0d trm123)) 2).. . 1730: 0a 20 20 3b 20 73 74 72 65 61 6d 2d 6c 61 6d 62 . ; stream-lamb 1740: 64 61 0d 0a 20 20 28 61 73 73 65 72 74 0d 0a 20 da.. (assert.. 1750: 20 20 20 28 73 74 72 65 61 6d 2d 3e 6c 69 73 74 (stream->list 1760: 0d 0a 20 20 20 20 20 20 28 6c 65 74 72 65 63 20 .. (letrec 1770: 28 28 64 6f 75 62 6c 65 0d 0a 20 20 20 20 20 20 ((double.. 1780: 20 20 28 73 74 72 65 61 6d 2d 6c 61 6d 62 64 61 (stream-lambda 1790: 20 28 73 74 72 6d 29 0d 0a 20 20 20 20 20 20 20 (strm).. 17a0: 20 20 20 28 69 66 20 28 73 74 72 65 61 6d 2d 6e (if (stream-n 17b0: 75 6c 6c 3f 20 73 74 72 6d 29 0d 0a 20 20 20 20 ull? strm).. 17c0: 20 20 20 20 20 20 20 20 20 20 73 74 72 65 61 6d stream 17d0: 2d 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 -null.. 17e0: 20 20 20 20 20 28 73 74 72 65 61 6d 2d 63 6f 6e (stream-con 17f0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 s.. 1800: 20 20 20 28 2a 20 32 20 28 73 74 72 65 61 6d 2d (* 2 (stream- 1810: 63 61 72 20 73 74 72 6d 29 29 0d 0a 20 20 20 20 car strm)).. 1820: 20 20 20 20 20 20 20 20 20 20 20 20 28 64 6f 75 (dou 1830: 62 6c 65 20 28 73 74 72 65 61 6d 2d 63 64 72 20 ble (stream-cdr 1840: 73 74 72 6d 29 29 29 29 29 29 29 0d 0a 20 20 20 strm))))))).. 1850: 20 20 20 20 20 28 64 6f 75 62 6c 65 20 73 74 72 (double str 1860: 6d 31 32 33 29 29 29 0d 0a 20 20 20 20 27 28 32 m123))).. '(2 1870: 20 34 20 36 29 29 0d 0a 20 20 0d 0a 20 20 3b 20 4 6)).. .. ; 1880: 64 65 66 69 6e 65 2d 73 74 72 65 61 6d 0d 0a 20 define-stream.. 1890: 20 28 61 73 73 65 72 74 0d 0a 20 20 20 20 28 73 (assert.. (s 18a0: 74 72 65 61 6d 2d 3e 6c 69 73 74 0d 0a 20 20 20 tream->list.. 18b0: 20 20 20 28 6c 65 74 20 28 29 0d 0a 20 20 20 20 (let ().. 18c0: 20 20 20 20 28 64 65 66 69 6e 65 2d 73 74 72 65 (define-stre 18d0: 61 6d 20 28 64 6f 75 62 6c 65 20 73 74 72 6d 29 am (double strm) 18e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 28 69 66 20 .. (if 18f0: 28 73 74 72 65 61 6d 2d 6e 75 6c 6c 3f 20 73 74 (stream-null? st 1900: 72 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 rm).. 1910: 20 20 20 73 74 72 65 61 6d 2d 6e 75 6c 6c 0d 0a stream-null.. 1920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 (s 1930: 74 72 65 61 6d 2d 63 6f 6e 73 0d 0a 20 20 20 20 tream-cons.. 1940: 20 20 20 20 20 20 20 20 20 20 20 20 28 2a 20 32 (* 2 1950: 20 28 73 74 72 65 61 6d 2d 63 61 72 20 73 74 72 (stream-car str 1960: 6d 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 m)).. 1970: 20 20 20 20 20 28 64 6f 75 62 6c 65 20 28 73 74 (double (st 1980: 72 65 61 6d 2d 63 64 72 20 73 74 72 6d 29 29 29 ream-cdr strm))) 1990: 29 29 0d 0a 20 20 20 20 20 20 20 20 28 64 6f 75 )).. (dou 19a0: 62 6c 65 20 73 74 72 6d 31 32 33 29 29 29 0d 0a ble strm123))).. 19b0: 20 20 20 20 27 28 32 20 34 20 36 29 29 0d 0a 20 '(2 4 6)).. 19c0: 20 0d 0a 20 20 3b 20 6c 69 73 74 2d 3e 73 74 72 .. ; list->str 19d0: 65 61 6d 0d 0a 20 20 28 61 73 73 65 72 74 20 28 eam.. (assert ( 19e0: 6c 69 73 74 2d 3e 73 74 72 65 61 6d 20 22 66 6f list->stream "fo 19f0: 75 72 22 29 20 22 6c 69 73 74 2d 3e 73 74 72 65 ur") "list->stre 1a00: 61 6d 3a 20 6e 6f 6e 2d 6c 69 73 74 20 61 72 67 am: non-list arg 1a10: 75 6d 65 6e 74 22 29 0d 0a 20 20 28 61 73 73 65 ument").. (asse 1a20: 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c 69 73 74 rt (stream->list 1a30: 20 28 6c 69 73 74 2d 3e 73 74 72 65 61 6d 20 27 (list->stream ' 1a40: 28 29 29 29 20 27 28 29 29 0d 0a 20 20 28 61 73 ())) '()).. (as 1a50: 73 65 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c 69 sert (stream->li 1a60: 73 74 20 28 6c 69 73 74 2d 3e 73 74 72 65 61 6d st (list->stream 1a70: 20 27 28 31 20 32 20 33 29 29 29 20 27 28 31 20 '(1 2 3))) '(1 1a80: 32 20 33 29 29 0d 0a 20 20 0d 0a 20 20 3b 20 70 2 3)).. .. ; p 1a90: 6f 72 74 2d 3e 73 74 72 65 61 6d 0d 0a 20 20 3b ort->stream.. ; 1aa0: 3b 20 28 6c 65 74 2a 20 28 28 70 20 28 6f 70 65 ; (let* ((p (ope 1ab0: 6e 2d 69 6e 70 75 74 2d 66 69 6c 65 20 22 73 74 n-input-file "st 1ac0: 72 65 61 6d 73 2e 73 73 22 29 29 0d 0a 20 20 3b reams.ss")).. ; 1ad0: 3b 20 20 20 20 20 20 20 20 28 73 20 28 70 6f 72 ; (s (por 1ae0: 74 2d 3e 73 74 72 65 61 6d 20 70 29 29 29 0d 0a t->stream p))).. 1af0: 20 20 3b 3b 20 20 20 28 61 73 73 65 72 74 20 28 ;; (assert ( 1b00: 70 6f 72 74 2d 3e 73 74 72 65 61 6d 20 22 66 6f port->stream "fo 1b10: 75 72 22 29 20 22 70 6f 72 74 2d 3e 73 74 72 65 ur") "port->stre 1b20: 61 6d 3a 20 6e 6f 6e 2d 69 6e 70 75 74 2d 70 6f am: non-input-po 1b30: 72 74 20 61 72 67 75 6d 65 6e 74 22 29 0d 0a 20 rt argument").. 1b40: 20 3b 3b 20 20 20 28 61 73 73 65 72 74 20 28 73 ;; (assert (s 1b50: 74 72 69 6e 67 3d 3f 20 28 6c 69 73 74 2d 3e 73 tring=? (list->s 1b60: 74 72 69 6e 67 20 28 73 74 72 65 61 6d 2d 3e 6c tring (stream->l 1b70: 69 73 74 20 31 31 20 73 29 29 20 22 3b 20 43 6f ist 11 s)) "; Co 1b80: 70 79 72 69 67 68 74 22 29 20 23 74 29 0d 0a 20 pyright") #t).. 1b90: 20 3b 3b 20 20 20 28 63 6c 6f 73 65 2d 69 6e 70 ;; (close-inp 1ba0: 75 74 2d 70 6f 72 74 20 70 29 29 0d 0a 0d 0a 20 ut-port p)).... 1bb0: 20 3b 20 73 74 72 65 61 6d 0d 0a 20 20 28 61 73 ; stream.. (as 1bc0: 73 65 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c 69 sert (stream->li 1bd0: 73 74 20 28 73 74 72 65 61 6d 29 29 20 27 28 29 st (stream)) '() 1be0: 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 ).. (assert (st 1bf0: 72 65 61 6d 2d 3e 6c 69 73 74 20 28 73 74 72 65 ream->list (stre 1c00: 61 6d 20 31 29 29 20 27 28 31 29 29 0d 0a 20 20 am 1)) '(1)).. 1c10: 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d (assert (stream- 1c20: 3e 6c 69 73 74 20 28 73 74 72 65 61 6d 20 31 20 >list (stream 1 1c30: 32 20 33 29 29 20 27 28 31 20 32 20 33 29 29 0d 2 3)) '(1 2 3)). 1c40: 0a 20 20 0d 0a 20 20 3b 20 73 74 72 65 61 6d 2d . .. ; stream- 1c50: 3e 6c 69 73 74 0d 0a 20 20 28 61 73 73 65 72 74 >list.. (assert 1c60: 20 28 73 74 72 65 61 6d 2d 3e 6c 69 73 74 20 27 (stream->list ' 1c70: 28 29 29 20 22 73 74 72 65 61 6d 2d 3e 6c 69 73 ()) "stream->lis 1c80: 74 3a 20 6e 6f 6e 2d 73 74 72 65 61 6d 20 61 72 t: non-stream ar 1c90: 67 75 6d 65 6e 74 22 29 0d 0a 20 20 28 61 73 73 gument").. (ass 1ca0: 65 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c 69 73 ert (stream->lis 1cb0: 74 20 22 66 6f 75 72 22 20 73 74 72 6d 31 32 33 t "four" strm123 1cc0: 29 20 22 73 74 72 65 61 6d 2d 3e 6c 69 73 74 3a ) "stream->list: 1cd0: 20 6e 6f 6e 2d 69 6e 74 65 67 65 72 20 63 6f 75 non-integer cou 1ce0: 6e 74 22 29 0d 0a 20 20 28 61 73 73 65 72 74 20 nt").. (assert 1cf0: 28 73 74 72 65 61 6d 2d 3e 6c 69 73 74 20 2d 31 (stream->list -1 1d00: 20 73 74 72 6d 31 32 33 29 20 22 73 74 72 65 61 strm123) "strea 1d10: 6d 2d 3e 6c 69 73 74 3a 20 6e 65 67 61 74 69 76 m->list: negativ 1d20: 65 20 63 6f 75 6e 74 22 29 0d 0a 20 20 28 61 73 e count").. (as 1d30: 73 65 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c 69 sert (stream->li 1d40: 73 74 20 28 73 74 72 65 61 6d 29 29 20 27 28 29 st (stream)) '() 1d50: 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 ).. (assert (st 1d60: 72 65 61 6d 2d 3e 6c 69 73 74 20 73 74 72 6d 31 ream->list strm1 1d70: 32 33 29 20 27 28 31 20 32 20 33 29 29 0d 0a 20 23) '(1 2 3)).. 1d80: 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d (assert (stream 1d90: 2d 3e 6c 69 73 74 20 35 20 73 74 72 6d 31 32 33 ->list 5 strm123 1da0: 29 20 27 28 31 20 32 20 33 29 29 0d 0a 20 20 28 ) '(1 2 3)).. ( 1db0: 61 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d 3e assert (stream-> 1dc0: 6c 69 73 74 20 33 20 28 73 74 72 65 61 6d 2d 66 list 3 (stream-f 1dd0: 72 6f 6d 20 31 29 29 20 27 28 31 20 32 20 33 29 rom 1)) '(1 2 3) 1de0: 29 0d 0a 20 20 0d 0a 20 20 3b 20 73 74 72 65 61 ).. .. ; strea 1df0: 6d 2d 61 70 70 65 6e 64 0d 0a 20 20 28 61 73 73 m-append.. (ass 1e00: 65 72 74 20 28 73 74 72 65 61 6d 2d 61 70 70 65 ert (stream-appe 1e10: 6e 64 20 22 66 6f 75 72 22 29 20 22 73 74 72 65 nd "four") "stre 1e20: 61 6d 2d 61 70 70 65 6e 64 3a 20 6e 6f 6e 2d 73 am-append: non-s 1e30: 74 72 65 61 6d 20 61 72 67 75 6d 65 6e 74 22 29 tream argument") 1e40: 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 72 .. (assert (str 1e50: 65 61 6d 2d 3e 6c 69 73 74 20 28 73 74 72 65 61 eam->list (strea 1e60: 6d 2d 61 70 70 65 6e 64 20 73 74 72 6d 31 32 33 m-append strm123 1e70: 29 29 20 27 28 31 20 32 20 33 29 29 0d 0a 20 20 )) '(1 2 3)).. 1e80: 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d (assert (stream- 1e90: 3e 6c 69 73 74 20 28 73 74 72 65 61 6d 2d 61 70 >list (stream-ap 1ea0: 70 65 6e 64 20 73 74 72 6d 31 32 33 20 73 74 72 pend strm123 str 1eb0: 6d 31 32 33 29 29 20 27 28 31 20 32 20 33 20 31 m123)) '(1 2 3 1 1ec0: 20 32 20 33 29 29 0d 0a 20 20 28 61 73 73 65 72 2 3)).. (asser 1ed0: 74 20 28 73 74 72 65 61 6d 2d 3e 6c 69 73 74 20 t (stream->list 1ee0: 28 73 74 72 65 61 6d 2d 61 70 70 65 6e 64 20 73 (stream-append s 1ef0: 74 72 6d 31 32 33 20 73 74 72 6d 31 32 33 20 73 trm123 strm123 s 1f00: 74 72 6d 31 32 33 29 29 20 27 28 31 20 32 20 33 trm123)) '(1 2 3 1f10: 20 31 20 32 20 33 20 31 20 32 20 33 29 29 0d 0a 1 2 3 1 2 3)).. 1f20: 20 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 (assert (strea 1f30: 6d 2d 3e 6c 69 73 74 20 28 73 74 72 65 61 6d 2d m->list (stream- 1f40: 61 70 70 65 6e 64 20 73 74 72 6d 31 32 33 20 73 append strm123 s 1f50: 74 72 65 61 6d 2d 6e 75 6c 6c 29 29 20 27 28 31 tream-null)) '(1 1f60: 20 32 20 33 29 29 0d 0a 20 20 28 61 73 73 65 72 2 3)).. (asser 1f70: 74 20 28 73 74 72 65 61 6d 2d 3e 6c 69 73 74 20 t (stream->list 1f80: 28 73 74 72 65 61 6d 2d 61 70 70 65 6e 64 20 73 (stream-append s 1f90: 74 72 65 61 6d 2d 6e 75 6c 6c 20 73 74 72 6d 31 tream-null strm1 1fa0: 32 33 29 29 20 27 28 31 20 32 20 33 29 29 0d 0a 23)) '(1 2 3)).. 1fb0: 20 20 0d 0a 20 20 3b 20 73 74 72 65 61 6d 2d 63 .. ; stream-c 1fc0: 6f 6e 63 61 74 0d 0a 20 20 28 61 73 73 65 72 74 oncat.. (assert 1fd0: 20 28 73 74 72 65 61 6d 2d 63 6f 6e 63 61 74 20 (stream-concat 1fe0: 22 66 6f 75 72 22 29 20 22 73 74 72 65 61 6d 2d "four") "stream- 1ff0: 63 6f 6e 63 61 74 3a 20 6e 6f 6e 2d 73 74 72 65 concat: non-stre 2000: 61 6d 20 61 72 67 75 6d 65 6e 74 22 29 0d 0a 20 am argument").. 2010: 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d (assert (stream 2020: 2d 3e 6c 69 73 74 20 28 73 74 72 65 61 6d 2d 63 ->list (stream-c 2030: 6f 6e 63 61 74 20 28 73 74 72 65 61 6d 20 73 74 oncat (stream st 2040: 72 6d 31 32 33 29 29 29 20 27 28 31 20 32 20 33 rm123))) '(1 2 3 2050: 29 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 )).. (assert (s 2060: 74 72 65 61 6d 2d 3e 6c 69 73 74 20 28 73 74 72 tream->list (str 2070: 65 61 6d 2d 63 6f 6e 63 61 74 20 28 73 74 72 65 eam-concat (stre 2080: 61 6d 20 73 74 72 6d 31 32 33 20 73 74 72 6d 31 am strm123 strm1 2090: 32 33 29 29 29 20 27 28 31 20 32 20 33 20 31 20 23))) '(1 2 3 1 20a0: 32 20 33 29 29 0d 0a 20 20 0d 0a 20 20 3b 20 73 2 3)).. .. ; s 20b0: 74 72 65 61 6d 2d 63 6f 6e 73 74 61 6e 74 0d 0a tream-constant.. 20c0: 20 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 (assert (strea 20d0: 6d 2d 72 65 66 20 28 73 74 72 65 61 6d 2d 63 6f m-ref (stream-co 20e0: 6e 73 74 61 6e 74 20 31 29 20 31 30 30 29 20 31 nstant 1) 100) 1 20f0: 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 ).. (assert (st 2100: 72 65 61 6d 2d 72 65 66 20 28 73 74 72 65 61 6d ream-ref (stream 2110: 2d 63 6f 6e 73 74 61 6e 74 20 31 20 32 29 20 31 -constant 1 2) 1 2120: 30 30 29 20 31 29 0d 0a 20 20 28 61 73 73 65 72 00) 1).. (asser 2130: 74 20 28 73 74 72 65 61 6d 2d 72 65 66 20 28 73 t (stream-ref (s 2140: 74 72 65 61 6d 2d 63 6f 6e 73 74 61 6e 74 20 31 tream-constant 1 2150: 20 32 20 33 29 20 33 29 20 31 29 0d 0a 20 20 0d 2 3) 3) 1).. . 2160: 0a 20 20 3b 20 73 74 72 65 61 6d 2d 64 72 6f 70 . ; stream-drop 2170: 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 72 .. (assert (str 2180: 65 61 6d 2d 64 72 6f 70 20 22 66 6f 75 72 22 20 eam-drop "four" 2190: 73 74 72 6d 31 32 33 29 20 22 73 74 72 65 61 6d strm123) "stream 21a0: 2d 64 72 6f 70 3a 20 6e 6f 6e 2d 69 6e 74 65 67 -drop: non-integ 21b0: 65 72 20 61 72 67 75 6d 65 6e 74 22 29 0d 0a 20 er argument").. 21c0: 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d (assert (stream 21d0: 2d 64 72 6f 70 20 2d 31 20 73 74 72 6d 31 32 33 -drop -1 strm123 21e0: 29 20 22 73 74 72 65 61 6d 2d 64 72 6f 70 3a 20 ) "stream-drop: 21f0: 6e 65 67 61 74 69 76 65 20 61 72 67 75 6d 65 6e negative argumen 2200: 74 22 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 t").. (assert ( 2210: 73 74 72 65 61 6d 2d 64 72 6f 70 20 32 20 22 66 stream-drop 2 "f 2220: 6f 75 72 22 29 20 22 73 74 72 65 61 6d 2d 64 72 our") "stream-dr 2230: 6f 70 3a 20 6e 6f 6e 2d 73 74 72 65 61 6d 20 61 op: non-stream a 2240: 72 67 75 6d 65 6e 74 22 29 0d 0a 20 20 28 61 73 rgument").. (as 2250: 73 65 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c 69 sert (stream->li 2260: 73 74 20 28 73 74 72 65 61 6d 2d 64 72 6f 70 20 st (stream-drop 2270: 30 20 73 74 72 65 61 6d 2d 6e 75 6c 6c 29 29 20 0 stream-null)) 2280: 27 28 29 29 0d 0a 20 20 28 61 73 73 65 72 74 20 '()).. (assert 2290: 28 73 74 72 65 61 6d 2d 3e 6c 69 73 74 20 28 73 (stream->list (s 22a0: 74 72 65 61 6d 2d 64 72 6f 70 20 30 20 73 74 72 tream-drop 0 str 22b0: 6d 31 32 33 29 29 20 27 28 31 20 32 20 33 29 29 m123)) '(1 2 3)) 22c0: 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 72 .. (assert (str 22d0: 65 61 6d 2d 3e 6c 69 73 74 20 28 73 74 72 65 61 eam->list (strea 22e0: 6d 2d 64 72 6f 70 20 31 20 73 74 72 6d 31 32 33 m-drop 1 strm123 22f0: 29 29 20 27 28 32 20 33 29 29 0d 0a 20 20 28 61 )) '(2 3)).. (a 2300: 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c ssert (stream->l 2310: 69 73 74 20 28 73 74 72 65 61 6d 2d 64 72 6f 70 ist (stream-drop 2320: 20 35 20 73 74 72 6d 31 32 33 29 29 20 27 28 29 5 strm123)) '() 2330: 29 0d 0a 20 20 0d 0a 20 20 3b 20 73 74 72 65 61 ).. .. ; strea 2340: 6d 2d 64 72 6f 70 2d 77 68 69 6c 65 0d 0a 20 20 m-drop-while.. 2350: 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d (assert (stream- 2360: 64 72 6f 70 2d 77 68 69 6c 65 20 22 66 6f 75 72 drop-while "four 2370: 22 20 73 74 72 6d 31 32 33 29 20 22 73 74 72 65 " strm123) "stre 2380: 61 6d 2d 64 72 6f 70 2d 77 68 69 6c 65 3a 20 6e am-drop-while: n 2390: 6f 6e 2d 70 72 6f 63 65 64 75 72 61 6c 20 61 72 on-procedural ar 23a0: 67 75 6d 65 6e 74 22 29 0d 0a 20 20 28 61 73 73 gument").. (ass 23b0: 65 72 74 20 28 73 74 72 65 61 6d 2d 64 72 6f 70 ert (stream-drop 23c0: 2d 77 68 69 6c 65 20 6f 64 64 3f 20 22 66 6f 75 -while odd? "fou 23d0: 72 22 29 20 22 73 74 72 65 61 6d 2d 64 72 6f 70 r") "stream-drop 23e0: 2d 77 68 69 6c 65 3a 20 6e 6f 6e 2d 73 74 72 65 -while: non-stre 23f0: 61 6d 20 61 72 67 75 6d 65 6e 74 22 29 0d 0a 20 am argument").. 2400: 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d (assert (stream 2410: 2d 3e 6c 69 73 74 20 28 73 74 72 65 61 6d 2d 64 ->list (stream-d 2420: 72 6f 70 2d 77 68 69 6c 65 20 6f 64 64 3f 20 73 rop-while odd? s 2430: 74 72 65 61 6d 2d 6e 75 6c 6c 29 29 20 27 28 29 tream-null)) '() 2440: 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 ).. (assert (st 2450: 72 65 61 6d 2d 3e 6c 69 73 74 20 28 73 74 72 65 ream->list (stre 2460: 61 6d 2d 64 72 6f 70 2d 77 68 69 6c 65 20 6f 64 am-drop-while od 2470: 64 3f 20 73 74 72 6d 31 32 33 29 29 20 27 28 32 d? strm123)) '(2 2480: 20 33 29 29 0d 0a 20 20 28 61 73 73 65 72 74 20 3)).. (assert 2490: 28 73 74 72 65 61 6d 2d 3e 6c 69 73 74 20 28 73 (stream->list (s 24a0: 74 72 65 61 6d 2d 64 72 6f 70 2d 77 68 69 6c 65 tream-drop-while 24b0: 20 65 76 65 6e 3f 20 73 74 72 6d 31 32 33 29 29 even? strm123)) 24c0: 20 27 28 31 20 32 20 33 29 29 0d 0a 20 20 28 61 '(1 2 3)).. (a 24d0: 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c ssert (stream->l 24e0: 69 73 74 20 28 73 74 72 65 61 6d 2d 64 72 6f 70 ist (stream-drop 24f0: 2d 77 68 69 6c 65 20 70 6f 73 69 74 69 76 65 3f -while positive? 2500: 20 73 74 72 6d 31 32 33 29 29 20 27 28 29 29 0d strm123)) '()). 2510: 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 72 65 . (assert (stre 2520: 61 6d 2d 3e 6c 69 73 74 20 28 73 74 72 65 61 6d am->list (stream 2530: 2d 64 72 6f 70 2d 77 68 69 6c 65 20 6e 65 67 61 -drop-while nega 2540: 74 69 76 65 3f 20 73 74 72 6d 31 32 33 29 29 20 tive? strm123)) 2550: 27 28 31 20 32 20 33 29 29 0d 0a 20 20 0d 0a 20 '(1 2 3)).. .. 2560: 20 3b 20 73 74 72 65 61 6d 2d 66 69 6c 74 65 72 ; stream-filter 2570: 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 72 .. (assert (str 2580: 65 61 6d 2d 66 69 6c 74 65 72 20 22 66 6f 75 72 eam-filter "four 2590: 22 20 73 74 72 6d 31 32 33 29 20 22 73 74 72 65 " strm123) "stre 25a0: 61 6d 2d 66 69 6c 74 65 72 3a 20 6e 6f 6e 2d 70 am-filter: non-p 25b0: 72 6f 63 65 64 75 72 61 6c 20 61 72 67 75 6d 65 rocedural argume 25c0: 6e 74 22 29 0d 0a 20 20 28 61 73 73 65 72 74 20 nt").. (assert 25d0: 28 73 74 72 65 61 6d 2d 66 69 6c 74 65 72 20 6f (stream-filter o 25e0: 64 64 3f 20 27 28 29 29 20 22 73 74 72 65 61 6d dd? '()) "stream 25f0: 2d 66 69 6c 74 65 72 3a 20 6e 6f 6e 2d 73 74 72 -filter: non-str 2600: 65 61 6d 20 61 72 67 75 6d 65 6e 74 22 29 0d 0a eam argument").. 2610: 20 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 (assert (strea 2620: 6d 2d 6e 75 6c 6c 3f 20 28 73 74 72 65 61 6d 2d m-null? (stream- 2630: 66 69 6c 74 65 72 20 6f 64 64 3f 20 28 73 74 72 filter odd? (str 2640: 65 61 6d 29 29 29 20 23 74 29 0d 0a 20 20 28 61 eam))) #t).. (a 2650: 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c ssert (stream->l 2660: 69 73 74 20 28 73 74 72 65 61 6d 2d 66 69 6c 74 ist (stream-filt 2670: 65 72 20 6f 64 64 3f 20 73 74 72 6d 31 32 33 29 er odd? strm123) 2680: 29 20 27 28 31 20 33 29 29 0d 0a 20 20 28 61 73 ) '(1 3)).. (as 2690: 73 65 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c 69 sert (stream->li 26a0: 73 74 20 28 73 74 72 65 61 6d 2d 66 69 6c 74 65 st (stream-filte 26b0: 72 20 65 76 65 6e 3f 20 73 74 72 6d 31 32 33 29 r even? strm123) 26c0: 29 20 27 28 32 29 29 0d 0a 20 20 28 61 73 73 65 ) '(2)).. (asse 26d0: 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c 69 73 74 rt (stream->list 26e0: 20 28 73 74 72 65 61 6d 2d 66 69 6c 74 65 72 20 (stream-filter 26f0: 70 6f 73 69 74 69 76 65 3f 20 73 74 72 6d 31 32 positive? strm12 2700: 33 29 29 20 27 28 31 20 32 20 33 29 29 0d 0a 20 3)) '(1 2 3)).. 2710: 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d (assert (stream 2720: 2d 3e 6c 69 73 74 20 28 73 74 72 65 61 6d 2d 66 ->list (stream-f 2730: 69 6c 74 65 72 20 6e 65 67 61 74 69 76 65 3f 20 ilter negative? 2740: 73 74 72 6d 31 32 33 29 29 20 27 28 29 29 0d 0a strm123)) '()).. 2750: 20 20 28 6c 65 74 20 6c 6f 6f 70 20 28 28 6e 20 (let loop ((n 2760: 31 30 29 29 0d 0a 20 20 20 20 28 61 73 73 65 72 10)).. (asser 2770: 74 20 28 6f 64 64 3f 20 28 73 74 72 65 61 6d 2d t (odd? (stream- 2780: 72 65 66 20 28 73 74 72 65 61 6d 2d 66 69 6c 74 ref (stream-filt 2790: 65 72 20 6f 64 64 3f 20 28 73 74 72 65 61 6d 2d er odd? (stream- 27a0: 66 72 6f 6d 20 30 29 29 20 6e 29 29 20 23 74 29 from 0)) n)) #t) 27b0: 0d 0a 20 20 20 20 28 69 66 20 28 70 6f 73 69 74 .. (if (posit 27c0: 69 76 65 3f 20 6e 29 20 28 6c 6f 6f 70 20 28 2d ive? n) (loop (- 27d0: 20 6e 20 31 29 29 29 29 0d 0a 20 20 28 6c 65 74 n 1)))).. (let 27e0: 20 6c 6f 6f 70 20 28 28 6e 20 31 30 29 29 0d 0a loop ((n 10)).. 27f0: 20 20 20 20 28 61 73 73 65 72 74 20 28 65 76 65 (assert (eve 2800: 6e 3f 20 28 73 74 72 65 61 6d 2d 72 65 66 20 28 n? (stream-ref ( 2810: 73 74 72 65 61 6d 2d 66 69 6c 74 65 72 20 6f 64 stream-filter od 2820: 64 3f 20 28 73 74 72 65 61 6d 2d 66 72 6f 6d 20 d? (stream-from 2830: 30 29 29 20 6e 29 29 20 23 66 29 0d 0a 20 20 20 0)) n)) #f).. 2840: 20 28 69 66 20 28 70 6f 73 69 74 69 76 65 3f 20 (if (positive? 2850: 6e 29 20 28 6c 6f 6f 70 20 28 2d 20 6e 20 31 29 n) (loop (- n 1) 2860: 29 29 29 0d 0a 20 20 0d 0a 20 20 3b 20 73 74 72 ))).. .. ; str 2870: 65 61 6d 2d 66 6f 6c 64 0d 0a 20 20 28 61 73 73 eam-fold.. (ass 2880: 65 72 74 20 28 73 74 72 65 61 6d 2d 66 6f 6c 64 ert (stream-fold 2890: 20 22 66 6f 75 72 22 20 30 20 73 74 72 6d 31 32 "four" 0 strm12 28a0: 33 29 20 22 73 74 72 65 61 6d 2d 66 6f 6c 64 3a 3) "stream-fold: 28b0: 20 6e 6f 6e 2d 70 72 6f 63 65 64 75 72 61 6c 20 non-procedural 28c0: 61 72 67 75 6d 65 6e 74 22 29 0d 0a 20 20 28 61 argument").. (a 28d0: 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d 66 6f ssert (stream-fo 28e0: 6c 64 20 2b 20 30 20 27 28 29 29 20 22 73 74 72 ld + 0 '()) "str 28f0: 65 61 6d 2d 66 6f 6c 64 3a 20 6e 6f 6e 2d 73 74 eam-fold: non-st 2900: 72 65 61 6d 20 61 72 67 75 6d 65 6e 74 22 29 0d ream argument"). 2910: 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 72 65 . (assert (stre 2920: 61 6d 2d 66 6f 6c 64 20 2b 20 30 20 73 74 72 6d am-fold + 0 strm 2930: 31 32 33 29 20 36 29 0d 0a 20 20 0d 0a 20 20 3b 123) 6).. .. ; 2940: 20 73 74 72 65 61 6d 2d 66 6f 72 2d 65 61 63 68 stream-for-each 2950: 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 72 .. (assert (str 2960: 65 61 6d 2d 66 6f 72 2d 65 61 63 68 20 22 66 6f eam-for-each "fo 2970: 75 72 22 20 73 74 72 6d 31 32 33 29 20 22 73 74 ur" strm123) "st 2980: 72 65 61 6d 2d 66 6f 72 2d 65 61 63 68 3a 20 6e ream-for-each: n 2990: 6f 6e 2d 70 72 6f 63 65 64 75 72 61 6c 20 61 72 on-procedural ar 29a0: 67 75 6d 65 6e 74 22 29 0d 0a 20 20 28 61 73 73 gument").. (ass 29b0: 65 72 74 20 28 73 74 72 65 61 6d 2d 66 6f 72 2d ert (stream-for- 29c0: 65 61 63 68 20 64 69 73 70 6c 61 79 29 20 22 73 each display) "s 29d0: 74 72 65 61 6d 2d 66 6f 72 2d 65 61 63 68 3a 20 tream-for-each: 29e0: 6e 6f 20 73 74 72 65 61 6d 20 61 72 67 75 6d 65 no stream argume 29f0: 6e 74 73 22 29 0d 0a 20 20 28 61 73 73 65 72 74 nts").. (assert 2a00: 20 28 73 74 72 65 61 6d 2d 66 6f 72 2d 65 61 63 (stream-for-eac 2a10: 68 20 64 69 73 70 6c 61 79 20 22 66 6f 75 72 22 h display "four" 2a20: 29 20 22 73 74 72 65 61 6d 2d 66 6f 72 2d 65 61 ) "stream-for-ea 2a30: 63 68 3a 20 6e 6f 6e 2d 73 74 72 65 61 6d 20 61 ch: non-stream a 2a40: 72 67 75 6d 65 6e 74 22 29 0d 0a 20 20 28 61 73 rgument").. (as 2a50: 73 65 72 74 20 28 6c 65 74 20 28 28 73 75 6d 20 sert (let ((sum 2a60: 30 29 29 20 28 73 74 72 65 61 6d 2d 66 6f 72 2d 0)) (stream-for- 2a70: 65 61 63 68 20 28 6c 61 6d 62 64 61 20 28 78 29 each (lambda (x) 2a80: 20 28 73 65 74 21 20 73 75 6d 20 28 2b 20 73 75 (set! sum (+ su 2a90: 6d 20 78 29 29 29 20 73 74 72 6d 31 32 33 29 20 m x))) strm123) 2aa0: 73 75 6d 29 20 36 29 0d 0a 0d 0a 20 20 3b 20 73 sum) 6).... ; s 2ab0: 74 72 65 61 6d 2d 66 72 6f 6d 0d 0a 20 20 28 61 tream-from.. (a 2ac0: 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d 66 72 ssert (stream-fr 2ad0: 6f 6d 20 22 66 6f 75 72 22 29 20 22 73 74 72 65 om "four") "stre 2ae0: 61 6d 2d 66 72 6f 6d 3a 20 6e 6f 6e 2d 6e 75 6d am-from: non-num 2af0: 65 72 69 63 20 73 74 61 72 74 69 6e 67 20 6e 75 eric starting nu 2b00: 6d 62 65 72 22 29 0d 0a 20 20 28 61 73 73 65 72 mber").. (asser 2b10: 74 20 28 73 74 72 65 61 6d 2d 66 72 6f 6d 20 31 t (stream-from 1 2b20: 20 22 66 6f 75 72 22 29 20 22 73 74 72 65 61 6d "four") "stream 2b30: 2d 66 72 6f 6d 3a 20 6e 6f 6e 2d 6e 75 6d 65 72 -from: non-numer 2b40: 69 63 20 73 74 65 70 20 73 69 7a 65 22 29 0d 0a ic step size").. 2b50: 20 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 (assert (strea 2b60: 6d 2d 72 65 66 20 28 73 74 72 65 61 6d 2d 66 72 m-ref (stream-fr 2b70: 6f 6d 20 30 29 20 31 30 30 29 20 31 30 30 29 0d om 0) 100) 100). 2b80: 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 72 65 . (assert (stre 2b90: 61 6d 2d 72 65 66 20 28 73 74 72 65 61 6d 2d 66 am-ref (stream-f 2ba0: 72 6f 6d 20 31 20 32 29 20 31 30 30 29 20 32 30 rom 1 2) 100) 20 2bb0: 31 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 1).. (assert (s 2bc0: 74 72 65 61 6d 2d 72 65 66 20 28 73 74 72 65 61 tream-ref (strea 2bd0: 6d 2d 66 72 6f 6d 20 30 20 2d 31 29 20 31 30 30 m-from 0 -1) 100 2be0: 29 20 2d 31 30 30 29 0d 0a 20 20 0d 0a 20 20 3b ) -100).. .. ; 2bf0: 20 73 74 72 65 61 6d 2d 69 74 65 72 61 74 65 0d stream-iterate. 2c00: 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 72 65 . (assert (stre 2c10: 61 6d 2d 69 74 65 72 61 74 65 20 22 66 6f 75 72 am-iterate "four 2c20: 22 20 30 29 20 22 73 74 72 65 61 6d 2d 69 74 65 " 0) "stream-ite 2c30: 72 61 74 65 3a 20 6e 6f 6e 2d 70 72 6f 63 65 64 rate: non-proced 2c40: 75 72 61 6c 20 61 72 67 75 6d 65 6e 74 22 29 0d ural argument"). 2c50: 0a 20 20 0d 0a 20 20 28 61 73 73 65 72 74 20 28 . .. (assert ( 2c60: 73 74 72 65 61 6d 2d 3e 6c 69 73 74 20 33 20 28 stream->list 3 ( 2c70: 73 74 72 65 61 6d 2d 69 74 65 72 61 74 65 20 28 stream-iterate ( 2c80: 6c 73 65 63 20 2b 20 31 29 20 31 29 29 20 27 28 lsec + 1) 1)) '( 2c90: 31 20 32 20 33 29 29 0d 0a 20 20 0d 0a 20 20 3b 1 2 3)).. .. ; 2ca0: 20 73 74 72 65 61 6d 2d 6c 65 6e 67 74 68 0d 0a stream-length.. 2cb0: 20 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 (assert (strea 2cc0: 6d 2d 6c 65 6e 67 74 68 20 22 66 6f 75 72 22 29 m-length "four") 2cd0: 20 22 73 74 72 65 61 6d 2d 6c 65 6e 67 74 68 3a "stream-length: 2ce0: 20 6e 6f 6e 2d 73 74 72 65 61 6d 20 61 72 67 75 non-stream argu 2cf0: 6d 65 6e 74 22 29 0d 0a 20 20 28 61 73 73 65 72 ment").. (asser 2d00: 74 20 28 73 74 72 65 61 6d 2d 6c 65 6e 67 74 68 t (stream-length 2d10: 20 28 73 74 72 65 61 6d 29 29 20 30 29 0d 0a 20 (stream)) 0).. 2d20: 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d (assert (stream 2d30: 2d 6c 65 6e 67 74 68 20 73 74 72 6d 31 32 33 29 -length strm123) 2d40: 20 33 29 0d 0a 20 20 0d 0a 20 20 3b 20 73 74 72 3).. .. ; str 2d50: 65 61 6d 2d 6c 65 74 0d 0a 20 20 28 61 73 73 65 eam-let.. (asse 2d60: 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c 69 73 74 rt (stream->list 2d70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 73 .. (s 2d80: 74 72 65 61 6d 2d 6c 65 74 20 6c 6f 6f 70 20 28 tream-let loop ( 2d90: 28 73 74 72 6d 20 73 74 72 6d 31 32 33 29 29 0d (strm strm123)). 2da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 . ( 2db0: 69 66 20 28 73 74 72 65 61 6d 2d 6e 75 6c 6c 3f if (stream-null? 2dc0: 20 73 74 72 6d 29 0d 0a 20 20 20 20 20 20 20 20 strm).. 2dd0: 20 20 20 20 20 20 20 20 20 20 73 74 72 65 61 6d stream 2de0: 2d 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 -null.. 2df0: 20 20 20 20 20 20 20 20 20 28 73 74 72 65 61 6d (stream 2e00: 2d 63 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 -cons.. 2e10: 20 20 20 20 20 20 20 20 20 20 20 28 2a 20 32 20 (* 2 2e20: 28 73 74 72 65 61 6d 2d 63 61 72 20 73 74 72 6d (stream-car strm 2e30: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 )).. 2e40: 20 20 20 20 20 20 20 20 28 6c 6f 6f 70 20 28 73 (loop (s 2e50: 74 72 65 61 6d 2d 63 64 72 20 73 74 72 6d 29 29 tream-cdr strm)) 2e60: 29 29 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 )))).. 2e70: 27 28 32 20 34 20 36 29 29 0d 0a 20 20 0d 0a 20 '(2 4 6)).. .. 2e80: 20 3b 20 73 74 72 65 61 6d 2d 6d 61 70 0d 0a 20 ; stream-map.. 2e90: 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d (assert (stream 2ea0: 2d 6d 61 70 20 22 66 6f 75 72 22 20 73 74 72 6d -map "four" strm 2eb0: 31 32 33 29 20 22 73 74 72 65 61 6d 2d 6d 61 70 123) "stream-map 2ec0: 3a 20 6e 6f 6e 2d 70 72 6f 63 65 64 75 72 61 6c : non-procedural 2ed0: 20 61 72 67 75 6d 65 6e 74 22 29 0d 0a 20 20 28 argument").. ( 2ee0: 61 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d 6d assert (stream-m 2ef0: 61 70 20 6f 64 64 3f 29 20 22 73 74 72 65 61 6d ap odd?) "stream 2f00: 2d 6d 61 70 3a 20 6e 6f 20 73 74 72 65 61 6d 20 -map: no stream 2f10: 61 72 67 75 6d 65 6e 74 73 22 29 0d 0a 20 20 28 arguments").. ( 2f20: 61 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d 6d assert (stream-m 2f30: 61 70 20 6f 64 64 3f 20 22 66 6f 75 72 22 29 20 ap odd? "four") 2f40: 22 73 74 72 65 61 6d 2d 6d 61 70 3a 20 6e 6f 6e "stream-map: non 2f50: 2d 73 74 72 65 61 6d 20 61 72 67 75 6d 65 6e 74 -stream argument 2f60: 22 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 ").. (assert (s 2f70: 74 72 65 61 6d 2d 3e 6c 69 73 74 20 28 73 74 72 tream->list (str 2f80: 65 61 6d 2d 6d 61 70 20 2d 20 73 74 72 6d 31 32 eam-map - strm12 2f90: 33 29 29 20 27 28 2d 31 20 2d 32 20 2d 33 29 29 3)) '(-1 -2 -3)) 2fa0: 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 72 .. (assert (str 2fb0: 65 61 6d 2d 3e 6c 69 73 74 20 28 73 74 72 65 61 eam->list (strea 2fc0: 6d 2d 6d 61 70 20 2b 20 73 74 72 6d 31 32 33 20 m-map + strm123 2fd0: 73 74 72 6d 31 32 33 29 29 20 27 28 32 20 34 20 strm123)) '(2 4 2fe0: 36 29 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 6)).. (assert ( 2ff0: 73 74 72 65 61 6d 2d 3e 6c 69 73 74 20 28 73 74 stream->list (st 3000: 72 65 61 6d 2d 6d 61 70 20 2b 20 73 74 72 6d 31 ream-map + strm1 3010: 32 33 20 28 73 74 72 65 61 6d 2d 66 72 6f 6d 20 23 (stream-from 3020: 31 29 29 29 20 27 28 32 20 34 20 36 29 29 0d 0a 1))) '(2 4 6)).. 3030: 20 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 (assert (strea 3040: 6d 2d 3e 6c 69 73 74 20 28 73 74 72 65 61 6d 2d m->list (stream- 3050: 6d 61 70 20 2b 20 28 73 74 72 65 61 6d 2d 66 72 map + (stream-fr 3060: 6f 6d 20 31 29 20 73 74 72 6d 31 32 33 29 29 20 om 1) strm123)) 3070: 27 28 32 20 34 20 36 29 29 0d 0a 20 20 28 61 73 '(2 4 6)).. (as 3080: 73 65 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c 69 sert (stream->li 3090: 73 74 20 28 73 74 72 65 61 6d 2d 6d 61 70 20 2b st (stream-map + 30a0: 20 73 74 72 6d 31 32 33 20 73 74 72 6d 31 32 33 strm123 strm123 30b0: 20 73 74 72 6d 31 32 33 29 29 20 27 28 33 20 36 strm123)) '(3 6 30c0: 20 39 29 29 0d 0a 20 20 0d 0a 20 20 3b 20 73 74 9)).. .. ; st 30d0: 72 65 61 6d 2d 6d 61 74 63 68 0d 0a 20 20 28 61 ream-match.. (a 30e0: 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d 6d 61 ssert (stream-ma 30f0: 74 63 68 20 27 28 31 20 32 20 33 29 20 28 5f 20 tch '(1 2 3) (_ 3100: 27 6f 6b 29 29 20 22 73 74 72 65 61 6d 2d 6d 61 'ok)) "stream-ma 3110: 74 63 68 3a 20 6e 6f 6e 2d 73 74 72 65 61 6d 20 tch: non-stream 3120: 61 72 67 75 6d 65 6e 74 22 29 0d 0a 20 20 28 61 argument").. (a 3130: 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d 6d 61 ssert (stream-ma 3140: 74 63 68 20 73 74 72 6d 31 32 33 20 28 28 29 20 tch strm123 (() 3150: 34 32 29 29 20 22 73 74 72 65 61 6d 2d 6d 61 74 42)) "stream-mat 3160: 63 68 3a 20 70 61 74 74 65 72 6e 20 66 61 69 6c ch: pattern fail 3170: 75 72 65 22 29 0d 0a 20 20 28 61 73 73 65 72 74 ure").. (assert 3180: 20 28 73 74 72 65 61 6d 2d 6d 61 74 63 68 20 73 (stream-match s 3190: 74 72 65 61 6d 2d 6e 75 6c 6c 20 28 28 29 20 27 tream-null (() ' 31a0: 6f 6b 29 29 20 27 6f 6b 29 0d 0a 20 20 28 61 73 ok)) 'ok).. (as 31b0: 73 65 72 74 20 28 73 74 72 65 61 6d 2d 6d 61 74 sert (stream-mat 31c0: 63 68 20 73 74 72 6d 31 32 33 20 28 28 29 20 27 ch strm123 (() ' 31d0: 6e 6f 29 20 28 65 6c 73 65 20 27 6f 6b 29 29 20 no) (else 'ok)) 31e0: 27 6f 6b 29 0d 0a 20 20 28 61 73 73 65 72 74 20 'ok).. (assert 31f0: 28 73 74 72 65 61 6d 2d 6d 61 74 63 68 20 28 73 (stream-match (s 3200: 74 72 65 61 6d 20 31 29 20 28 28 29 20 27 6e 6f tream 1) (() 'no 3210: 29 20 28 28 61 29 20 61 29 29 20 31 29 0d 0a 20 ) ((a) a)) 1).. 3220: 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d (assert (stream 3230: 2d 6d 61 74 63 68 20 28 73 74 72 65 61 6d 20 31 -match (stream 1 3240: 29 20 28 28 29 20 27 6e 6f 29 20 28 28 5f 29 20 ) (() 'no) ((_) 3250: 27 6f 6b 29 29 20 27 6f 6b 29 0d 0a 20 20 28 61 'ok)) 'ok).. (a 3260: 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d 6d 61 ssert (stream-ma 3270: 74 63 68 20 73 74 72 6d 31 32 33 20 28 28 61 20 tch strm123 ((a 3280: 62 20 63 29 20 28 6c 69 73 74 20 61 20 62 20 63 b c) (list a b c 3290: 29 29 29 20 27 28 31 20 32 20 33 29 29 0d 0a 20 ))) '(1 2 3)).. 32a0: 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d (assert (stream 32b0: 2d 6d 61 74 63 68 20 73 74 72 6d 31 32 33 20 28 -match strm123 ( 32c0: 28 61 20 2e 20 5f 29 20 61 29 29 20 31 29 0d 0a (a . _) a)) 1).. 32d0: 20 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 (assert (strea 32e0: 6d 2d 6d 61 74 63 68 20 73 74 72 6d 31 32 33 20 m-match strm123 32f0: 28 28 61 20 62 20 2e 20 5f 29 20 28 6c 69 73 74 ((a b . _) (list 3300: 20 61 20 62 29 29 29 20 27 28 31 20 32 29 29 0d a b))) '(1 2)). 3310: 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 72 65 . (assert (stre 3320: 61 6d 2d 6d 61 74 63 68 20 73 74 72 6d 31 32 33 am-match strm123 3330: 20 28 28 61 20 62 20 2e 20 63 29 20 28 6c 69 73 ((a b . c) (lis 3340: 74 20 61 20 62 20 28 73 74 72 65 61 6d 2d 63 61 t a b (stream-ca 3350: 72 20 63 29 29 29 29 20 27 28 31 20 32 20 33 29 r c)))) '(1 2 3) 3360: 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 ).. (assert (st 3370: 72 65 61 6d 2d 6d 61 74 63 68 20 73 74 72 6d 31 ream-match strm1 3380: 32 33 20 28 73 20 28 73 74 72 65 61 6d 2d 3e 6c 23 (s (stream->l 3390: 69 73 74 20 73 29 29 29 20 27 28 31 20 32 20 33 ist s))) '(1 2 3 33a0: 29 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 )).. (assert (s 33b0: 74 72 65 61 6d 2d 6d 61 74 63 68 20 73 74 72 6d tream-match strm 33c0: 31 32 33 20 28 28 61 20 2e 20 5f 29 20 28 3d 20 123 ((a . _) (= 33d0: 61 20 31 29 20 27 6f 6b 29 29 20 27 6f 6b 29 0d a 1) 'ok)) 'ok). 33e0: 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 72 65 . (assert (stre 33f0: 61 6d 2d 6d 61 74 63 68 20 73 74 72 6d 31 32 33 am-match strm123 3400: 20 28 28 61 20 2e 20 5f 29 20 28 3d 20 61 20 32 ((a . _) (= a 2 3410: 29 20 27 79 65 73 29 20 28 5f 20 27 6e 6f 29 29 ) 'yes) (_ 'no)) 3420: 20 27 6e 6f 29 0d 0a 20 20 28 61 73 73 65 72 74 'no).. (assert 3430: 20 28 73 74 72 65 61 6d 2d 6d 61 74 63 68 20 73 (stream-match s 3440: 74 72 6d 31 32 33 20 28 28 61 20 62 20 63 29 20 trm123 ((a b c) 3450: 28 3d 20 61 20 62 29 20 27 79 65 73 29 20 28 5f (= a b) 'yes) (_ 3460: 20 27 6e 6f 29 29 20 27 6e 6f 29 0d 0a 20 20 28 'no)) 'no).. ( 3470: 61 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d 6d assert (stream-m 3480: 61 74 63 68 20 28 73 74 72 65 61 6d 20 31 20 31 atch (stream 1 1 3490: 20 32 29 20 28 28 61 20 62 20 63 29 20 28 3d 20 2) ((a b c) (= 34a0: 61 20 62 29 20 27 79 65 73 29 20 28 5f 20 27 6e a b) 'yes) (_ 'n 34b0: 6f 29 29 20 27 79 65 73 29 0d 0a 20 20 0d 0a 20 o)) 'yes).. .. 34c0: 20 3b 20 73 74 72 65 61 6d 2d 6f 66 0d 0a 20 20 ; stream-of.. 34d0: 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d (assert (stream- 34e0: 3e 6c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20 >list.. 34f0: 20 20 20 28 73 74 72 65 61 6d 2d 6f 66 20 28 2b (stream-of (+ 3500: 20 79 20 36 29 0d 0a 20 20 20 20 20 20 20 20 20 y 6).. 3510: 20 20 20 20 20 28 78 20 69 6e 20 28 73 74 72 65 (x in (stre 3520: 61 6d 2d 72 61 6e 67 65 20 31 20 36 29 29 0d 0a am-range 1 6)).. 3530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6f (o 3540: 64 64 3f 20 78 29 0d 0a 20 20 20 20 20 20 20 20 dd? x).. 3550: 20 20 20 20 20 20 28 79 20 69 73 20 28 2a 20 78 (y is (* x 3560: 20 78 29 29 29 29 20 27 28 37 20 31 35 20 33 31 x)))) '(7 15 31 3570: 29 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 )).. (assert (s 3580: 74 72 65 61 6d 2d 3e 6c 69 73 74 0d 0a 20 20 20 tream->list.. 3590: 20 20 20 20 20 20 20 20 20 28 73 74 72 65 61 6d (stream 35a0: 2d 6f 66 20 28 2a 20 78 20 79 29 0d 0a 20 20 20 -of (* x y).. 35b0: 20 20 20 20 20 20 20 20 20 20 20 28 78 20 69 6e (x in 35c0: 20 28 73 74 72 65 61 6d 2d 72 61 6e 67 65 20 31 (stream-range 1 35d0: 20 34 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 4)).. 35e0: 20 20 20 20 28 79 20 69 6e 20 28 73 74 72 65 61 (y in (strea 35f0: 6d 2d 72 61 6e 67 65 20 31 20 35 29 29 29 29 0d m-range 1 5)))). 3600: 0a 20 20 20 20 20 20 20 20 20 20 27 28 31 20 32 . '(1 2 3610: 20 33 20 34 20 32 20 34 20 36 20 38 20 33 20 36 3 4 2 4 6 8 3 6 3620: 20 39 20 31 32 29 29 0d 0a 20 20 28 61 73 73 65 9 12)).. (asse 3630: 72 74 20 28 73 74 72 65 61 6d 2d 63 61 72 20 28 rt (stream-car ( 3640: 73 74 72 65 61 6d 2d 6f 66 20 31 29 29 20 31 29 stream-of 1)) 1) 3650: 0d 0a 0d 0a 20 20 3b 20 73 74 72 65 61 6d 2d 72 .... ; stream-r 3660: 61 6e 67 65 0d 0a 20 20 28 61 73 73 65 72 74 20 ange.. (assert 3670: 28 73 74 72 65 61 6d 2d 72 61 6e 67 65 20 22 66 (stream-range "f 3680: 6f 75 72 22 20 30 29 20 22 73 74 72 65 61 6d 2d our" 0) "stream- 3690: 72 61 6e 67 65 3a 20 6e 6f 6e 2d 6e 75 6d 65 72 range: non-numer 36a0: 69 63 20 73 74 61 72 74 69 6e 67 20 6e 75 6d 62 ic starting numb 36b0: 65 72 22 29 0d 0a 20 20 28 61 73 73 65 72 74 20 er").. (assert 36c0: 28 73 74 72 65 61 6d 2d 72 61 6e 67 65 20 30 20 (stream-range 0 36d0: 22 66 6f 75 72 22 29 20 22 73 74 72 65 61 6d 2d "four") "stream- 36e0: 72 61 6e 67 65 3a 20 6e 6f 6e 2d 6e 75 6d 65 72 range: non-numer 36f0: 69 63 20 65 6e 64 69 6e 67 20 6e 75 6d 62 65 72 ic ending number 3700: 22 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 ").. (assert (s 3710: 74 72 65 61 6d 2d 72 61 6e 67 65 20 31 20 32 20 tream-range 1 2 3720: 22 74 68 72 65 65 22 29 20 22 73 74 72 65 61 6d "three") "stream 3730: 2d 72 61 6e 67 65 3a 20 6e 6f 6e 2d 6e 75 6d 65 -range: non-nume 3740: 72 69 63 20 73 74 65 70 20 73 69 7a 65 22 29 0d ric step size"). 3750: 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 72 65 . (assert (stre 3760: 61 6d 2d 3e 6c 69 73 74 20 28 73 74 72 65 61 6d am->list (stream 3770: 2d 72 61 6e 67 65 20 30 20 35 29 29 20 27 28 30 -range 0 5)) '(0 3780: 20 31 20 32 20 33 20 34 29 29 0d 0a 20 20 28 61 1 2 3 4)).. (a 3790: 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c ssert (stream->l 37a0: 69 73 74 20 28 73 74 72 65 61 6d 2d 72 61 6e 67 ist (stream-rang 37b0: 65 20 35 20 30 29 29 20 27 28 35 20 34 20 33 20 e 5 0)) '(5 4 3 37c0: 32 20 31 29 29 0d 0a 20 20 28 61 73 73 65 72 74 2 1)).. (assert 37d0: 20 28 73 74 72 65 61 6d 2d 3e 6c 69 73 74 20 28 (stream->list ( 37e0: 73 74 72 65 61 6d 2d 72 61 6e 67 65 20 30 20 35 stream-range 0 5 37f0: 20 32 29 29 20 27 28 30 20 32 20 34 29 29 0d 0a 2)) '(0 2 4)).. 3800: 20 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 (assert (strea 3810: 6d 2d 3e 6c 69 73 74 20 28 73 74 72 65 61 6d 2d m->list (stream- 3820: 72 61 6e 67 65 20 35 20 30 20 2d 32 29 29 20 27 range 5 0 -2)) ' 3830: 28 35 20 33 20 31 29 29 0d 0a 20 20 28 61 73 73 (5 3 1)).. (ass 3840: 65 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c 69 73 ert (stream->lis 3850: 74 20 28 73 74 72 65 61 6d 2d 72 61 6e 67 65 20 t (stream-range 3860: 30 20 31 20 2d 31 29 29 20 27 28 29 29 0d 0a 20 0 1 -1)) '()).. 3870: 20 0d 0a 20 20 3b 20 73 74 72 65 61 6d 2d 72 65 .. ; stream-re 3880: 66 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 f.. (assert (st 3890: 72 65 61 6d 2d 72 65 66 20 27 28 29 20 34 29 20 ream-ref '() 4) 38a0: 22 73 74 72 65 61 6d 2d 72 65 66 3a 20 6e 6f 6e "stream-ref: non 38b0: 2d 73 74 72 65 61 6d 20 61 72 67 75 6d 65 6e 74 -stream argument 38c0: 22 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 ").. (assert (s 38d0: 74 72 65 61 6d 2d 72 65 66 20 6e 61 74 73 20 33 tream-ref nats 3 38e0: 2e 35 29 20 22 73 74 72 65 61 6d 2d 72 65 66 3a .5) "stream-ref: 38f0: 20 6e 6f 6e 2d 69 6e 74 65 67 65 72 20 61 72 67 non-integer arg 3900: 75 6d 65 6e 74 22 29 0d 0a 20 20 28 61 73 73 65 ument").. (asse 3910: 72 74 20 28 73 74 72 65 61 6d 2d 72 65 66 20 6e rt (stream-ref n 3920: 61 74 73 20 2d 33 29 20 22 73 74 72 65 61 6d 2d ats -3) "stream- 3930: 72 65 66 3a 20 6e 65 67 61 74 69 76 65 20 61 72 ref: negative ar 3940: 67 75 6d 65 6e 74 22 29 0d 0a 20 20 28 61 73 73 gument").. (ass 3950: 65 72 74 20 28 73 74 72 65 61 6d 2d 72 65 66 20 ert (stream-ref 3960: 73 74 72 6d 31 32 33 20 35 29 20 22 73 74 72 65 strm123 5) "stre 3970: 61 6d 2d 72 65 66 3a 20 62 65 79 6f 6e 64 20 65 am-ref: beyond e 3980: 6e 64 20 6f 66 20 73 74 72 65 61 6d 22 29 0d 0a nd of stream").. 3990: 20 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 (assert (strea 39a0: 6d 2d 72 65 66 20 73 74 72 6d 31 32 33 20 30 29 m-ref strm123 0) 39b0: 20 31 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 1).. (assert ( 39c0: 73 74 72 65 61 6d 2d 72 65 66 20 73 74 72 6d 31 stream-ref strm1 39d0: 32 33 20 31 29 20 32 29 0d 0a 20 20 28 61 73 73 23 1) 2).. (ass 39e0: 65 72 74 20 28 73 74 72 65 61 6d 2d 72 65 66 20 ert (stream-ref 39f0: 73 74 72 6d 31 32 33 20 32 29 20 33 29 0d 0a 20 strm123 2) 3).. 3a00: 20 0d 0a 20 20 3b 20 73 74 72 65 61 6d 2d 72 65 .. ; stream-re 3a10: 76 65 72 73 65 0d 0a 20 20 28 61 73 73 65 72 74 verse.. (assert 3a20: 20 28 73 74 72 65 61 6d 2d 72 65 76 65 72 73 65 (stream-reverse 3a30: 20 27 28 29 29 20 22 73 74 72 65 61 6d 2d 72 65 '()) "stream-re 3a40: 76 65 72 73 65 3a 20 6e 6f 6e 2d 73 74 72 65 61 verse: non-strea 3a50: 6d 20 61 72 67 75 6d 65 6e 74 22 29 0d 0a 20 20 m argument").. 3a60: 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d (assert (stream- 3a70: 3e 6c 69 73 74 20 28 73 74 72 65 61 6d 2d 72 65 >list (stream-re 3a80: 76 65 72 73 65 20 28 73 74 72 65 61 6d 29 29 29 verse (stream))) 3a90: 20 27 28 29 29 0d 0a 20 20 28 61 73 73 65 72 74 '()).. (assert 3aa0: 20 28 73 74 72 65 61 6d 2d 3e 6c 69 73 74 20 28 (stream->list ( 3ab0: 73 74 72 65 61 6d 2d 72 65 76 65 72 73 65 20 73 stream-reverse s 3ac0: 74 72 6d 31 32 33 29 29 20 27 28 33 20 32 20 31 trm123)) '(3 2 1 3ad0: 29 29 0d 0a 20 20 0d 0a 20 20 3b 20 73 74 72 65 )).. .. ; stre 3ae0: 61 6d 2d 73 63 61 6e 0d 0a 20 20 28 61 73 73 65 am-scan.. (asse 3af0: 72 74 20 28 73 74 72 65 61 6d 2d 73 63 61 6e 20 rt (stream-scan 3b00: 22 66 6f 75 72 22 20 30 20 73 74 72 6d 31 32 33 "four" 0 strm123 3b10: 29 20 22 73 74 72 65 61 6d 2d 73 63 61 6e 3a 20 ) "stream-scan: 3b20: 6e 6f 6e 2d 70 72 6f 63 65 64 75 72 61 6c 20 61 non-procedural a 3b30: 72 67 75 6d 65 6e 74 22 29 0d 0a 20 20 28 61 73 rgument").. (as 3b40: 73 65 72 74 20 28 73 74 72 65 61 6d 2d 73 63 61 sert (stream-sca 3b50: 6e 20 2b 20 30 20 27 28 29 29 20 22 73 74 72 65 n + 0 '()) "stre 3b60: 61 6d 2d 73 63 61 6e 3a 20 6e 6f 6e 2d 73 74 72 am-scan: non-str 3b70: 65 61 6d 20 61 72 67 75 6d 65 6e 74 22 29 0d 0a eam argument").. 3b80: 20 20 28 61 73 73 65 72 74 20 28 73 74 72 65 61 (assert (strea 3b90: 6d 2d 3e 6c 69 73 74 20 28 73 74 72 65 61 6d 2d m->list (stream- 3ba0: 73 63 61 6e 20 2b 20 30 20 73 74 72 6d 31 32 33 scan + 0 strm123 3bb0: 29 29 20 27 28 30 20 31 20 33 20 36 29 29 0d 0a )) '(0 1 3 6)).. 3bc0: 20 20 0d 0a 20 20 3b 20 73 74 72 65 61 6d 2d 74 .. ; stream-t 3bd0: 61 6b 65 0d 0a 20 20 28 61 73 73 65 72 74 20 28 ake.. (assert ( 3be0: 73 74 72 65 61 6d 2d 74 61 6b 65 20 35 20 22 66 stream-take 5 "f 3bf0: 6f 75 72 22 29 20 22 73 74 72 65 61 6d 2d 74 61 our") "stream-ta 3c00: 6b 65 3a 20 6e 6f 6e 2d 73 74 72 65 61 6d 20 61 ke: non-stream a 3c10: 72 67 75 6d 65 6e 74 22 29 0d 0a 20 20 28 61 73 rgument").. (as 3c20: 73 65 72 74 20 28 73 74 72 65 61 6d 2d 74 61 6b sert (stream-tak 3c30: 65 20 22 66 6f 75 72 22 20 73 74 72 6d 31 32 33 e "four" strm123 3c40: 29 20 22 73 74 72 65 61 6d 2d 74 61 6b 65 3a 20 ) "stream-take: 3c50: 6e 6f 6e 2d 69 6e 74 65 67 65 72 20 61 72 67 75 non-integer argu 3c60: 6d 65 6e 74 22 29 0d 0a 20 20 28 61 73 73 65 72 ment").. (asser 3c70: 74 20 28 73 74 72 65 61 6d 2d 74 61 6b 65 20 2d t (stream-take - 3c80: 34 20 73 74 72 6d 31 32 33 29 20 22 73 74 72 65 4 strm123) "stre 3c90: 61 6d 2d 74 61 6b 65 3a 20 6e 65 67 61 74 69 76 am-take: negativ 3ca0: 65 20 61 72 67 75 6d 65 6e 74 22 29 0d 0a 20 20 e argument").. 3cb0: 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d (assert (stream- 3cc0: 3e 6c 69 73 74 20 28 73 74 72 65 61 6d 2d 74 61 >list (stream-ta 3cd0: 6b 65 20 35 20 73 74 72 65 61 6d 2d 6e 75 6c 6c ke 5 stream-null 3ce0: 29 29 20 27 28 29 29 0d 0a 20 20 28 61 73 73 65 )) '()).. (asse 3cf0: 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c 69 73 74 rt (stream->list 3d00: 20 28 73 74 72 65 61 6d 2d 74 61 6b 65 20 30 20 (stream-take 0 3d10: 73 74 72 65 61 6d 2d 6e 75 6c 6c 29 29 20 27 28 stream-null)) '( 3d20: 29 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 )).. (assert (s 3d30: 74 72 65 61 6d 2d 3e 6c 69 73 74 20 28 73 74 72 tream->list (str 3d40: 65 61 6d 2d 74 61 6b 65 20 30 20 73 74 72 6d 31 eam-take 0 strm1 3d50: 32 33 29 29 20 27 28 29 29 0d 0a 20 20 28 61 73 23)) '()).. (as 3d60: 73 65 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c 69 sert (stream->li 3d70: 73 74 20 28 73 74 72 65 61 6d 2d 74 61 6b 65 20 st (stream-take 3d80: 32 20 73 74 72 6d 31 32 33 29 29 20 27 28 31 20 2 strm123)) '(1 3d90: 32 29 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 2)).. (assert ( 3da0: 73 74 72 65 61 6d 2d 3e 6c 69 73 74 20 28 73 74 stream->list (st 3db0: 72 65 61 6d 2d 74 61 6b 65 20 33 20 73 74 72 6d ream-take 3 strm 3dc0: 31 32 33 29 29 20 27 28 31 20 32 20 33 29 29 0d 123)) '(1 2 3)). 3dd0: 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 72 65 . (assert (stre 3de0: 61 6d 2d 3e 6c 69 73 74 20 28 73 74 72 65 61 6d am->list (stream 3df0: 2d 74 61 6b 65 20 35 20 73 74 72 6d 31 32 33 29 -take 5 strm123) 3e00: 29 20 27 28 31 20 32 20 33 29 29 0d 0a 20 20 0d ) '(1 2 3)).. . 3e10: 0a 20 20 3b 20 73 74 72 65 61 6d 2d 74 61 6b 65 . ; stream-take 3e20: 2d 77 68 69 6c 65 0d 0a 20 20 28 61 73 73 65 72 -while.. (asser 3e30: 74 20 28 73 74 72 65 61 6d 2d 74 61 6b 65 2d 77 t (stream-take-w 3e40: 68 69 6c 65 20 6f 64 64 3f 20 22 66 6f 75 72 22 hile odd? "four" 3e50: 29 20 22 73 74 72 65 61 6d 2d 74 61 6b 65 2d 77 ) "stream-take-w 3e60: 68 69 6c 65 3a 20 6e 6f 6e 2d 73 74 72 65 61 6d hile: non-stream 3e70: 20 61 72 67 75 6d 65 6e 74 22 29 0d 0a 20 20 28 argument").. ( 3e80: 61 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d 74 assert (stream-t 3e90: 61 6b 65 2d 77 68 69 6c 65 20 22 66 6f 75 72 22 ake-while "four" 3ea0: 20 73 74 72 6d 31 32 33 29 20 22 73 74 72 65 61 strm123) "strea 3eb0: 6d 2d 74 61 6b 65 2d 77 68 69 6c 65 3a 20 6e 6f m-take-while: no 3ec0: 6e 2d 70 72 6f 63 65 64 75 72 61 6c 20 61 72 67 n-procedural arg 3ed0: 75 6d 65 6e 74 22 29 0d 0a 20 20 28 61 73 73 65 ument").. (asse 3ee0: 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c 69 73 74 rt (stream->list 3ef0: 20 28 73 74 72 65 61 6d 2d 74 61 6b 65 2d 77 68 (stream-take-wh 3f00: 69 6c 65 20 6f 64 64 3f 20 73 74 72 6d 31 32 33 ile odd? strm123 3f10: 29 29 20 27 28 31 29 29 0d 0a 20 20 28 61 73 73 )) '(1)).. (ass 3f20: 65 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c 69 73 ert (stream->lis 3f30: 74 20 28 73 74 72 65 61 6d 2d 74 61 6b 65 2d 77 t (stream-take-w 3f40: 68 69 6c 65 20 65 76 65 6e 3f 20 73 74 72 6d 31 hile even? strm1 3f50: 32 33 29 29 20 27 28 29 29 0d 0a 20 20 28 61 73 23)) '()).. (as 3f60: 73 65 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c 69 sert (stream->li 3f70: 73 74 20 28 73 74 72 65 61 6d 2d 74 61 6b 65 2d st (stream-take- 3f80: 77 68 69 6c 65 20 70 6f 73 69 74 69 76 65 3f 20 while positive? 3f90: 73 74 72 6d 31 32 33 29 29 20 27 28 31 20 32 20 strm123)) '(1 2 3fa0: 33 29 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 3)).. (assert ( 3fb0: 73 74 72 65 61 6d 2d 3e 6c 69 73 74 20 28 73 74 stream->list (st 3fc0: 72 65 61 6d 2d 74 61 6b 65 2d 77 68 69 6c 65 20 ream-take-while 3fd0: 6e 65 67 61 74 69 76 65 3f 20 73 74 72 6d 31 32 negative? strm12 3fe0: 33 29 29 20 27 28 29 29 0d 0a 20 20 0d 0a 20 20 3)) '()).. .. 3ff0: 3b 20 73 74 72 65 61 6d 2d 75 6e 66 6f 6c 64 0d ; stream-unfold. 4000: 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 72 65 . (assert (stre 4010: 61 6d 2d 75 6e 66 6f 6c 64 20 22 66 6f 75 72 22 am-unfold "four" 4020: 20 6f 64 64 3f 20 2b 20 30 29 20 22 73 74 72 65 odd? + 0) "stre 4030: 61 6d 2d 75 6e 66 6f 6c 64 3a 20 6e 6f 6e 2d 70 am-unfold: non-p 4040: 72 6f 63 65 64 75 72 61 6c 20 6d 61 70 70 65 72 rocedural mapper 4050: 22 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 ").. (assert (s 4060: 74 72 65 61 6d 2d 75 6e 66 6f 6c 64 20 2b 20 22 tream-unfold + " 4070: 66 6f 75 72 22 20 2b 20 30 29 20 22 73 74 72 65 four" + 0) "stre 4080: 61 6d 2d 75 6e 66 6f 6c 64 3a 20 6e 6f 6e 2d 70 am-unfold: non-p 4090: 72 6f 63 65 64 75 72 61 6c 20 70 72 65 64 3f 22 rocedural pred?" 40a0: 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 ).. (assert (st 40b0: 72 65 61 6d 2d 75 6e 66 6f 6c 64 20 2b 20 6f 64 ream-unfold + od 40c0: 64 3f 20 22 66 6f 75 72 22 20 30 29 20 22 73 74 d? "four" 0) "st 40d0: 72 65 61 6d 2d 75 6e 66 6f 6c 64 3a 20 6e 6f 6e ream-unfold: non 40e0: 2d 70 72 6f 63 65 64 75 72 61 6c 20 67 65 6e 65 -procedural gene 40f0: 72 61 74 6f 72 22 29 0d 0a 0d 0a 20 20 28 61 73 rator").... (as 4100: 73 65 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c 69 sert (stream->li 4110: 73 74 20 28 73 74 72 65 61 6d 2d 75 6e 66 6f 6c st (stream-unfol 4120: 64 20 28 72 73 65 63 20 65 78 70 74 20 32 29 20 d (rsec expt 2) 4130: 28 72 73 65 63 20 3c 20 31 30 29 20 28 72 73 65 (rsec < 10) (rse 4140: 63 20 2b 20 31 29 20 30 29 29 0d 0a 20 20 20 20 c + 1) 0)).. 4150: 20 20 20 20 20 20 20 27 28 30 20 31 20 34 20 39 '(0 1 4 9 4160: 20 31 36 20 32 35 20 33 36 20 34 39 20 36 34 20 16 25 36 49 64 4170: 38 31 29 29 0d 0a 20 20 0d 0a 20 20 3b 20 73 74 81)).. .. ; st 4180: 72 65 61 6d 2d 75 6e 66 6f 6c 64 73 0d 0a 20 20 ream-unfolds.. 4190: 28 61 73 73 65 72 74 0d 0a 20 20 20 20 28 73 74 (assert.. (st 41a0: 72 65 61 6d 2d 3e 6c 69 73 74 0d 0a 20 20 20 20 ream->list.. 41b0: 20 20 28 73 74 72 65 61 6d 2d 75 6e 66 6f 6c 64 (stream-unfold 41c0: 73 0d 0a 20 20 20 20 20 20 20 20 28 6c 61 6d 62 s.. (lamb 41d0: 64 61 20 28 78 29 0d 0a 20 20 20 20 20 20 20 20 da (x).. 41e0: 20 20 28 6c 65 74 20 28 28 6e 20 28 63 61 72 20 (let ((n (car 41f0: 78 29 29 20 28 73 20 28 63 64 72 20 78 29 29 29 x)) (s (cdr x))) 4200: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 69 .. (i 4210: 66 20 28 7a 65 72 6f 3f 20 6e 29 0d 0a 20 20 20 f (zero? n).. 4220: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 76 61 (va 4230: 6c 75 65 73 20 27 64 75 6d 6d 79 20 27 28 29 29 lues 'dummy '()) 4240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 4250: 20 20 28 76 61 6c 75 65 73 0d 0a 20 20 20 20 20 (values.. 4260: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 63 6f (co 4270: 6e 73 20 28 2d 20 6e 20 31 29 20 28 73 74 72 65 ns (- n 1) (stre 4280: 61 6d 2d 63 64 72 20 73 29 29 0d 0a 20 20 20 20 am-cdr s)).. 4290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 6c (l 42a0: 69 73 74 20 28 73 74 72 65 61 6d 2d 63 61 72 20 ist (stream-car 42b0: 73 29 29 29 29 29 29 0d 0a 20 20 20 20 20 20 20 s)))))).. 42c0: 20 28 63 6f 6e 73 20 35 20 28 73 74 72 65 61 6d (cons 5 (stream 42d0: 2d 66 72 6f 6d 20 30 29 29 29 29 0d 0a 20 20 20 -from 0)))).. 42e0: 20 20 20 27 28 30 20 31 20 32 20 33 20 34 29 29 '(0 1 2 3 4)) 42f0: 0d 0a 20 20 0d 0a 20 20 3b 20 73 74 72 65 61 6d .. .. ; stream 4300: 2d 7a 69 70 0d 0a 20 20 28 61 73 73 65 72 74 20 -zip.. (assert 4310: 28 73 74 72 65 61 6d 2d 7a 69 70 29 20 22 73 74 (stream-zip) "st 4320: 72 65 61 6d 2d 7a 69 70 3a 20 6e 6f 20 73 74 72 ream-zip: no str 4330: 65 61 6d 20 61 72 67 75 6d 65 6e 74 73 22 29 0d eam arguments"). 4340: 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 72 65 . (assert (stre 4350: 61 6d 2d 7a 69 70 20 22 66 6f 75 72 22 29 20 22 am-zip "four") " 4360: 73 74 72 65 61 6d 2d 7a 69 70 3a 20 6e 6f 6e 2d stream-zip: non- 4370: 73 74 72 65 61 6d 20 61 72 67 75 6d 65 6e 74 22 stream argument" 4380: 29 0d 0a 20 20 28 61 73 73 65 72 74 20 28 73 74 ).. (assert (st 4390: 72 65 61 6d 2d 7a 69 70 20 73 74 72 6d 31 32 33 ream-zip strm123 43a0: 20 22 66 6f 75 72 22 29 20 22 73 74 72 65 61 6d "four") "stream 43b0: 2d 7a 69 70 3a 20 6e 6f 6e 2d 73 74 72 65 61 6d -zip: non-stream 43c0: 20 61 72 67 75 6d 65 6e 74 22 29 0d 0a 20 20 28 argument").. ( 43d0: 61 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d 3e assert (stream-> 43e0: 6c 69 73 74 20 28 73 74 72 65 61 6d 2d 7a 69 70 list (stream-zip 43f0: 20 73 74 72 6d 31 32 33 20 73 74 72 65 61 6d 2d strm123 stream- 4400: 6e 75 6c 6c 29 29 20 27 28 29 29 0d 0a 20 20 28 null)) '()).. ( 4410: 61 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d 3e assert (stream-> 4420: 6c 69 73 74 20 28 73 74 72 65 61 6d 2d 7a 69 70 list (stream-zip 4430: 20 73 74 72 6d 31 32 33 29 29 20 27 28 28 31 29 strm123)) '((1) 4440: 20 28 32 29 20 28 33 29 29 29 0d 0a 20 20 28 61 (2) (3))).. (a 4450: 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c ssert (stream->l 4460: 69 73 74 20 28 73 74 72 65 61 6d 2d 7a 69 70 20 ist (stream-zip 4470: 73 74 72 6d 31 32 33 20 73 74 72 6d 31 32 33 29 strm123 strm123) 4480: 29 20 27 28 28 31 20 31 29 20 28 32 20 32 29 20 ) '((1 1) (2 2) 4490: 28 33 20 33 29 29 29 0d 0a 20 20 28 61 73 73 65 (3 3))).. (asse 44a0: 72 74 20 28 73 74 72 65 61 6d 2d 3e 6c 69 73 74 rt (stream->list 44b0: 20 28 73 74 72 65 61 6d 2d 7a 69 70 20 73 74 72 (stream-zip str 44c0: 6d 31 32 33 20 28 73 74 72 65 61 6d 2d 66 72 6f m123 (stream-fro 44d0: 6d 20 31 29 29 29 20 27 28 28 31 20 31 29 20 28 m 1))) '((1 1) ( 44e0: 32 20 32 29 20 28 33 20 33 29 29 29 0d 0a 20 20 2 2) (3 3))).. 44f0: 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d (assert (stream- 4500: 3e 6c 69 73 74 20 28 73 74 72 65 61 6d 2d 7a 69 >list (stream-zi 4510: 70 20 73 74 72 6d 31 32 33 20 73 74 72 6d 31 32 p strm123 strm12 4520: 33 20 73 74 72 6d 31 32 33 29 29 20 27 28 28 31 3 strm123)) '((1 4530: 20 31 20 31 29 20 28 32 20 32 20 32 29 20 28 33 1 1) (2 2 2) (3 4540: 20 33 20 33 29 29 29 0d 0a 20 20 0d 0a 20 20 3b 3 3))).. .. ; 4550: 20 6f 74 68 65 72 20 74 65 73 74 73 0d 0a 0d 0a other tests.... 4560: 20 20 28 61 73 73 65 72 74 0d 0a 20 20 20 20 28 (assert.. ( 4570: 73 74 72 65 61 6d 2d 63 61 72 0d 0a 20 20 20 20 stream-car.. 4580: 20 20 28 73 74 72 65 61 6d 2d 72 65 76 65 72 73 (stream-revers 4590: 65 0d 0a 20 20 20 20 20 20 20 20 28 73 74 72 65 e.. (stre 45a0: 61 6d 2d 74 61 6b 65 2d 77 68 69 6c 65 0d 0a 20 am-take-while.. 45b0: 20 20 20 20 20 20 20 20 20 28 72 73 65 63 20 3c (rsec < 45c0: 20 31 30 30 30 29 0d 0a 20 20 20 20 20 20 20 20 1000).. 45d0: 20 20 70 72 69 6d 65 73 29 29 29 0d 0a 20 20 20 primes))).. 45e0: 20 39 39 37 29 0d 0a 20 20 0d 0a 20 20 28 61 73 997).. .. (as 45f0: 73 65 72 74 0d 0a 20 20 20 20 28 65 71 75 61 6c sert.. (equal 4600: 3f 0d 0a 20 20 20 20 20 20 28 73 74 72 65 61 6d ?.. (stream 4610: 2d 3e 6c 69 73 74 20 28 71 73 6f 72 74 20 3c 20 ->list (qsort < 4620: 28 73 74 72 65 61 6d 20 33 20 31 20 35 20 32 20 (stream 3 1 5 2 4630: 34 29 29 29 0d 0a 20 20 20 20 20 20 28 73 74 72 4))).. (str 4640: 65 61 6d 2d 3e 6c 69 73 74 20 28 69 73 6f 72 74 eam->list (isort 4650: 20 3c 20 28 73 74 72 65 61 6d 20 32 20 35 20 31 < (stream 2 5 1 4660: 20 34 20 33 29 29 29 29 0d 0a 20 20 20 20 23 74 4 3)))).. #t 4670: 29 0d 0a 20 20 20 0d 0a 20 20 28 61 73 73 65 72 ).. .. (asser 4680: 74 0d 0a 20 20 20 20 28 65 71 75 61 6c 3f 0d 0a t.. (equal?.. 4690: 20 20 20 20 20 20 28 73 74 72 65 61 6d 2d 3e 6c (stream->l 46a0: 69 73 74 20 28 6d 73 6f 72 74 20 3c 20 28 73 74 ist (msort < (st 46b0: 72 65 61 6d 20 33 20 31 20 35 20 32 20 34 29 29 ream 3 1 5 2 4)) 46c0: 29 0d 0a 20 20 20 20 20 20 28 73 74 72 65 61 6d ).. (stream 46d0: 2d 3e 6c 69 73 74 20 28 69 73 6f 72 74 20 3c 20 ->list (isort < 46e0: 28 73 74 72 65 61 6d 20 32 20 35 20 31 20 34 20 (stream 2 5 1 4 46f0: 33 29 29 29 29 0d 0a 20 20 20 20 23 74 29 0d 0a 3)))).. #t).. 4700: 20 20 20 0d 0a 20 20 3b 20 68 74 74 70 3a 2f 2f .. ; http:// 4710: 77 77 77 2e 72 65 73 65 61 72 63 68 2e 61 74 74 www.research.att 4720: 2e 63 6f 6d 2f 7e 6e 6a 61 73 2f 73 65 71 75 65 .com/~njas/seque 4730: 6e 63 65 73 2f 41 30 35 31 30 33 37 0d 0a 20 20 nces/A051037.. 4740: 28 61 73 73 65 72 74 20 28 73 74 72 65 61 6d 2d (assert (stream- 4750: 72 65 66 20 68 61 6d 6d 69 6e 67 20 39 39 39 29 ref hamming 999) 4760: 20 35 31 32 30 30 30 30 30 29 0d 0a 20 20 0d 0a 51200000).. .. 4770: 29 0d 0a 0d 0a 0d 0a 28 75 6e 69 74 2d 74 65 73 )......(unit-tes 4780: 74 29 t)