emacs.d/clones/scheme/docs.racket-lang.org/reference/streams.html

104 lines
99 KiB
HTML
Raw Normal View History

2022-09-30 11:00:09 +02:00
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"/><meta name="viewport" content="width=device-width, initial-scale=0.8"/><title>4.16.2&nbsp;Streams</title><link rel="stylesheet" type="text/css" href="../scribble.css" title="default"/><link rel="stylesheet" type="text/css" href="extras.css" title="default"/><link rel="stylesheet" type="text/css" href="../racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-style.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../doc-site.css" title="default"/><script type="text/javascript" src="../scribble-common.js"></script><script type="text/javascript" src="../manual-racket.js"></script><script type="text/javascript" src="../manual-racket.js"></script><script type="text/javascript" src="../doc-site.js"></script><script type="text/javascript" src="../local-redirect/local-redirect.js"></script><script type="text/javascript" src="../local-redirect/local-user-redirect.js"></script><!--[if IE 6]><style type="text/css">.SIEHidden { overflow: hidden; }</style><![endif]--></head><body id="doc-racket-lang-org"><div class="tocset"><div class="tocview"><div class="tocviewlist tocviewlisttopspace"><div class="tocviewtitle"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,&quot;tocview_0&quot;);">&#9658;</a></td><td></td><td><a href="index.html" class="tocviewlink" data-pltdoc="x">The Racket Reference</a></td></tr></table></div><div class="tocviewsublisttop" style="display: none;" id="tocview_0"><table cellspacing="0" cellpadding="0"><tr><td align="right">1&nbsp;</td><td><a href="model.html" class="tocviewlink" data-pltdoc="x">Language Model</a></td></tr><tr><td align="right">2&nbsp;</td><td><a href="notation.html" class="tocviewlink" data-pltdoc="x">Notation for Documentation</a></td></tr><tr><td align="right">3&nbsp;</td><td><a href="syntax.html" class="tocviewlink" data-pltdoc="x">Syntactic Forms</a></td></tr><tr><td align="right">4&nbsp;</td><td><a href="data.html" class="tocviewselflink" data-pltdoc="x">Datatypes</a></td></tr><tr><td align="right">5&nbsp;</td><td><a href="structures.html" class="tocviewlink" data-pltdoc="x">Structures</a></td></tr><tr><td align="right">6&nbsp;</td><td><a href="mzlib_class.html" class="tocviewlink" data-pltdoc="x">Classes and Objects</a></td></tr><tr><td align="right">7&nbsp;</td><td><a href="mzlib_unit.html" class="tocviewlink" data-pltdoc="x">Units</a></td></tr><tr><td align="right">8&nbsp;</td><td><a href="contracts.html" class="tocviewlink" data-pltdoc="x">Contracts</a></td></tr><tr><td align="right">9&nbsp;</td><td><a href="match.html" class="tocviewlink" data-pltdoc="x">Pattern Matching</a></td></tr><tr><td align="right">10&nbsp;</td><td><a href="control.html" class="tocviewlink" data-pltdoc="x">Control Flow</a></td></tr><tr><td align="right">11&nbsp;</td><td><a href="concurrency.html" class="tocviewlink" data-pltdoc="x">Concurrency and Parallelism</a></td></tr><tr><td align="right">12&nbsp;</td><td><a href="Macros.html" class="tocviewlink" data-pltdoc="x">Macros</a></td></tr><tr><td align="right">13&nbsp;</td><td><a href="input-and-output.html" class="tocviewlink" data-pltdoc="x">Input and Output</a></td></tr><tr><td align="right">14&nbsp;</td><td><a href="security.html" class="tocviewlink" data-pltdoc="x">Reflection and Security</a></td></tr><tr><td align="right">15&nbsp;</td><td><a href="os.html" class="tocviewlink" data-pltdoc="x">Operating System</a></td></tr><tr><td align="right">16&nbsp;</td><td><a href="memory.html" class="tocviewlink" data-pltdoc="x">Memory Management</a></td></tr><tr><td align="right">17&nbsp;</td><td><a href="unsafe.html" class="tocviewlink" data-pltdoc="x">Unsafe Operations</a></td></tr><tr><td align="right">18&nbsp;</td><td><a href="running.html" class="tocview
functional iteration via <span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-first%29%29" class="RktValLink" data-pltdoc="x">stream-first</a></span> and
<span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-rest%29%29" class="RktValLink" data-pltdoc="x">stream-rest</a></span>. The <span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream-cons%29%29" class="RktStxLink" data-pltdoc="x">stream-cons</a></span> form constructs a lazy
stream, but plain lists can be used as streams, and functions such as
<span class="RktSym"><a href="sequences.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._in-range%29%29" class="RktValLink" data-pltdoc="x">in-range</a></span> and <span class="RktSym"><a href="sequences.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._in-naturals%29%29" class="RktValLink" data-pltdoc="x">in-naturals</a></span> also create streams.</p><p><div class="SIntrapara"><table cellspacing="0" cellpadding="0" class="defmodule"><tr><td align="left"><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="require.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._require%29%29" class="RktStxLink" data-pltdoc="x">require</a></span><span class="stt"> </span><a href="streams.html" class="RktModLink" data-pltdoc="x"><span class="RktSym">racket/stream</span></a><span class="RktPn">)</span></td><td align="right"><span class="RpackageSpec"><span class="Smaller">&nbsp;package:</span> <a href="https://pkgs.racket-lang.org/package/base" title="Install this package using `raco pkg install base`"><span class="stt">base</span></a></span></td></tr></table></div><div class="SIntrapara">The bindings documented in this section are provided by the <a href="streams.html" class="RktModLink" data-pltdoc="x"><span class="RktSym">racket/stream</span></a> and <a href="index.html" class="RktModLink" data-pltdoc="x"><span class="RktSym">racket</span></a> libraries, but not <a href="index.html" class="RktModLink" data-pltdoc="x"><span class="RktSym">racket/base</span></a>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/stream..rkt)._stream~3f))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">stream?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> if <span class="RktVar">v</span> can be used as a <a href="streams.html#%28tech._stream%29" class="techoutside" data-pltdoc="x"><span class="techinside">stream</span></a>,
<span class="RktVal">#f</span> otherwise.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/stream..rkt)._stream-empty~3f))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-empty~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">stream-empty?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">s</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> if <span class="RktVar">s</span> has no elements, <span class="RktVal">#f</span>
otherwise.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/stream..rkt)._stream-first))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-first%29%29" class="RktValDef RktValLink" data-pltdoc="x">stream-first</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">s</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%29%29" class="RktStxLink" data-pltdoc="x">any</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._and%2Fc%29%29" class="RktValLink" data-pltdoc="x">and/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._not%2Fc%29%29" class="RktValLink" data-pltdoc="x">not/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-empty~3f%29%29" class="RktValLink" data-pltdoc="x">stream-empty?</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Returns the value(s) of the first element in <span class="RktVar">s</span>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/stream..rkt)._stream-rest))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-rest%29%29" class="RktValDef RktValLink" data-pltdoc="x">stream-rest</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">s</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._and%2Fc%29%29" class="RktValLink" data-pltdoc="x">and/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._not%2Fc%29%29" class="RktValLink" data-pltdoc="x">not/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt
element.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>syntax</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(form._((lib._racket/stream..rkt)._stream-cons))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream-cons%29%29" class="RktStxDef RktStxLink" data-pltdoc="x">stream-cons</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">first-expr</span><span class="hspace">&nbsp;</span><span class="RktVar">rest-expr</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream-cons%29%29" class="RktStxDef RktStxLink" data-pltdoc="x">stream-cons</a></span><span class="hspace">&nbsp;</span><span class="RktPn">#:eager</span><span class="hspace">&nbsp;</span><span class="RktVar">first-expr</span><span class="hspace">&nbsp;</span><span class="RktVar">rest-expr</span><span class="RktPn">)</span></td></tr><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream-cons%29%29" class="RktStxDef RktStxLink" data-pltdoc="x">stream-cons</a></span><span class="hspace">&nbsp;</span><span class="RktVar">first-expr</span><span class="hspace">&nbsp;</span><span class="RktPn">#:eager</span><span class="hspace">&nbsp;</span><span class="RktVar">rest-expr</span><span class="RktPn">)</span></td></tr><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream-cons%29%29" class="RktStxDef RktStxLink" data-pltdoc="x">stream-cons</a></span><span class="hspace">&nbsp;</span><span class="RktPn">#:eager</span><span class="hspace">&nbsp;</span><span class="RktVar">first-expr</span><span class="hspace">&nbsp;</span><span class="RktPn">#:eager</span><span class="hspace">&nbsp;</span><span class="RktVar">rest-expr</span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Produces a stream whose first element is determined by
<span class="RktVar">first-expr</span> and whose rest is determined by
<span class="RktVar">rest-expr</span>.</div></p><p>If <span class="RktVar">first-expr</span> is not preceded by <span class="RktPn">#:eager</span>, then
<span class="RktVar">first-expr</span> is not evaluated immediately. Instead,
<span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-first%29%29" class="RktValLink" data-pltdoc="x">stream-first</a></span> on the result stream forces the evaluation of
<span class="RktVar">first-expr</span> (once) to produce the first element of the
stream. If evaluating <span class="RktVar">first-expr</span> raises an exception or
tries to force itself, then an <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised, and
future attempts to force evaluation will trigger another exception.</p><p>If <span class="RktVar">rest-expr</span> is not preceded by <span class="RktPn">#:eager</span>, then
<span class="RktVar">rest-expr</span> is not evaluated immediately. Instead,
<span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-rest%29%29" class="RktValLink" data-pltdoc="x">stream-rest</a></span> on the result stream produces another stream
that is like the one produced by <span class="RktPn">(</span><span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream-lazy%29%29" class="RktStxLink" data-pltdoc="x">stream-lazy</a></span><span class="stt"> </span><span class="RktVar">rest-expr</span><span class="RktPn">)</span>.</p><p>The first element of the stream as produced by <span class="RktVar">first-expr</span>
must be a single value. The <span class="RktVar">rest-expr</span> must produce a stream
when it is evaluated, otherwise the <span class="RktSym"><a href="exns.html#%28def._%28%28quote._~23~25kernel%29._exn~3afail~3acontract~3f%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract?</a></span> exception is raised.</p><p class="SHistory">Changed in version 8.0.0.12 of package <span class="stt">base</span>: Added <span class="RktPn">#:eager</span> options.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>syntax</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(form._((lib._racket/stream..rkt)._stream-lazy))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream-lazy%29%29" class="RktStxDef RktStxLink" data-pltdoc="x">stream-lazy</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">stream-expr</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream-lazy%29%29" class="RktStxDef RktStxLink" data-pltdoc="x">stream-lazy</a></span><span class="hspace">&nbsp;</span><span class="RktPn">#:who</span><span class="hspace">&nbsp;</span><span class="RktVar">who-expr</span><span class="hspace">&nbsp;</span><span class="RktVar">stream-expr</span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Similar to <span class="RktPn">(</span><span class="RktSym"><a href="Delayed_Evaluation.html#%28form._%28%28lib._racket%2Fpromise..rkt%29._delay%29%29" class="RktStxLink" data-pltdoc="x">delay</a></span><span class="stt"> </span><span class="RktVar">stream-expr</span><span class="RktPn">)</span>, but the result is a stream
instead of a <a href="Delayed_Evaluation.html#%28tech._promise%29" class="techoutside" data-pltdoc="x"><span class="techinside">promise</span></a>, and <span class="RktVar">stream-expr</span> must produce a
stream when it is eventually forced. The stream produced by
<span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream-lazy%29%29" class="RktStxLink" data-pltdoc="x">stream-lazy</a></span> has the same content as the stream produced by
<span class="RktVar">stream-expr</span>; that is, operations like <span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-first%29%29" class="RktValLink" data-pltdoc="x">stream-first</a></span>
on the result stream will force <span class="RktVar">stream-expr</span> and retry on its
result.</div></p><p>If evaluating <span class="RktVar">stream-expr</span> raises an exception or tries to
force itself, then an <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3acontract%29%29" class="RktValLink" data-pltdoc="x">exn:fail:contract</a></span> exception is raised, and future
attempts to force evaluation will trigger another exception.</p><p>If <span class="RktVar">who-expr</span> is provided, it is evaluated when constructing
the delayed stream. If <span class="RktVar">stream-expr</span> later produces a value
that is not a stream, and if <span class="RktVar">who-expr</span> produced a symbol
value, then the symbol is used for the error message.</p><p class="SHistory">Added in version 8.0.0.12 of package <span class="stt">base</span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/stream..rkt)._stream-force))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-force%29%29" class="RktValDef RktValLink" data-pltdoc="x">stream-force</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">s</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Forces the evaluation of a delayed stream from <span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream-lazy%29%29" class="RktStxLink" data-pltdoc="x">stream-lazy</a></span>,
from the <span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-rest%29%29" class="RktValLink" data-pltdoc="x">stream-rest</a></span> of a <span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream-cons%29%29" class="RktStxLink" data-pltdoc="x">stream-cons</a></span>, etc.,
returning the forced stream. If <span class="RktVar">s</span> is not a delayed stream,
then <span class="RktVar">s</span> is returned.</div></p><p>Normally, <span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-force%29%29" class="RktValLink" data-pltdoc="x">stream-force</a></span> is not needed, because operations
like <span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-first%29%29" class="RktValLink" data-pltdoc="x">stream-first</a></span>, <span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-rest%29%29" class="RktValLink" data-pltdoc="x">stream-rest</a></span>, and
<span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-empty~3f%29%29" class="RktValLink" data-pltdoc="x">stream-empty?</a></span> force a delayed stream as needed. In rare
cases, <span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-force%29%29" class="RktValLink" data-pltdoc="x">stream-force</a></span> can be useful to reveal the underlying
implementation of a stream (e.g., a stream that is an instance of a
structure type that has the <span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._prop~3astream%29%29" class="RktValLink" data-pltdoc="x">prop:stream</a></span> property).</p><p class="SHistory">Added in version 8.0.0.12 of package <span class="stt">base</span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>syntax</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(form._((lib._racket/stream..rkt)._stream))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream%29%29" class="RktStxDef RktStxLink" data-pltdoc="x">stream</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">e</span><span class="hspace">&nbsp;</span><span class="RktMeta">...</span><span class="RktPn">)</span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">A shorthand for nested <span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream-cons%29%29" class="RktStxLink" data-pltdoc="x">stream-cons</a></span>es ending with
<span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._empty-stream%29%29" class="RktValLink" data-pltdoc="x">empty-stream</a></span>. As a match pattern, <span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream%29%29" class="RktStxLink" data-pltdoc="x">stream</a></span>
matches a stream with as many elements as <span class="RktVar">e</span>s,
and each element must match the corresponding <span class="RktVar">e</span> pattern.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>syntax</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(form._((lib._racket/stream..rkt)._stream*))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream%2A%29%29" class="RktStxDef RktStxLink" data-pltdoc="x">stream*</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">e</span><span class="hspace">&nbsp;</span><span class="RktMeta">...</span><span class="hspace">&nbsp;</span><span class="RktVar">tail</span><span class="RktPn">)</span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">A shorthand for nested <span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream-cons%29%29" class="RktStxLink" data-pltdoc="x">stream-cons</a></span>es, but the <span class="RktVar">tail</span>
must produce a stream when it is forced, and that stream is used as the rest of the stream instead of
<span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._empty-stream%29%29" class="RktValLink" data-pltdoc="x">empty-stream</a></span>. Similar to <span class="RktSym"><a href="pairs.html#%28def._%28%28quote._~23~25kernel%29._list%2A%29%29" class="RktValLink" data-pltdoc="x">list*</a></span> but for streams.
As a match pattern, <span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream%2A%29%29" class="RktStxLink" data-pltdoc="x">stream*</a></span> is similar to a <span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream%29%29" class="RktStxLink" data-pltdoc="x">stream</a></span> pattern,
but the <span class="RktVar">tail</span> pattern matches the &ldquo;rest&rdquo; of the stream after the last <span class="RktVar">e</span>.</div></p><p class="SHistory">Added in version 6.3 of package <span class="stt">base</span>.<br/>Changed in version 8.0.0.12: Changed to delay <span class="RktSym">rest-expr</span> even
if zero <span class="RktSym">expr</span>s are provided.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/stream..rkt)._in-stream))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._in-stream%29%29" class="RktValDef RktValLink" data-pltdoc="x">in-stream</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">s</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="sequences.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._sequence~3f%29%29" class="RktValLink" data-pltdoc="x">sequence?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns a sequence that is equivalent to <span class="RktVar">s</span>.
</div><div class="SIntrapara">An <span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._in-stream%29%29" class="RktValLink" data-pltdoc="x">in-stream</a></span> application can provide better performance for streams iteration when it appears directly in a <span class="RktSym"><a href="for.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._for%29%29" class="RktStxLink" data-pltdoc="x">for</a></span> clause.</div><div class="SIntrapara">See <span class="RktSym"><a href="for.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._for%29%29" class="RktStxLink" data-pltdoc="x">for</a></span> for information on the reachability of stream elements
during an iteration.</div></p><p class="SHistory">Changed in version 6.7.0.4 of package <span class="stt">base</span>: Improved element-reachability guarantee for streams in <span class="RktSym"><a href="for.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._for%29%29" class="RktStxLink" data-pltdoc="x">for</a></span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._racket/stream..rkt)._empty-stream))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._empty-stream%29%29" class="RktValDef RktValLink" data-pltdoc="x">empty-stream</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">A stream with no elements.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/stream..rkt)._stream-~3elist))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-~3elist%29%29" class="RktValDef RktValLink" data-pltdoc="x">stream-&gt;list</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">s</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="pairs.html#%28def._%28%28quote._~23~25kernel%29._list~3f%29%29" class="RktValLink" data-pltdoc="x">list?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns a list whose elements are the elements of <span class="RktVar">s</span>, each
of which must be a single value. If <span class="RktVar">s</span> is infinite, this
function does not terminate.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/stream..rkt)._stream-length))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-length%29%29" class="RktValDef RktValLink" data-pltdoc="x">stream-length</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">s</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="number-types.html#%28def._%28%28quote._~23~25kernel%29._exact-nonnegative-integer~3f%29%29" class="RktValLink" data-pltdoc="x">exact-nonnegative-integer?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns the number of elements of <span class="RktVar">s</span>. If <span class="RktVar">s</span> is
infinite, this function does not terminate.</div></p><p>In the case of lazy streams, this function forces evaluation only of
the sub-streams, and not the stream&rsquo;s elements.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/stream..rkt)._stream-ref))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-ref%29%29" class="RktValDef RktValLink" data-pltdoc="x">stream-ref</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span><span class="RktVar">i</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%29%29" class="RktStxLink" data-pltdoc="x">any</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">i</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="number-types.html#%28def._%28%28quote._~23~25kernel%29._exact-nonnegative-integer~3f%29%29" class="RktValLink" data-pltdoc="x">exact-nonnegative-integer?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns the <span class="RktVar">i</span>th element of <span class="RktVar">s</span> (which may be
multiple values).</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/stream..rkt)._stream-tail))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-tail%29%29" class="RktValDef RktValLink" data-pltdoc="x">stream-tail</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span><span class="RktVar">i</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">i</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="number-types.html#%28def._%28%28quote._~23~25kernel%29._exact-nonnegative-integer~3f%29%29" class="RktValLink" data-pltdoc="x">exact-nonnegative-integer?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns a stream equivalent to <span class="RktVar">s</span>, except that the first
<span class="RktVar">i</span> elements are omitted.</div></p><p>In case extracting elements from <span class="RktVar">s</span> involves a side effect,
they will not be extracted until the first element is extracted from
the resulting stream.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/stream..rkt)._stream-take))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-take%29%29" class="RktValDef RktValLink" data-pltdoc="x">stream-take</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span><span class="RktVar">i</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">i</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="number-types.html#%28def._%28%28quote._~23~25kernel%29._exact-nonnegative-integer~3f%29%29" class="RktValLink" data-pltdoc="x">exact-nonnegative-integer?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns a stream of the first <span class="RktVar">i</span> elements of <span class="RktVar">s</span>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/stream..rkt)._stream-append))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-append%29%29" class="RktValDef RktValLink" data-pltdoc="x">stream-append</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span><span class="RktMeta">...</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns a stream that contains all elements of each stream in the
order they appear in the original streams. The new stream is
constructed lazily, while the last given stream is used in the tail
of the result.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/stream..rkt)._stream-map))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-map%29%29" class="RktValDef RktValLink" data-pltdoc="x">stream-map</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">f</span><span class="hspace">&nbsp;</span><span class="RktVar">s</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">f</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="procedures.html#%28def._%28%28quote._~23~25kernel%29._procedure~3f%29%29" class="RktValLink" data-pltdoc="x">procedure?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns a stream that contains <span class="RktVar">f</span> applied to each element of
<span class="RktVar">s</span>. The new stream is constructed lazily.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/stream..rkt)._stream-andmap))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-andmap%29%29" class="RktValDef RktValLink" data-pltdoc="x">stream-andmap</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">f</span><span class="hspace">&nbsp;</span><span class="RktVar">s</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">f</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span></a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fstxcase-scheme..rkt%29._......%29%29" class="RktStxLink" data-pltdoc="x">...</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> if <span class="RktVar">f</span> returns a true result on every
element of <span class="RktVar">s</span>. If <span class="RktVar">s</span> is infinite and <span class="RktVar">f</span>
never returns a false result, this function does not terminate.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/stream..rkt)._stream-ormap))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-ormap%29%29" class="RktValDef RktValLink" data-pltdoc="x">stream-ormap</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">f</span><span class="hspace">&nbsp;</span><span class="RktVar">s</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">f</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span></a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fstxcase-scheme..rkt%29._......%29%29" class="RktStxLink" data-pltdoc="x">...</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns <span class="RktVal">#t</span> if <span class="RktVar">f</span> returns a true result on some
element of <span class="RktVar">s</span>. If <span class="RktVar">s</span> is infinite and <span class="RktVar">f</span>
never returns a true result, this function does not terminate.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/stream..rkt)._stream-for-each))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-for-each%29%29" class="RktValDef RktValLink" data-pltdoc="x">stream-for-each</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">f</span><span class="hspace">&nbsp;</span><span class="RktVar">s</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="void.html#%28def._%28%28quote._~23~25kernel%29._void~3f%29%29" class="RktValLink" data-pltdoc="x">void?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">f</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span></a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fstxcase-scheme..rkt%29._......%29%29" class="RktStxLink" data-pltdoc="x">...</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%29%29" class="RktStxLink" data-pltdoc="x">any</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Applies <span class="RktVar">f</span> to each element of <span class="RktVar">s</span>. If <span class="RktVar">s</span> is
infinite, this function does not terminate.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/stream..rkt)._stream-fold))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-fold%29%29" class="RktValDef RktValLink" data-pltdoc="x">stream-fold</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">f</span><span class="hspace">&nbsp;</span><span class="RktVar">i</span><span class="hspace">&nbsp;</span><span class="RktVar">s</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">f</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span></a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fstxcase-scheme..rkt%29._......%29%29" class="RktStxLink" data-pltdoc="x">...</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">i</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Folds <span class="RktVar">f</span> over each element of <span class="RktVar">s</span> with <span class="RktVar">i</span> as
the initial accumulator. If <span class="RktVar">s</span> is infinite, this function
does not terminate. The <span class="RktVar">f</span> function takes the accumulator as
its first argument and the next stream element as its second.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/stream..rkt)._stream-count))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-count%29%29" class="RktValDef RktValLink" data-pltdoc="x">stream-count</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">f</span><span class="hspace">&nbsp;</span><span class="RktVar">s</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="number-types.html#%28def._%28%28quote._~23~25kernel%29._exact-nonnegative-integer~3f%29%29" class="RktValLink" data-pltdoc="x">exact-nonnegative-integer?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">f</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="procedures.html#%28def._%28%28quote._~23~25kernel%29._procedure~3f%29%29" class="RktValLink" data-pltdoc="x">procedure?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns the number of elements in <span class="RktVar">s</span> for which <span class="RktVar">f</span>
returns a true result. If <span class="RktVar">s</span> is infinite, this function
does not terminate.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/stream..rkt)._stream-filter))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-filter%29%29" class="RktValDef RktValLink" data-pltdoc="x">stream-filter</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">f</span><span class="hspace">&nbsp;</span><span class="RktVar">s</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">f</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3e%29%29" class="RktStxLink" data-pltdoc="x"><span class="nobreak">-&gt;</span></a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fstxcase-scheme..rkt%29._......%29%29" class="RktStxLink" data-pltdoc="x">...</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="booleans.html#%28def._%28%28quote._~23~25kernel%29._boolean~3f%29%29" class="RktValLink" data-pltdoc="x">boolean?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns a stream whose elements are the elements of <span class="RktVar">s</span> for
which <span class="RktVar">f</span> returns a true result. Although the new stream is
constructed lazily, if <span class="RktVar">s</span> has an infinite number of elements
where <span class="RktVar">f</span> returns a false result in between two elements
where <span class="RktVar">f</span> returns a true result, then operations on this
stream will not terminate during the infinite sub-stream.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/stream..rkt)._stream-add-between))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-add-between%29%29" class="RktValDef RktValLink" data-pltdoc="x">stream-add-between</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span><span class="RktVar">e</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">s</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream~3f%29%29" class="RktValLink" data-pltdoc="x">stream?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">e</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fmisc..rkt%29._any%2Fc%29%29" class="RktValLink" data-pltdoc="x">any/c</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns a stream whose elements are the elements of <span class="RktVar">s</span>, but
with <span class="RktVar">e</span> between each pair of elements in <span class="RktVar">s</span>. The
new stream is constructed lazily.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><table cellspacing="0" cellpadding="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>syntax</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(form._((lib._racket/stream..rkt)._for/stream))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._for%2Fstream%29%29" class="RktStxDef RktStxLink" data-pltdoc="x">for/stream</a></span></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktVar">for-clause</span><span class="hspace">&nbsp;</span><span class="RktMeta">...</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktVar">body-or-break</span><span class="hspace">&nbsp;</span><span class="RktMeta">...</span><span class="hspace">&nbsp;</span><span class="RktVar">body</span><span class="RktPn">)</span></p></blockquote></td></tr></table></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>syntax</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(form._((lib._racket/stream..rkt)._for*/stream))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._for%2A%2Fstream%29%29" class="RktStxDef RktStxLink" data-pltdoc="x">for*/stream</a></span></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktVar">for-clause</span><span class="hspace">&nbsp;</span><span class="RktMeta">...</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktVar">body-or-break</span><span class="hspace">&nbsp;</span><span class="RktMeta">...</span><span class="hspace">&nbsp;</span><span class="RktVar">body</span><span class="RktPn">)</span></p></blockquote></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">Iterates like <span class="RktSym"><a href="for.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._for%2Flist%29%29" class="RktStxLink" data-pltdoc="x">for/list</a></span> and <span class="RktSym"><a href="for.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._for%2A%2Flist%29%29" class="RktStxLink" data-pltdoc="x">for*/list</a></span>, respectively, but the
results are lazily collected into a <a href="streams.html#%28tech._stream%29" class="techoutside" data-pltdoc="x"><span class="techinside">stream</span></a> instead of a list.</div></p><p>Unlike most <span class="RktSym"><a href="for.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._for%29%29" class="RktStxLink" data-pltdoc="x">for</a></span> forms, these forms are evaluated lazily, so each
<span class="RktVar">body</span> will not be evaluated until the resulting stream is forced. This
allows <span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._for%2Fstream%29%29" class="RktStxLink" data-pltdoc="x">for/stream</a></span> and <span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._for%2A%2Fstream%29%29" class="RktStxLink" data-pltdoc="x">for*/stream</a></span> to iterate over infinite
sequences, unlike their finite counterparts.</p><p>Please note that these forms do not support returning <a href="eval-model.html#%28tech._multiple._value%29" class="techoutside" data-pltdoc="x"><span class="techinside">multiple values</span></a>.</p><p><div class="SIntrapara">Examples:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._for%2Fstream%29%29" class="RktStxLink" data-pltdoc="x">for/stream</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktPn">[</span><span class="RktSym">i</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">1</span><span class="hspace">&nbsp;</span><span class="RktVal">2</span><span class="hspace">&nbsp;</span><span class="RktVal">3</span><span class="RktVal">)</span><span class="RktPn">]</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="generic-numbers.html#%28def._%28%28quote._~23~25kernel%29._%2A%29%29" class="RktValLink" data-pltdoc="x">*</a></span><span class="hspace">&nbsp;</span><span class="RktSym">i</span><span class="hspace">&nbsp;</span><span class="RktSym">i</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#&lt;stream&gt;</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-~3elist%29%29" class="RktValLink" data-pltdoc="x">stream-&gt;list</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._for%2Fstream%29%29" class="RktStxLink" data-pltdoc="x">for/stream</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktPn">[</span><span class="RktSym">i</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">1</span><span class="hspace">&nbsp;</span><span class="RktVal">2</span><span class="hspace">&nbsp;</span><span class="RktVal">3</span><span class="RktVal">)</span><span class="RktPn">]</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="generic-numbers.html#%28def._%28%28quote._~23~25kernel%29._%2A%29%29" class="RktValLink" data-pltdoc="x">*</a></span><span class="hspace">&nbsp;</span><span class="RktSym">i</span><span class="hspace">&nbsp;</span><span class="RktSym">i</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(1 4 9)</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-ref%29%29" class="RktValLink" data-pltdoc="x">stream-ref</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._for%2Fstream%29%29" class="RktStxLink" data-pltdoc="x">for/stream</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktPn">[</span><span class="RktSym">i</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">1</span><span class="hspace">&nbsp;</span><span class="RktVal">2</span><span class="hspace">&nbsp;</span><span class="RktVal">3</span><span class="RktVal">)</span><span class="RktPn">]</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="Writing.html#%28def._%28%28lib._racket%2Fprivate%2Fmisc..rkt%29._displayln%29%29" class="RktValLink" data-pltdoc="x">displayln</a></span><span cl
<a href="struct-generics.html#%28tech._generic._interface%29" class="techoutside" data-pltdoc="x"><span class="techinside">generic interface</span></a> (see <a href="struct-generics.html" data-pltdoc="x">Generic Interfaces</a>) for
streams.</div></p><p>To supply method implementations, the <span class="RktPn">#:methods</span> keyword
should be used in a structure type definition. The following three
methods should be implemented:</p><ul><li><p><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-empty~3f%29%29" class="RktValLink" data-pltdoc="x">stream-empty?</a></span> : accepts one argument</p></li><li><p><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-first%29%29" class="RktValLink" data-pltdoc="x">stream-first</a></span> : accepts one argument</p></li><li><p><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-rest%29%29" class="RktValLink" data-pltdoc="x">stream-rest</a></span> : accepts one argument</p></li></ul><p><div class="SIntrapara">Examples:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="define-struct.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._struct%29%29" class="RktStxLink" data-pltdoc="x">struct</a></span><span class="hspace">&nbsp;</span><span class="RktSym">list-stream</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">v</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">#:methods</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._gen~3astream%29%29" class="RktValLink" data-pltdoc="x">gen:stream</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">[</span><span class="RktPn">(</span><span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define%29%29" class="RktStxLink" data-pltdoc="x">define</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-empty~3f%29%29" class="RktValLink" data-pltdoc="x">stream-empty?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream%29%29" class="RktStxLink" data-pltdoc="x">stream</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="pairs.html#%28def._%28%28lib._racket%2Flist..rkt%29._empty~3f%29%29" class="RktValLink" data-pltdoc="x">empty?</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">list-stream-v</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream%29%29" class="RktStxLink" data-pltdoc="x">stream</a></span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="define.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._define%29%29" class="RktStxLink" data-pltdoc="x">define</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream-first%29%29" class="RktValLink" data-pltdoc="x">stream-first</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream%29%29" class="RktStxLink" data-pltdoc="x">stream</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="pairs.html#%28def._%28%28lib._racket%2Flist..rkt%29._first%29%29" class="RktValLink" data-pltdoc="x">first</a></span><span clas
extensions to the stream API. Using the <span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._prop~3astream%29%29" class="RktValLink" data-pltdoc="x">prop:stream</a></span> property
is discouraged; use the <span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._gen~3astream%29%29" class="RktValLink" data-pltdoc="x">gen:stream</a></span> <a href="struct-generics.html#%28tech._generic._interface%29" class="techoutside" data-pltdoc="x"><span class="techinside">generic interface</span></a>
instead. Accepts a vector of three procedures taking the same arguments
as the methods in <span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._gen~3astream%29%29" class="RktValLink" data-pltdoc="x">gen:stream</a></span>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._racket/stream..rkt)._stream/c))"></a><span title="Provided from: racket/stream, racket | Package: base"><span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream%2Fc%29%29" class="RktValDef RktValLink" data-pltdoc="x">stream/c</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">c</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="contract-utilities.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fguts..rkt%29._contract~3f%29%29" class="RktValLink" data-pltdoc="x">contract?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">c</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="contract-utilities.html#%28def._%28%28lib._racket%2Fcontract%2Fprivate%2Fguts..rkt%29._contract~3f%29%29" class="RktValLink" data-pltdoc="x">contract?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns a contract that recognizes streams. All elements of the stream must match
<span class="RktVar">c</span>.</div></p><p>If the <span class="RktVar">c</span> argument is a flat contract or a chaperone contract, then the
result will be a chaperone contract. Otherwise, the result will be an
impersonator contract.</p><p>When an <span class="RktSym"><a href="streams.html#%28def._%28%28lib._racket%2Fstream..rkt%29._stream%2Fc%29%29" class="RktValLink" data-pltdoc="x">stream/c</a></span> contract is applied to a stream, the result is not
<span class="RktSym"><a href="Equality.html#%28def._%28%28quote._~23~25kernel%29._eq~3f%29%29" class="RktValLink" data-pltdoc="x">eq?</a></span> to the input. The result will be either a <a href="chaperones.html#%28tech._chaperone%29" class="techoutside" data-pltdoc="x"><span class="techinside">chaperone</span></a> or
<a href="chaperones.html#%28tech._impersonator%29" class="techoutside" data-pltdoc="x"><span class="techinside">impersonator</span></a> of the input depending on the type of contract.</p><p>Contracts on streams are evaluated lazily by necessity (since streams may be
infinite). Contract violations will not be raised until the value in violation
is retrieved from the stream. As an exception to this rule, streams that are
lists are checked immediately, as if <span class="RktVar">c</span> had been used with
<span class="RktSym"><a href="data-structure-contracts.html#%28def._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._listof%29%29" class="RktValLink" data-pltdoc="x">listof</a></span>.</p><p>If a contract is applied to a stream, and that stream is subsequently used as
the tail of another stream (as the second parameter to <span class="RktSym"><a href="streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream-cons%29%29" class="RktStxLink" data-pltdoc="x">stream-cons</a></span>),
the new elements will not be checked with the contract, but the tail&rsquo;s elements
will still be enforced.</p><p class="SHistory">Added in version 6.1.1.8 of package <span class="stt">base</span>.</p><div class="navsetbottom"><span class="navleft"><form class="searchform"><input class="searchbox" id="searchbox" type="text" tabindex="1" placeholder="...search manuals..." title="Enter a search string to search the manuals" onkeypress="return DoSearchKey(event, this, &quot;8.6&quot;, &quot;../&quot;);"/></form>&nbsp;&nbsp;<a href="https://docs.racket-lang.org/index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot(&quot;8.6&quot;);">top</a><span class="tocsettoggle">&nbsp;&nbsp;<a href="javascript:void(0);" title="show/hide table of contents" onclick="TocsetToggle();">contents</a></span></span><span class="navright">&nbsp;&nbsp;<a href="sequences.html" title="backward to &quot;4.16.1 Sequences&quot;" data-pltdoc="x">&larr; prev</a>&nbsp;&nbsp;<a href="sequences_streams.html" title="up to &quot;4.16 Sequences and Streams&quot;" data-pltdoc="x">up</a>&nbsp;&nbsp;<a href="Generators.html" title="forward to &quot;4.16.3 Generators&quot;" data-pltdoc="x">next &rarr;</a></span>&nbsp;</div></div></div><div id="contextindicator">&nbsp;</div></body></html>