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)