468 lines
No EOL
257 KiB
HTML
468 lines
No EOL
257 KiB
HTML
<!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>1.3 The Reader</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="icons.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,"tocview_0");">►</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 </td><td><a href="model.html" class="tocviewselflink" data-pltdoc="x">Language Model</a></td></tr><tr><td align="right">2 </td><td><a href="notation.html" class="tocviewlink" data-pltdoc="x">Notation for Documentation</a></td></tr><tr><td align="right">3 </td><td><a href="syntax.html" class="tocviewlink" data-pltdoc="x">Syntactic Forms</a></td></tr><tr><td align="right">4 </td><td><a href="data.html" class="tocviewlink" data-pltdoc="x">Datatypes</a></td></tr><tr><td align="right">5 </td><td><a href="structures.html" class="tocviewlink" data-pltdoc="x">Structures</a></td></tr><tr><td align="right">6 </td><td><a href="mzlib_class.html" class="tocviewlink" data-pltdoc="x">Classes and Objects</a></td></tr><tr><td align="right">7 </td><td><a href="mzlib_unit.html" class="tocviewlink" data-pltdoc="x">Units</a></td></tr><tr><td align="right">8 </td><td><a href="contracts.html" class="tocviewlink" data-pltdoc="x">Contracts</a></td></tr><tr><td align="right">9 </td><td><a href="match.html" class="tocviewlink" data-pltdoc="x">Pattern Matching</a></td></tr><tr><td align="right">10 </td><td><a href="control.html" class="tocviewlink" data-pltdoc="x">Control Flow</a></td></tr><tr><td align="right">11 </td><td><a href="concurrency.html" class="tocviewlink" data-pltdoc="x">Concurrency and Parallelism</a></td></tr><tr><td align="right">12 </td><td><a href="Macros.html" class="tocviewlink" data-pltdoc="x">Macros</a></td></tr><tr><td align="right">13 </td><td><a href="input-and-output.html" class="tocviewlink" data-pltdoc="x">Input and Output</a></td></tr><tr><td align="right">14 </td><td><a href="security.html" class="tocviewlink" data-pltdoc="x">Reflection and Security</a></td></tr><tr><td align="right">15 </td><td><a href="os.html" class="tocviewlink" data-pltdoc="x">Operating System</a></td></tr><tr><td align="right">16 </td><td><a href="memory.html" class="tocviewlink" data-pltdoc="x">Memory Management</a></td></tr><tr><td align="right">17 </td><td><a href="unsafe.html" class="tocviewlink" data-pltdoc="x">Unsafe Operations</a></td></tr><tr><td align="right">18 </td><td><a href="running.html" class="tocviewlink" data-pltdoc="x">Running Racket</a></td></tr><tr><td align="right"></td><td><a href="doc-bibliography.html" class="tocviewlink" data-pltdoc="x">Bibliography</a></td></tr><tr><td align="right"></td><td><a href="doc-index.html" class="tocviewlink" data-pltdoc="x">Index</a></td></tr></table></div></div><div class="tocviewlist"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,"tocview_1");">▼</a></td><td>1 </td><td><a href="model.html" class="tocviewlink" data-pltdoc="x">Language Model</a></td></tr></table><div class="tocviewsublist" style="display: block;" id="tocview_1"><table cellspacing="0" cellpadding="0"><tr><td align="right">1.1 </td><td><a href="eval-model.html" class="tocviewlink" data-pltdoc="x">Evaluation Model</a></td></tr><tr><td align="right">1.2 </td><td><a href="syntax-model.html" class="tocviewlink" data-pltdoc="x">Syntax Model</a></td></tr><tr><td align="right">1.3 </td><td><a href="reader.html" class="tocviewselflink" data-pltdoc="x">The Reader</a></td></tr><tr><td align="right">1.4 </td><td><a href="printing.html" class="tocviewlink" data-pltdoc="x">The Printer</a></td></tr><tr><td align="right">1.5 </td><td><a href="implementations.html" class="tocviewlink" data-pltdoc="x">Implementations</a></td></tr></table></div></div><div class="tocviewlist"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,"tocview_2");">►</a></td><td>1.3 </td><td><a href="reader.html" class="tocviewselflink" data-pltdoc="x">The Reader</a></td></tr></table><div class="tocviewsublistbottom" style="display: none;" id="tocview_2"><table cellspacing="0" cellpadding="0"><tr><td align="right">1.3.1 </td><td><a href="reader.html#%28part._default-readtable-dispatch%29" class="tocviewlink" data-pltdoc="x">Delimiters and Dispatch</a></td></tr><tr><td align="right">1.3.2 </td><td><a href="reader.html#%28part._parse-symbol%29" class="tocviewlink" data-pltdoc="x">Reading Symbols</a></td></tr><tr><td align="right">1.3.3 </td><td><a href="reader.html#%28part._parse-number%29" class="tocviewlink" data-pltdoc="x">Reading Numbers</a></td></tr><tr><td align="right">1.3.4 </td><td><a href="reader.html#%28part._parse-extflonum%29" class="tocviewlink" data-pltdoc="x">Reading Extflonums</a></td></tr><tr><td align="right">1.3.5 </td><td><a href="reader.html#%28part._parse-boolean%29" class="tocviewlink" data-pltdoc="x">Reading Booleans</a></td></tr><tr><td align="right">1.3.6 </td><td><a href="reader.html#%28part._parse-pair%29" class="tocviewlink" data-pltdoc="x">Reading Pairs and Lists</a></td></tr><tr><td align="right">1.3.7 </td><td><a href="reader.html#%28part._parse-string%29" class="tocviewlink" data-pltdoc="x">Reading Strings</a></td></tr><tr><td align="right">1.3.8 </td><td><a href="reader.html#%28part._parse-quote%29" class="tocviewlink" data-pltdoc="x">Reading Quotes</a></td></tr><tr><td align="right">1.3.9 </td><td><a href="reader.html#%28part._parse-comment%29" class="tocviewlink" data-pltdoc="x">Reading Comments</a></td></tr><tr><td align="right">1.3.10 </td><td><a href="reader.html#%28part._parse-vector%29" class="tocviewlink" data-pltdoc="x">Reading Vectors</a></td></tr><tr><td align="right">1.3.11 </td><td><a href="reader.html#%28part._parse-structure%29" class="tocviewlink" data-pltdoc="x">Reading Structures</a></td></tr><tr><td align="right">1.3.12 </td><td><a href="reader.html#%28part._parse-hashtable%29" class="tocviewlink" data-pltdoc="x">Reading Hash Tables</a></td></tr><tr><td align="right">1.3.13 </td><td><a href="reader.html#%28part._parse-box%29" class="tocviewlink" data-pltdoc="x">Reading Boxes</a></td></tr><tr><td align="right">1.3.14 </td><td><a href="reader.html#%28part._parse-character%29" class="tocviewlink" data-pltdoc="x">Reading Characters</a></td></tr><tr><td align="right">1.3.15 </td><td><a href="reader.html#%28part._parse-keyword%29" class="tocviewlink" data-pltdoc="x">Reading Keywords</a></td></tr><tr><td align="right">1.3.16 </td><td><a href="reader.html#%28part._parse-regexp%29" class="tocviewlink" data-pltdoc="x">Reading Regular Expressions</a></td></tr><tr><td align="right">1.3.17 </td><td><a href="reader.html#%28part._parse-graph%29" class="tocviewlink" data-pltdoc="x">Reading Graph Structure</a></td></tr><tr><td align="right">1.3.18 </td><td><a href="reader.html#%28part._parse-reader%29" class="tocviewlink" data-pltdoc="x">Reading via an Extension</a></td></tr><tr><td align="right">1.3.19 </td><td><a href="reader.html#%28part._parse-cdot%29" class="tocviewlink" data-pltdoc="x">Reading with C-<wbr></wbr>style Infix-<wbr></wbr>Dot Notation</a></td></tr></table></div></div></div><div class="tocsub"><div class="tocsubtitle">On this page:</div><table class="tocsublist" cellspacing="0"><tr><td><span class="tocsublinknumber">1.3.1<tt> </tt></span><a href="reader.html#%28part._default-readtable-dispatch%29" class="tocsubseclink" data-pltdoc="x">Delimiters and Dispatch</a></td></tr><tr><td><span class="tocsublinknumber">1.3.2<tt> </tt></span><a href="reader.html#%28part._parse-symbol%29" class="tocsubseclink" data-pltdoc="x">Reading Symbols</a></td></tr><tr><td><span class="tocsublinknumber">1.3.3<tt> </tt></span><a href="reader.html#%28part._parse-number%29" class="tocsubseclink" data-pltdoc="x">Reading Numbers</a></td></tr><tr><td><span class="tocsublinknumber">1.3.4<tt> </tt></span><a href="reader.html#%28part._parse-extflonum%29" class="tocsubseclink" data-pltdoc="x">Reading Extflonums</a></td></tr><tr><td><span class="tocsublinknumber">1.3.5<tt> </tt></span><a href="reader.html#%28part._parse-boolean%29" class="tocsubseclink" data-pltdoc="x">Reading Booleans</a></td></tr><tr><td><span class="tocsublinknumber">1.3.6<tt> </tt></span><a href="reader.html#%28part._parse-pair%29" class="tocsubseclink" data-pltdoc="x">Reading Pairs and Lists</a></td></tr><tr><td><span class="tocsublinknumber">1.3.7<tt> </tt></span><a href="reader.html#%28part._parse-string%29" class="tocsubseclink" data-pltdoc="x">Reading Strings</a></td></tr><tr><td><span class="tocsublinknumber">1.3.8<tt> </tt></span><a href="reader.html#%28part._parse-quote%29" class="tocsubseclink" data-pltdoc="x">Reading Quotes</a></td></tr><tr><td><span class="tocsublinknumber">1.3.9<tt> </tt></span><a href="reader.html#%28part._parse-comment%29" class="tocsubseclink" data-pltdoc="x">Reading Comments</a></td></tr><tr><td><span class="tocsublinknumber">1.3.10<tt> </tt></span><a href="reader.html#%28part._parse-vector%29" class="tocsubseclink" data-pltdoc="x">Reading Vectors</a></td></tr><tr><td><span class="tocsublinknumber">1.3.11<tt> </tt></span><a href="reader.html#%28part._parse-structure%29" class="tocsubseclink" data-pltdoc="x">Reading Structures</a></td></tr><tr><td><span class="tocsublinknumber">1.3.12<tt> </tt></span><a href="reader.html#%28part._parse-hashtable%29" class="tocsubseclink" data-pltdoc="x">Reading Hash Tables</a></td></tr><tr><td><span class="tocsublinknumber">1.3.13<tt> </tt></span><a href="reader.html#%28part._parse-box%29" class="tocsubseclink" data-pltdoc="x">Reading Boxes</a></td></tr><tr><td><span class="tocsublinknumber">1.3.14<tt> </tt></span><a href="reader.html#%28part._parse-character%29" class="tocsubseclink" data-pltdoc="x">Reading Characters</a></td></tr><tr><td><span class="tocsublinknumber">1.3.15<tt> </tt></span><a href="reader.html#%28part._parse-keyword%29" class="tocsubseclink" data-pltdoc="x">Reading Keywords</a></td></tr><tr><td><span class="tocsublinknumber">1.3.16<tt> </tt></span><a href="reader.html#%28part._parse-regexp%29" class="tocsubseclink" data-pltdoc="x">Reading Regular Expressions</a></td></tr><tr><td><span class="tocsublinknumber">1.3.17<tt> </tt></span><a href="reader.html#%28part._parse-graph%29" class="tocsubseclink" data-pltdoc="x">Reading Graph Structure</a></td></tr><tr><td><span class="tocsublinknumber">1.3.18<tt> </tt></span><a href="reader.html#%28part._parse-reader%29" class="tocsubseclink" data-pltdoc="x">Reading via an Extension</a></td></tr><tr><td><span class="tocsublinknumber">1.3.19<tt> </tt></span><a href="reader.html#%28part._parse-cdot%29" class="tocsubseclink" data-pltdoc="x">Reading with C-<wbr></wbr>style Infix-<wbr></wbr>Dot Notation</a></td></tr><tr><td><span class="tocsublinknumber">1.3.19.1<tt> </tt></span><a href="reader.html#%28part._.S-.Expression_.Reader_.Language%29" class="tocsubseclink" data-pltdoc="x">S-<wbr></wbr>Expression Reader Language</a></td></tr><tr><td><span class="tocsublinknumber">1.3.19.2<tt> </tt></span><a href="reader.html#%28part._.Chaining_.Reader_.Language%29" class="tocsubseclink" data-pltdoc="x">Chaining Reader Language</a></td></tr></table></div></div><div class="maincolumn"><div class="main"><div class="navsettop"><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, "8.6", "../");"/></form> <a href="https://docs.racket-lang.org/index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot("8.6");">top</a><span class="tocsettoggle"> <a href="javascript:void(0);" title="show/hide table of contents" onclick="TocsetToggle();">contents</a></span></span><span class="navright"> <a href="syntax-model.html" title="backward to "1.2 Syntax Model"" data-pltdoc="x">← prev</a> <a href="model.html" title="up to "1 Language Model"" data-pltdoc="x">up</a> <a href="printing.html" title="forward to "1.4 The Printer"" data-pltdoc="x">next →</a></span> </div><h4 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""reader"">1.3<tt> </tt><a name="(part._reader)"></a>The Reader</h4><p>Racket’s reader is a recursive-descent parser that can be configured
|
|
through a <a href="readtables.html" data-pltdoc="x">readtable</a> and various other
|
|
<a href="eval-model.html#%28tech._parameter%29" class="techoutside" data-pltdoc="x"><span class="techinside">parameters</span></a>. This section describes the reader’s parsing when
|
|
using the default readtable.</p><p>Reading from a stream produces one <a name="(tech._datum)"></a><span style="font-style: italic">datum</span>. If the result
|
|
datum is a compound value, then reading the datum typically requires
|
|
the reader to call itself recursively to read the component data.</p><p>The reader can be invoked in either of two modes: <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read%29%29" class="RktValLink" data-pltdoc="x">read</a></span> mode,
|
|
or <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode. In <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode, the result
|
|
is always a <a href="syntax-model.html#%28tech._syntax._object%29" data-pltdoc="x">syntax object</a> that includes
|
|
source-location and (initially empty) lexical information wrapped
|
|
around the sort of datum that <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read%29%29" class="RktValLink" data-pltdoc="x">read</a></span> mode would produce. In the
|
|
case of <a href="pairs.html#%28tech._pair%29" class="techoutside" data-pltdoc="x"><span class="techinside">pairs</span></a>, <a href="vectors.html#%28tech._vector%29" class="techoutside" data-pltdoc="x"><span class="techinside">vectors</span></a>, and <a href="boxes.html#%28tech._box%29" class="techoutside" data-pltdoc="x"><span class="techinside">box</span></a>es, the content is also
|
|
wrapped recursively as a syntax object. Unless specified otherwise,
|
|
this section describes the reader’s behavior in <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read%29%29" class="RktValLink" data-pltdoc="x">read</a></span> mode,
|
|
and <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode does the same modulo wrapping of the final
|
|
result.</p><p>Reading is defined in terms of Unicode characters; see
|
|
<a href="ports.html" data-pltdoc="x">Ports</a> for information on how a byte stream is converted
|
|
to a character stream.</p><p>Symbols, keywords, strings, byte strings, regexps, characters, and
|
|
numbers produced by the reader in <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode are
|
|
<a name="(tech._interned)"></a><span style="font-style: italic">interned</span>, which means that such values in the result of
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> are always <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> when they are
|
|
<span class="RktSym"><a href="Equality.html#%28def._%28%28quote._~23~25kernel%29._equal~3f%29%29" class="RktValLink" data-pltdoc="x">equal?</a></span> (whether from the same call or different calls to
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span>). Symbols and keywords are interned in
|
|
both <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read%29%29" class="RktValLink" data-pltdoc="x">read</a></span> and <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode. When a quoted value
|
|
is in compiled code that written and then read back in (see
|
|
<a href="printing.html#%28part._print-compiled%29" data-pltdoc="x">Printing Compiled Code</a>), only strings and byte strings are
|
|
interned when reading the code. Sending an
|
|
interned value across a <a href="places.html#%28tech._place._channel%29" class="techoutside" data-pltdoc="x"><span class="techinside">place channel</span></a> does not
|
|
necessarily produce an interned value at the receiving
|
|
<a href="places.html#%28tech._place%29" class="techoutside" data-pltdoc="x"><span class="techinside">place</span></a>. See also <span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._datum-intern-literal%29%29" class="RktValLink" data-pltdoc="x">datum-intern-literal</a></span> and
|
|
<span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._datum-~3esyntax%29%29" class="RktValLink" data-pltdoc="x">datum->syntax</a></span>.</p><p>Note that <a href="reader.html#%28tech._interned%29" class="techoutside" data-pltdoc="x"><span class="techinside">interned</span></a> values are only weakly held by the reader’s
|
|
internal table, so they may be <a href="eval-model.html#%28tech._garbage._collection%29" class="techoutside" data-pltdoc="x"><span class="techinside">garbage
|
|
collected</span></a> if they are no longer otherwise <a href="eval-model.html#%28tech._reachable%29" class="techoutside" data-pltdoc="x"><span class="techinside">reachable</span></a>. This weakness
|
|
can never affect the result of an <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>, <span class="RktSym"><a href="Equality.html#%28def._%28%28quote._~23~25kernel%29._eqv~3f%29%29" class="RktValLink" data-pltdoc="x">eqv?</a></span>, or
|
|
<span class="RktSym"><a href="Equality.html#%28def._%28%28quote._~23~25kernel%29._equal~3f%29%29" class="RktValLink" data-pltdoc="x">equal?</a></span> test, but an interned value may disappear when placed into
|
|
a weak box (see <a href="weakbox.html" data-pltdoc="x">Weak Boxes</a>), used as the key in a weak <a href="hashtables.html#%28tech._hash._table%29" class="techoutside" data-pltdoc="x"><span class="techinside">hash
|
|
table</span></a> (see <a href="hashtables.html" data-pltdoc="x">Hash Tables</a>), or used as an ephemeron key (see
|
|
<a href="ephemerons.html" data-pltdoc="x">Ephemerons</a>).</p><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""default-readtable-dispatch"">1.3.1<tt> </tt><a name="(part._default-readtable-dispatch)"></a>Delimiters and Dispatch</h5><p>Along with <a href="characters.html#%28def._%28%28quote._~23~25kernel%29._char-whitespace~3f%29%29" data-pltdoc="x">whitespace</a> and a BOM
|
|
character, the following characters are <a name="(tech._delimiter)"></a><span style="font-style: italic">delimiters</span>:</p><p><span class="hspace"> </span> <span class="RktInBG"><span class="hspace"></span><span class="RktIn">(</span><span class="hspace"></span></span> <span class="RktInBG"><span class="hspace"></span><span class="RktIn">)</span><span class="hspace"></span></span> <span class="RktInBG"><span class="hspace"></span><span class="RktIn">[</span><span class="hspace"></span></span> <span class="RktInBG"><span class="hspace"></span><span class="RktIn">]</span><span class="hspace"></span></span>
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">{</span><span class="hspace"></span></span> <span class="RktInBG"><span class="hspace"></span><span class="RktIn">}</span><span class="hspace"></span></span>
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">"</span><span class="hspace"></span></span> <span class="RktInBG"><span class="hspace"></span><span class="RktIn">,</span><span class="hspace"></span></span> <span class="RktInBG"><span class="hspace"></span><span class="RktIn">'</span><span class="hspace"></span></span> <span class="RktInBG"><span class="hspace"></span><span class="RktIn">`</span><span class="hspace"></span></span>
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">;</span><span class="hspace"></span></span></p><p>A delimited sequence that starts with any other character is typically
|
|
parsed as either a symbol, number, or <a href="extflonums.html#%28tech._extflonum%29" class="techoutside" data-pltdoc="x"><span class="techinside">extflonum</span></a>, but a few non-delimiter
|
|
characters play special roles:</p><ul><li><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span> has a special meaning as an initial character in a
|
|
delimited sequence; its meaning depends on the characters that
|
|
follow; see below.</p></li><li><p><a name="(idx._(gentag._3._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">|</span><span class="hspace"></span></span> starts a subsequence of characters to
|
|
be included verbatim in the delimited sequence (i.e., they are
|
|
never treated as delimiters, and they are not case-folded when
|
|
case-insensitivity is enabled); the subsequence is terminated
|
|
by another <span class="RktInBG"><span class="hspace"></span><span class="RktIn">|</span><span class="hspace"></span></span>, and neither the initial nor
|
|
terminating <span class="RktInBG"><span class="hspace"></span><span class="RktIn">|</span><span class="hspace"></span></span> is part of the subsequence.</p></li><li><p><a name="(idx._(gentag._4._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span> outside of a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">|</span><span class="hspace"></span></span> pair causes
|
|
the following character to be included verbatim in a delimited
|
|
sequence.</p></li></ul><p>More precisely, after skipping whitespace and <span class="RktVal">#\uFEFF</span> BOM
|
|
characters, the reader dispatches based on the next character or
|
|
characters in the input stream as follows:</p><p><table cellspacing="0" cellpadding="0"><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">(</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="pairs.html#%28tech._pair%29" class="techoutside" data-pltdoc="x"><span class="techinside">pair</span></a> or <a href="pairs.html#%28tech._list%29" class="techoutside" data-pltdoc="x"><span class="techinside">list</span></a>; see <a href="reader.html#%28part._parse-pair%29" data-pltdoc="x">Reading Pairs and Lists</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">[</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="pairs.html#%28tech._pair%29" class="techoutside" data-pltdoc="x"><span class="techinside">pair</span></a> or <a href="pairs.html#%28tech._list%29" class="techoutside" data-pltdoc="x"><span class="techinside">list</span></a>; see <a href="reader.html#%28part._parse-pair%29" data-pltdoc="x">Reading Pairs and Lists</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">{</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="pairs.html#%28tech._pair%29" class="techoutside" data-pltdoc="x"><span class="techinside">pair</span></a> or <a href="pairs.html#%28tech._list%29" class="techoutside" data-pltdoc="x"><span class="techinside">list</span></a>; see <a href="reader.html#%28part._parse-pair%29" data-pltdoc="x">Reading Pairs and Lists</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">)</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>matches <span class="RktInBG"><span class="hspace"></span><span class="RktIn">(</span><span class="hspace"></span></span> or raises <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aread%29%29" class="RktValLink" data-pltdoc="x">exn:fail:read</a></span></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">]</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>matches <span class="RktInBG"><span class="hspace"></span><span class="RktIn">[</span><span class="hspace"></span></span> or raises <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aread%29%29" class="RktValLink" data-pltdoc="x">exn:fail:read</a></span></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">}</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>matches <span class="RktInBG"><span class="hspace"></span><span class="RktIn">{</span><span class="hspace"></span></span> or raises <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aread%29%29" class="RktValLink" data-pltdoc="x">exn:fail:read</a></span></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">"</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="strings.html#%28tech._string%29" class="techoutside" data-pltdoc="x"><span class="techinside">string</span></a>; see <a href="reader.html#%28part._parse-string%29" data-pltdoc="x">Reading Strings</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">'</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a quote; see <a href="reader.html#%28part._parse-quote%29" data-pltdoc="x">Reading Quotes</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">`</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a quasiquote; see <a href="reader.html#%28part._parse-quote%29" data-pltdoc="x">Reading Quotes</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">,</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a [splicing] unquote; see <a href="reader.html#%28part._parse-quote%29" data-pltdoc="x">Reading Quotes</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">;</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a line comment; see <a href="reader.html#%28part._parse-comment%29" data-pltdoc="x">Reading Comments</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#t</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#T</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>true; see <a href="reader.html#%28part._parse-boolean%29" data-pltdoc="x">Reading Booleans</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#f</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#F</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>false; see <a href="reader.html#%28part._parse-boolean%29" data-pltdoc="x">Reading Booleans</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#(</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="vectors.html#%28tech._vector%29" class="techoutside" data-pltdoc="x"><span class="techinside">vector</span></a>; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#[</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="vectors.html#%28tech._vector%29" class="techoutside" data-pltdoc="x"><span class="techinside">vector</span></a>; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#{</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="vectors.html#%28tech._vector%29" class="techoutside" data-pltdoc="x"><span class="techinside">vector</span></a>; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#fl(</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#Fl(</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="flonums.html#%28tech._flvector%29" class="techoutside" data-pltdoc="x"><span class="techinside">flvector</span></a>; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#fl[</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#Fl[</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="flonums.html#%28tech._flvector%29" class="techoutside" data-pltdoc="x"><span class="techinside">flvector</span></a>; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#fl{</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#Fl{</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="flonums.html#%28tech._flvector%29" class="techoutside" data-pltdoc="x"><span class="techinside">flvector</span></a>; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#fx(</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#Fx(</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="fixnums.html#%28tech._fxvector%29" class="techoutside" data-pltdoc="x"><span class="techinside">fxvector</span></a>; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#fx[</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#Fx[</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="fixnums.html#%28tech._fxvector%29" class="techoutside" data-pltdoc="x"><span class="techinside">fxvector</span></a>; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#fx{</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#Fx{</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="fixnums.html#%28tech._fxvector%29" class="techoutside" data-pltdoc="x"><span class="techinside">fxvector</span></a>; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#s(</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="structures.html#%28tech._structure%29" class="techoutside" data-pltdoc="x"><span class="techinside">structure</span></a> literal; see <a href="reader.html#%28part._parse-structure%29" data-pltdoc="x">Reading Structures</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#s[</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="structures.html#%28tech._structure%29" class="techoutside" data-pltdoc="x"><span class="techinside">structure</span></a> literal; see <a href="reader.html#%28part._parse-structure%29" data-pltdoc="x">Reading Structures</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#s{</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="structures.html#%28tech._structure%29" class="techoutside" data-pltdoc="x"><span class="techinside">structure</span></a> literal; see <a href="reader.html#%28part._parse-structure%29" data-pltdoc="x">Reading Structures</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="characters.html#%28tech._character%29" class="techoutside" data-pltdoc="x"><span class="techinside">character</span></a>; see <a href="reader.html#%28part._parse-character%29" data-pltdoc="x">Reading Characters</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#"</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="bytestrings.html#%28tech._byte._string%29" class="techoutside" data-pltdoc="x"><span class="techinside">byte string</span></a>; see <a href="reader.html#%28part._parse-string%29" data-pltdoc="x">Reading Strings</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#%</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="symbols.html#%28tech._symbol%29" class="techoutside" data-pltdoc="x"><span class="techinside">symbol</span></a>; see <a href="reader.html#%28part._parse-symbol%29" data-pltdoc="x">Reading Symbols</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#:</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="keywords.html#%28tech._keyword%29" class="techoutside" data-pltdoc="x"><span class="techinside">keyword</span></a>; see <a href="reader.html#%28part._parse-keyword%29" data-pltdoc="x">Reading Keywords</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#&</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="boxes.html#%28tech._box%29" class="techoutside" data-pltdoc="x"><span class="techinside">box</span></a>; see <a href="reader.html#%28part._parse-box%29" data-pltdoc="x">Reading Boxes</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#|</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a block comment; see <a href="reader.html#%28part._parse-comment%29" data-pltdoc="x">Reading Comments</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#;</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts an S-expression comment; see <a href="reader.html#%28part._parse-comment%29" data-pltdoc="x">Reading Comments</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#'</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a syntax quote; see <a href="reader.html#%28part._parse-quote%29" data-pltdoc="x">Reading Quotes</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#!</span><span class="hspace"> </span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a line comment; see <a href="reader.html#%28part._parse-comment%29" data-pltdoc="x">Reading Comments</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#!/</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a line comment; see <a href="reader.html#%28part._parse-comment%29" data-pltdoc="x">Reading Comments</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#!</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>may start a reader extension; see <a href="reader.html#%28part._parse-reader%29" data-pltdoc="x">Reading via an Extension</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#`</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a syntax quasiquote; see <a href="reader.html#%28part._parse-quote%29" data-pltdoc="x">Reading Quotes</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#,</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a syntax [splicing] unquote; see <a href="reader.html#%28part._parse-quote%29" data-pltdoc="x">Reading Quotes</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#~</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts compiled code; see <a href="printing.html#%28part._print-compiled%29" data-pltdoc="x">Printing Compiled Code</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#i</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#I</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="numbers.html#%28tech._number%29" class="techoutside" data-pltdoc="x"><span class="techinside">number</span></a>; see <a href="reader.html#%28part._parse-number%29" data-pltdoc="x">Reading Numbers</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#e</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#E</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="numbers.html#%28tech._number%29" class="techoutside" data-pltdoc="x"><span class="techinside">number</span></a>; see <a href="reader.html#%28part._parse-number%29" data-pltdoc="x">Reading Numbers</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#x</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#X</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="numbers.html#%28tech._number%29" class="techoutside" data-pltdoc="x"><span class="techinside">number</span></a> or <a href="extflonums.html#%28tech._extflonum%29" class="techoutside" data-pltdoc="x"><span class="techinside">extflonum</span></a>; see <a href="reader.html#%28part._parse-number%29" data-pltdoc="x">Reading Numbers</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#o</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#O</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="numbers.html#%28tech._number%29" class="techoutside" data-pltdoc="x"><span class="techinside">number</span></a> or <a href="extflonums.html#%28tech._extflonum%29" class="techoutside" data-pltdoc="x"><span class="techinside">extflonum</span></a>; see <a href="reader.html#%28part._parse-number%29" data-pltdoc="x">Reading Numbers</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#d</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#D</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="numbers.html#%28tech._number%29" class="techoutside" data-pltdoc="x"><span class="techinside">number</span></a> or <a href="extflonums.html#%28tech._extflonum%29" class="techoutside" data-pltdoc="x"><span class="techinside">extflonum</span></a>; see <a href="reader.html#%28part._parse-number%29" data-pltdoc="x">Reading Numbers</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#b</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#B</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="numbers.html#%28tech._number%29" class="techoutside" data-pltdoc="x"><span class="techinside">number</span></a> or <a href="extflonums.html#%28tech._extflonum%29" class="techoutside" data-pltdoc="x"><span class="techinside">extflonum</span></a>; see <a href="reader.html#%28part._parse-number%29" data-pltdoc="x">Reading Numbers</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#<<</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="strings.html#%28tech._string%29" class="techoutside" data-pltdoc="x"><span class="techinside">string</span></a>; see <a href="reader.html#%28part._parse-string%29" data-pltdoc="x">Reading Strings</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#rx</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="regexp.html#%28tech._regular._expression%29" class="techoutside" data-pltdoc="x"><span class="techinside">regular expression</span></a>; see <a href="reader.html#%28part._parse-regexp%29" data-pltdoc="x">Reading Regular Expressions</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#px</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="regexp.html#%28tech._regular._expression%29" class="techoutside" data-pltdoc="x"><span class="techinside">regular expression</span></a>; see <a href="reader.html#%28part._parse-regexp%29" data-pltdoc="x">Reading Regular Expressions</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#ci</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#cI</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#Ci</span><span class="hspace"></span></span>, or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#CI</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>switches case sensitivity; see <a href="reader.html#%28part._parse-symbol%29" data-pltdoc="x">Reading Symbols</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#cs</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#cS</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#Cs</span><span class="hspace"></span></span>, or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#CS</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>switches case sensitivity; see <a href="reader.html#%28part._parse-symbol%29" data-pltdoc="x">Reading Symbols</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#hash</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="hashtables.html#%28tech._hash._table%29" class="techoutside" data-pltdoc="x"><span class="techinside">hash table</span></a>; see <a href="reader.html#%28part._parse-hashtable%29" data-pltdoc="x">Reading Hash Tables</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#reader</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a reader extension use; see <a href="reader.html#%28part._parse-reader%29" data-pltdoc="x">Reading via an Extension</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#lang</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a reader extension use; see <a href="reader.html#%28part._parse-reader%29" data-pltdoc="x">Reading via an Extension</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span style="vertical-align: super; font-size: 80%">+</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">(</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a vector; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span style="vertical-align: super; font-size: 80%">+</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">[</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a vector; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span style="vertical-align: super; font-size: 80%">+</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">{</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a vector; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#fl</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span style="vertical-align: super; font-size: 80%">+</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">(</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a flvector; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#fl</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span style="vertical-align: super; font-size: 80%">+</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">[</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a flvector; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#fl</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span style="vertical-align: super; font-size: 80%">+</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">{</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a flvector; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#Fl</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span style="vertical-align: super; font-size: 80%">+</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">(</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a flvector; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#Fl</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span style="vertical-align: super; font-size: 80%">+</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">[</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a flvector; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#Fl</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span style="vertical-align: super; font-size: 80%">+</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">{</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a flvector; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#fx</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span style="vertical-align: super; font-size: 80%">+</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">(</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a fxvector; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#fx</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span style="vertical-align: super; font-size: 80%">+</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">[</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a fxvector; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#fx</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span style="vertical-align: super; font-size: 80%">+</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">{</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a fxvector; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#Fx</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span style="vertical-align: super; font-size: 80%">+</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">(</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a fxvector; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#Fx</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span style="vertical-align: super; font-size: 80%">+</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">[</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a fxvector; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#Fx</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span style="vertical-align: super; font-size: 80%">+</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">{</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a fxvector; see <a href="reader.html#%28part._parse-vector%29" data-pltdoc="x">Reading Vectors</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,8}</span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">=</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>binds a graph tag; see <a href="reader.html#%28part._parse-graph%29" data-pltdoc="x">Reading Graph Structure</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,8}</span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>uses a graph tag; see <a href="reader.html#%28part._parse-graph%29" data-pltdoc="x">Reading Graph Structure</a></p></td></tr><tr><td align="left"><p><span class="hspace"> </span></p></td><td align="right"><p><span style="font-style: italic">otherwise</span></p></td><td align="left"><p><span class="hspace"> </span></p></td><td align="left"><p>starts a <a href="symbols.html#%28tech._symbol%29" class="techoutside" data-pltdoc="x"><span class="techinside">symbol</span></a>; see <a href="reader.html#%28part._parse-symbol%29" data-pltdoc="x">Reading Symbols</a></p></td></tr></table></p><p class="SHistory">Changed in version 7.8.0.9 of package <span class="stt">base</span>: Changed treatment of the BOM
|
|
character so that it is treated
|
|
like whitespace in the same places
|
|
that comments are allowed.</p><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""parse-symbol"">1.3.2<tt> </tt><a name="(part._parse-symbol)"></a>Reading Symbols</h5><blockquote class="refpara"><blockquote class="refcolumn"><blockquote class="refcontent"><p><span class="imageleft"><img src="finger.png" alt="+" width="24" height="24"/></span><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=symbols.html&version=8.6" class="Sq" data-pltdoc="x">Symbols</a> in <a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=index.html&version=8.6" class="Sq" data-pltdoc="x">The Racket Guide</a> introduces the syntax of symbols.</p></blockquote></blockquote></blockquote><p>A sequence that does not start with a <a href="reader.html#%28tech._delimiter%29" class="techoutside" data-pltdoc="x"><span class="techinside">delimiter</span></a> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span> is
|
|
parsed as either a <a href="symbols.html#%28tech._symbol%29" class="techoutside" data-pltdoc="x"><span class="techinside">symbol</span></a>, a <a href="numbers.html#%28tech._number%29" class="techoutside" data-pltdoc="x"><span class="techinside">number</span></a> (see
|
|
<a href="reader.html#%28part._parse-number%29" data-pltdoc="x">Reading Numbers</a>), or a <a href="extflonums.html#%28tech._extflonum%29" class="techoutside" data-pltdoc="x"><span class="techinside">extflonum</span></a>
|
|
(see <a href="reader.html#%28part._parse-extflonum%29" data-pltdoc="x">Reading Extflonums</a>),
|
|
except that <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span> by itself is never
|
|
parsed as a symbol or number (unless the <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-accept-dot%29%29" class="RktValLink" data-pltdoc="x">read-accept-dot</a></span>
|
|
parameter is set to <span class="RktVal">#f</span>). A successful
|
|
number or extflonum parse takes precedence over a symbol parse.
|
|
A <a name="(idx._(gentag._5._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#%</span><span class="hspace"></span></span> also
|
|
starts a symbol. The resulting symbol is <a href="reader.html#%28tech._interned%29" class="techoutside" data-pltdoc="x"><span class="techinside">interned</span></a>.
|
|
See the start of <a href="reader.html#%28part._default-readtable-dispatch%29" data-pltdoc="x">Delimiters and Dispatch</a> for information
|
|
about <span class="RktInBG"><span class="hspace"></span><span class="RktIn">|</span><span class="hspace"></span></span> and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span> in parsing symbols.</p><p><a name="(idx._(gentag._6._(lib._scribblings/reference/reference..scrbl)))"></a><a name="(idx._(gentag._7._(lib._scribblings/reference/reference..scrbl)))"></a>When the
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-case-sensitive%29%29" class="RktValLink" data-pltdoc="x">read-case-sensitive</a></span> <a href="eval-model.html#%28tech._parameter%29" class="techoutside" data-pltdoc="x"><span class="techinside">parameter</span></a> is set to <span class="RktVal">#f</span>,
|
|
characters in the sequence that are not quoted by <span class="RktInBG"><span class="hspace"></span><span class="RktIn">|</span><span class="hspace"></span></span> or
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span> are first case-normalized. If the reader encounters
|
|
<a name="(idx._(gentag._8._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#ci</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#CI</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#Ci</span><span class="hspace"></span></span>, or
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#cI</span><span class="hspace"></span></span>, then it recursively reads the following datum in
|
|
case-insensitive mode. If the reader encounters
|
|
<a name="(idx._(gentag._9._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#cs</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#CS</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#Cs</span><span class="hspace"></span></span>, or
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#cS</span><span class="hspace"></span></span>, then it recursively reads the following datum in
|
|
case-sensitive mode.</p><p><table cellspacing="0" cellpadding="0"><tr><td><p>Examples:</p></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">Apple</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">string->symbol</span><span class="stt"> </span><span class="RktVal">"Apple"</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">Ap#ple</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">string->symbol</span><span class="stt"> </span><span class="RktVal">"Ap#ple"</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">Ap ple</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">string->symbol</span><span class="stt"> </span><span class="RktVal">"Ap"</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">Ap| |ple</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">string->symbol</span><span class="stt"> </span><span class="RktVal">"Ap ple"</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">Ap\ ple</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">string->symbol</span><span class="stt"> </span><span class="RktVal">"Ap ple"</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#ci Apple</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">string->symbol</span><span class="stt"> </span><span class="RktVal">"apple"</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#ci |A|pple</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">string->symbol</span><span class="stt"> </span><span class="RktVal">"Apple"</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#ci \Apple</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">string->symbol</span><span class="stt"> </span><span class="RktVal">"Apple"</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#ci#cs Apple</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">string->symbol</span><span class="stt"> </span><span class="RktVal">"Apple"</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#%Apple</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">string->symbol</span><span class="stt"> </span><span class="RktVal">"#%Apple"</span><span class="RktPn">)</span></p></td></tr></table></td></tr></table></p><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""parse-number"">1.3.3<tt> </tt><a name="(part._parse-number)"></a><a name="(idx._(gentag._10._(lib._scribblings/reference/reference..scrbl)))"></a>Reading Numbers</h5><blockquote class="refpara"><blockquote class="refcolumn"><blockquote class="refcontent"><p><span class="imageleft"><img src="finger.png" alt="+" width="24" height="24"/></span><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=numbers.html&version=8.6" class="Sq" data-pltdoc="x">Numbers</a> in <a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=index.html&version=8.6" class="Sq" data-pltdoc="x">The Racket Guide</a> introduces the syntax of numbers.</p></blockquote></blockquote></blockquote><p>A sequence that does not start with a <a href="reader.html#%28tech._delimiter%29" class="techoutside" data-pltdoc="x"><span class="techinside">delimiter</span></a> is parsed as a <a href="numbers.html#%28tech._number%29" class="techoutside" data-pltdoc="x"><span class="techinside">number</span></a>
|
|
when it matches the following grammar case-insensitively for
|
|
<span class="sroman">‹<span style="font-style: italic">number<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span> (decimal), where <span style="font-style: italic">n</span> is a
|
|
meta-meta-variable in the grammar. The resulting number is <a href="reader.html#%28tech._interned%29" class="techoutside" data-pltdoc="x"><span class="techinside">interned</span></a> in
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode.</p><p>A number is optionally prefixed by an exactness specifier,
|
|
<a name="(idx._(gentag._11._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#e</span><span class="hspace"></span></span> (exact) or <a name="(idx._(gentag._12._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#i</span><span class="hspace"></span></span> (inexact),
|
|
which specifies its parsing as an exact or inexact number; see
|
|
<a href="numbers.html" data-pltdoc="x">Numbers</a> for information on number exactness. As the
|
|
non-terminal names suggest, a number that has no exactness specifier
|
|
and matches only <span class="sroman">‹<span style="font-style: italic">inexact-number<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span> is normally parsed as an
|
|
inexact number, otherwise it is parsed as an exact number. If the
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-decimal-as-inexact%29%29" class="RktValLink" data-pltdoc="x">read-decimal-as-inexact</a></span> <a href="eval-model.html#%28tech._parameter%29" class="techoutside" data-pltdoc="x"><span class="techinside">parameter</span></a> is set to <span class="RktVal">#f</span>, then
|
|
all numbers without an exactness specifier are instead parsed as
|
|
exact.</p><p>If the reader encounters <a name="(idx._(gentag._13._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#b</span><span class="hspace"></span></span> (binary),
|
|
<a name="(idx._(gentag._14._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#o</span><span class="hspace"></span></span> (octal), <a name="(idx._(gentag._15._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#d</span><span class="hspace"></span></span> (decimal), or
|
|
<a name="(idx._(gentag._16._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#x</span><span class="hspace"></span></span> (hexadecimal), it must be followed by a
|
|
sequence that is terminated by a <a href="reader.html#%28tech._delimiter%29" class="techoutside" data-pltdoc="x"><span class="techinside">delimiter</span></a> or end-of-file, and that
|
|
is either an <a href="extflonums.html#%28tech._extflonum%29" class="techoutside" data-pltdoc="x"><span class="techinside">extflonum</span></a> (see <a href="reader.html#%28part._parse-extflonum%29" data-pltdoc="x">Reading Extflonums</a>) or
|
|
matches the <span class="sroman">‹<span style="font-style: italic">general-number<span style="vertical-align: sub; font-size: 80%">2</span></span>›</span>,
|
|
<span class="sroman">‹<span style="font-style: italic">general-number<span style="vertical-align: sub; font-size: 80%">8</span></span>›</span>, <span class="sroman">‹<span style="font-style: italic">general-number<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span>, or
|
|
<span class="sroman">‹<span style="font-style: italic">general-number<span style="vertical-align: sub; font-size: 80%">16</span></span>›</span> grammar, respectively.</p><p>A <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#e</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#i</span><span class="hspace"></span></span> followed immediately by <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#b</span><span class="hspace"></span></span>,
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#o</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#d</span><span class="hspace"></span></span>, or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#x</span><span class="hspace"></span></span> is treated the same as the
|
|
reverse order: <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#b</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#o</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#d</span><span class="hspace"></span></span>, or
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#x</span><span class="hspace"></span></span> followed by <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#e</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#i</span><span class="hspace"></span></span>.</p><p>An <span class="sroman">‹<span style="font-style: italic">exponent-mark<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span> in an inexact number serves both to specify
|
|
an exponent and to specify a numerical precision. If
|
|
<a href="numbers.html#%28tech._single._flonum%29" class="techoutside" data-pltdoc="x"><span class="techinside">single-flonums</span></a> are supported (see <a href="numbers.html" data-pltdoc="x">Numbers</a>) and the
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-single-flonum%29%29" class="RktValLink" data-pltdoc="x">read-single-flonum</a></span> <a href="eval-model.html#%28tech._parameter%29" class="techoutside" data-pltdoc="x"><span class="techinside">parameter</span></a> is set to <span class="RktVal">#t</span>,
|
|
the marks <span class="RktInBG"><span class="hspace"></span><span class="RktIn">f</span><span class="hspace"></span></span> and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">s</span><span class="hspace"></span></span> specify single-flonums. If
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-single-flonum%29%29" class="RktValLink" data-pltdoc="x">read-single-flonum</a></span> is set to <span class="RktVal">#f</span>, or with any other
|
|
mark, a double-precision <a href="numbers.html#%28tech._flonum%29" class="techoutside" data-pltdoc="x"><span class="techinside">flonum</span></a> is produced. If single-flonums
|
|
are not supported and <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-single-flonum%29%29" class="RktValLink" data-pltdoc="x">read-single-flonum</a></span> is set to
|
|
<span class="RktVal">#t</span>, then the <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aunsupported%29%29" class="RktValLink" data-pltdoc="x">exn:fail:unsupported</a></span> exception is raised when a single-flonum
|
|
would otherwise be produced. Special infinity and not-a-number flonums
|
|
and single-flonums are distinct; specials with the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.0</span><span class="hspace"></span></span>
|
|
suffix, like <span class="RktVal">+nan.0</span>, are double-precision flonums, while
|
|
specials with the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.f</span><span class="hspace"></span></span> suffix, like <span class="RktVal">+nan.0</span>,
|
|
are single-flonums if enabled though <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-single-flonum%29%29" class="RktValLink" data-pltdoc="x">read-single-flonum</a></span>.</p><p>A <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span> in an <span class="sroman">‹<span style="font-style: italic">inexact<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span> number is the same as
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">0</span><span class="hspace"></span></span>, but <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span> can be used to suggest
|
|
that the digit’s actual value is unknown.</p><p>All letters in a number representation are parsed case-insensitively,
|
|
independent of the <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-case-sensitive%29%29" class="RktValLink" data-pltdoc="x">read-case-sensitive</a></span> parameter. For
|
|
example, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#I#D+InF.F+3I</span><span class="hspace"></span></span> is parsed the same as
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#i#d+inf.f+3i</span><span class="hspace"></span></span>. In the grammar below, each literal lowercase
|
|
letter stands for both itself and its uppercase form.</p><p><table cellspacing="0" cellpadding="0"><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">number<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">exact<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="sroman">‹<span style="font-style: italic">inexact<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">exact<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">exact-rational<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="sroman">‹<span style="font-style: italic">exact-complex<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">exact-rational<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">[</span><span class="sroman">‹<span style="font-style: italic">sign</span>›</span><span class="sroman">]</span><span class="hspace"> </span><span class="sroman">‹<span style="font-style: italic">unsigned-rational<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">unsigned-rational<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">unsigned-integer<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p> </p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">unsigned-integer<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span><span class="hspace"> </span><span class="sroman">‹<span style="font-style: italic">unsigned-integer<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">exact-integer<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">[</span><span class="sroman">‹<span style="font-style: italic">sign</span>›</span><span class="sroman">]</span><span class="hspace"> </span><span class="sroman">‹<span style="font-style: italic">unsigned-integer<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">unsigned-integer<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span><span style="vertical-align: super; font-size: 80%">+</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">exact-complex<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">exact-rational<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span><span class="hspace"> </span><span class="sroman">‹<span style="font-style: italic">sign</span>›</span><span class="hspace"> </span><span class="sroman">‹<span style="font-style: italic">unsigned-rational<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">i</span><span class="hspace"></span></span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">inexact<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">inexact-real<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="sroman">‹<span style="font-style: italic">inexact-complex<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">inexact-real<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">[</span><span class="sroman">‹<span style="font-style: italic">sign</span>›</span><span class="sroman">]</span><span class="hspace"> </span><span class="sroman">‹<span style="font-style: italic">inexact-normal<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p> </p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">sign</span>›</span><span class="hspace"> </span><span class="sroman">‹<span style="font-style: italic">inexact-special<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">inexact-unsigned<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">inexact-normal<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="sroman">‹<span style="font-style: italic">inexact-special<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">inexact-normal<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">inexact-simple<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span><span class="hspace"> </span><span class="sroman">[</span><span class="sroman">‹<span style="font-style: italic">exp-mark<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span> <span class="sroman">‹<span style="font-style: italic">exact-integer<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span><span class="sroman">]</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">inexact-simple<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">digits#<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span><span class="hspace"> </span><span class="sroman">[</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span><span class="sroman">]</span><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span><span class="sroman">*</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p> </p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">[</span><span class="sroman">‹<span style="font-style: italic">unsigned-integer<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span><span class="sroman">]</span><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span><span class="hspace"> </span><span class="sroman">‹<span style="font-style: italic">digits#<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p> </p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">digits#<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span><span class="hspace"> </span><span class="sroman">‹<span style="font-style: italic">digits#<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">inexact-special<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">inf.0</span><span class="hspace"></span></span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">nan.0</span><span class="hspace"></span></span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">inf.f</span><span class="hspace"></span></span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">nan.f</span><span class="hspace"></span></span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">digits#<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span><span style="vertical-align: super; font-size: 80%">+</span><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span><span class="sroman">*</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">inexact-complex<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">[</span><span class="sroman">‹<span style="font-style: italic">inexact-real<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span><span class="sroman">]</span><span class="hspace"> </span><span class="sroman">‹<span style="font-style: italic">sign</span>›</span><span class="hspace"> </span><span class="sroman">‹<span style="font-style: italic">inexact-unsigned<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">i</span><span class="hspace"></span></span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p> </p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">inexact-real<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">@</span><span class="hspace"></span></span><span class="hspace"> </span><span class="sroman">‹<span style="font-style: italic">inexact-real<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">sign</span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">+</span><span class="hspace"></span></span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">-</span><span class="hspace"></span></span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">16</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">a</span><span class="hspace"></span></span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">b</span><span class="hspace"></span></span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">c</span><span class="hspace"></span></span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">d</span><span class="hspace"></span></span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">e</span><span class="hspace"></span></span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">f</span><span class="hspace"></span></span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">8</span></span>›</span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">8</span><span class="hspace"></span></span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">9</span><span class="hspace"></span></span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">8</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">2</span></span>›</span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">2</span><span class="hspace"></span></span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">3</span><span class="hspace"></span></span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">4</span><span class="hspace"></span></span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">5</span><span class="hspace"></span></span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">6</span><span class="hspace"></span></span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">7</span><span class="hspace"></span></span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">2</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">0</span><span class="hspace"></span></span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">1</span><span class="hspace"></span></span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">exp-mark<span style="vertical-align: sub; font-size: 80%">16</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">s</span><span class="hspace"></span></span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">l</span><span class="hspace"></span></span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">exp-mark<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">exp-mark<span style="vertical-align: sub; font-size: 80%">16</span></span>›</span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">d</span><span class="hspace"></span></span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">e</span><span class="hspace"></span></span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">f</span><span class="hspace"></span></span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">exp-mark<span style="vertical-align: sub; font-size: 80%">8</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">exp-mark<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">exp-mark<span style="vertical-align: sub; font-size: 80%">2</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">exp-mark<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">general-number<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="sroman">[</span><span class="sroman">‹<span style="font-style: italic">exactness</span>›</span><span class="sroman">]</span><span class="hspace"> </span><span class="sroman">‹<span style="font-style: italic">number<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span></p></td><td valign="baseline"><p><span class="sroman">‹<span style="font-style: italic">exactness</span>›</span></p></td><td valign="baseline"><p><span class="stt"><span class="hspace"> </span>::=<span class="hspace"> </span></span></p></td><td valign="baseline"><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#e</span><span class="hspace"></span></span><span class="stt"><span class="hspace"> </span><span class="hspace"> </span>|<span class="hspace"> </span><span class="hspace"> </span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#i</span><span class="hspace"></span></span></p></td></tr></table></p><p><table cellspacing="0" cellpadding="0"><tr><td><p>Examples:</p></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">-1</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktVal"><span class="nobreak">-1</span></span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">1/2</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">/</span><span class="stt"> </span><span class="RktVal">1</span><span class="stt"> </span><span class="RktVal">2</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">1.0</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">exact->inexact</span><span class="stt"> </span><span class="RktVal">1</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">1+2i</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">make-rectangular</span><span class="stt"> </span><span class="RktVal">1</span><span class="stt"> </span><span class="RktVal">2</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">1/2+3/4i</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">make-rectangular</span><span class="stt"> </span><span class="RktPn">(</span><span class="RktSym">/</span><span class="stt"> </span><span class="RktVal">1</span><span class="stt"> </span><span class="RktVal">2</span><span class="RktPn">)</span><span class="stt"> </span><span class="RktPn">(</span><span class="RktSym">/</span><span class="stt"> </span><span class="RktVal">3</span><span class="stt"> </span><span class="RktVal">4</span><span class="RktPn">)</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">1.0+3.0e7i</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">exact->inexact</span><span class="stt"> </span><span class="RktPn">(</span><span class="RktSym">make-rectangular</span><span class="stt"> </span><span class="RktVal">1</span><span class="stt"> </span><span class="RktVal">30000000</span><span class="RktPn">)</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">2e5</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">exact->inexact</span><span class="stt"> </span><span class="RktVal">200000</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#i5</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">exact->inexact</span><span class="stt"> </span><span class="RktVal">5</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#e2e5</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktVal">200000</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#x2e5</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktVal">741</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#b101</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktVal">5</span></p></td></tr></table></td></tr></table></p><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""parse-extflonum"">1.3.4<tt> </tt><a name="(part._parse-extflonum)"></a>Reading Extflonums</h5><p>An <a href="extflonums.html#%28tech._extflonum%29" class="techoutside" data-pltdoc="x"><span class="techinside">extflonum</span></a> has the same syntax as an <span class="sroman">‹<span style="font-style: italic">inexact-real<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span>
|
|
that includes an <span class="sroman">‹<span style="font-style: italic">exp-mark<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span>, but with <span class="RktInBG"><span class="hspace"></span><span class="RktIn">t</span><span class="hspace"></span></span> or
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">T</span><span class="hspace"></span></span> in place of the <span class="sroman">‹<span style="font-style: italic">exp-mark<span style="vertical-align: sub; font-size: 80%">n</span></span>›</span>. In addition,
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">+inf.t</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">-inf.t</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">+nan.t</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">-nan.t</span><span class="hspace"></span></span>
|
|
are <a href="extflonums.html#%28tech._extflonum%29" class="techoutside" data-pltdoc="x"><span class="techinside">extflonums</span></a>. A <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#b</span><span class="hspace"></span></span>
|
|
(binary), <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#o</span><span class="hspace"></span></span> (octal), <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#d</span><span class="hspace"></span></span> (decimal), or
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#x</span><span class="hspace"></span></span> (hexadecimal) radix specification can prefix an
|
|
extflonum, but <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#i</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#e</span><span class="hspace"></span></span> cannot, and a
|
|
extflonum cannot be used to form a <a href="numbers.html#%28tech._complex._number%29" class="techoutside" data-pltdoc="x"><span class="techinside">complex number</span></a>. The
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-decimal-as-inexact%29%29" class="RktValLink" data-pltdoc="x">read-decimal-as-inexact</a></span> <a href="eval-model.html#%28tech._parameter%29" class="techoutside" data-pltdoc="x"><span class="techinside">parameter</span></a> has no effect on
|
|
extflonum reading.</p><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""parse-boolean"">1.3.5<tt> </tt><a name="(part._parse-boolean)"></a>Reading Booleans</h5><p>A <a name="(idx._(gentag._17._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#true</span><span class="hspace"></span></span>, <a name="(idx._(gentag._18._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#t</span><span class="hspace"></span></span>,
|
|
<a name="(idx._(gentag._19._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#T</span><span class="hspace"></span></span> followed by a <a href="reader.html#%28tech._delimiter%29" class="techoutside" data-pltdoc="x"><span class="techinside">delimiter</span></a> is the input syntax
|
|
for the <a href="booleans.html#%28tech._boolean%29" class="techoutside" data-pltdoc="x"><span class="techinside">boolean</span></a> constant “true,” and <a name="(idx._(gentag._20._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#false</span><span class="hspace"></span></span>,
|
|
<a name="(idx._(gentag._21._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#f</span><span class="hspace"></span></span>, or <a name="(idx._(gentag._22._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#F</span><span class="hspace"></span></span> followed by a
|
|
<a href="reader.html#%28tech._delimiter%29" class="techoutside" data-pltdoc="x"><span class="techinside">delimiter</span></a> is the complete input syntax for the <a href="booleans.html#%28tech._boolean%29" class="techoutside" data-pltdoc="x"><span class="techinside">boolean</span></a> constant
|
|
“false.”</p><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""parse-pair"">1.3.6<tt> </tt><a name="(part._parse-pair)"></a>Reading Pairs and Lists</h5><p>When the reader encounters a <a name="(idx._(gentag._23._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">(</span><span class="hspace"></span></span>,
|
|
<a name="(idx._(gentag._24._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">[</span><span class="hspace"></span></span>, or <a name="(idx._(gentag._25._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">{</span><span class="hspace"></span></span>, it starts
|
|
parsing a <a href="pairs.html#%28tech._pair%29" class="techoutside" data-pltdoc="x"><span class="techinside">pair</span></a> or <a href="pairs.html#%28tech._list%29" class="techoutside" data-pltdoc="x"><span class="techinside">list</span></a>; see <a href="pairs.html" data-pltdoc="x">Pairs and Lists</a> for information on pairs
|
|
and lists.</p><p>To parse the pair or list, the reader recursively reads data
|
|
until a matching <a name="(idx._(gentag._26._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">)</span><span class="hspace"></span></span>, <a name="(idx._(gentag._27._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">]</span><span class="hspace"></span></span>, or
|
|
<a name="(idx._(gentag._28._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">}</span><span class="hspace"></span></span> (respectively) is found, and it specially handles
|
|
a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span> surrounded by <a href="reader.html#%28tech._delimiter%29" class="techoutside" data-pltdoc="x"><span class="techinside">delimiters</span></a>. Pairs <span class="RktInBG"><span class="hspace"></span><span class="RktIn">()</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">[]</span><span class="hspace"></span></span>, and
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">{}</span><span class="hspace"></span></span> are treated the same way, so the remainder of this
|
|
section simply uses “parentheses” to mean any of these pair.</p><p>If the reader finds no delimited <a name="(idx._(gentag._29._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span> among the elements
|
|
between parentheses, then it produces a list containing the results of
|
|
the recursive reads.</p><p>If the reader finds two data between the matching parentheses
|
|
that are separated by a delimited <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span>, then it creates a
|
|
pair. More generally, if it finds two or more data where the
|
|
last datum is preceded by a delimited <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span>, then it constructs
|
|
nested pairs: the next-to-last element is paired with the last, then
|
|
the third-to-last datum is paired with that pair, and so on.</p><p>If the reader finds three or more data between the matching
|
|
parentheses, and if a pair of delimited <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span>s surrounds any
|
|
other than the first and last elements, the result is a list
|
|
containing the element surrounded by <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span>s as the first
|
|
element, followed by the others in the read order. This convention
|
|
supports a kind of <a name="(idx._(gentag._30._(lib._scribblings/reference/reference..scrbl)))"></a>infix notation at the reader level.</p><p>In <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode, the recursive reads for the pair/list
|
|
elements are themselves in <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode, so that the
|
|
result is a list or pair of syntax objects that is itself wrapped as a
|
|
syntax object. If the reader constructs nested pairs because the input
|
|
included a single delimited <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span>, then only the innermost pair
|
|
and outermost pair are wrapped as syntax objects.</p><p>Whether wrapping a pair or list, if the pair or list was formed with
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">[</span><span class="hspace"></span></span> and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">]</span><span class="hspace"></span></span>, then a <a name="(idx._(gentag._31._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktVal">'</span><span class="RktVal">paren-shape</span>
|
|
property is attached to the result with the value <span class="RktVal">#\[</span>. If the
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-square-bracket-with-tag%29%29" class="RktValLink" data-pltdoc="x">read-square-bracket-with-tag</a></span> <a href="eval-model.html#%28tech._parameter%29" class="techoutside" data-pltdoc="x"><span class="techinside">parameter</span></a> is set to
|
|
<span class="RktVal">#t</span>, then the resulting pair or list is wrapped by the
|
|
equivalent of <span class="RktPn">(</span><span class="RktSym"><a href="pairs.html#%28def._%28%28quote._~23~25kernel%29._cons%29%29" class="RktValLink" data-pltdoc="x">cons</a></span><span class="stt"> </span><a name="(idx._(gentag._32._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktVal">'</span><span class="RktVal">#%brackets</span><span class="stt"> </span><span class="RktVar">pair-or-list</span><span class="RktPn">)</span>.</p><p>Similarly, if the list or pair was formed with <span class="RktInBG"><span class="hspace"></span><span class="RktIn">{</span><span class="hspace"></span></span> and
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">}</span><span class="hspace"></span></span>, then a <span class="RktVal">'</span><span class="RktVal">paren-shape</span> property is attached to
|
|
the result with the value <span class="RktVal">#\{</span>. If the
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-curly-brace-with-tag%29%29" class="RktValLink" data-pltdoc="x">read-curly-brace-with-tag</a></span> <a href="eval-model.html#%28tech._parameter%29" class="techoutside" data-pltdoc="x"><span class="techinside">parameter</span></a> is set to
|
|
<span class="RktVal">#t</span>, then the resulting pair or list is wrapped by the
|
|
equivalent of <span class="RktPn">(</span><span class="RktSym"><a href="pairs.html#%28def._%28%28quote._~23~25kernel%29._cons%29%29" class="RktValLink" data-pltdoc="x">cons</a></span><span class="stt"> </span><a name="(idx._(gentag._33._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktVal">'</span><span class="RktVal">#%braces</span><span class="stt"> </span><span class="RktVar">pair-or-list</span><span class="RktPn">)</span>.</p><p>If a delimited <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span> appears in any other configuration, then
|
|
the <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aread%29%29" class="RktValLink" data-pltdoc="x">exn:fail:read</a></span> exception is raised. Similarly, if the reader encounters a
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">)</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">]</span><span class="hspace"></span></span>, or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">}</span><span class="hspace"></span></span> that does not end a list
|
|
being parsed, then the <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aread%29%29" class="RktValLink" data-pltdoc="x">exn:fail:read</a></span> exception is raised.</p><p><table cellspacing="0" cellpadding="0"><tr><td><p>Examples:</p></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">()</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">list</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">(1 2 3)</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">list</span><span class="stt"> </span><span class="RktVal">1</span><span class="stt"> </span><span class="RktVal">2</span><span class="stt"> </span><span class="RktVal">3</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">{1 2 3}</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">list</span><span class="stt"> </span><span class="RktVal">1</span><span class="stt"> </span><span class="RktVal">2</span><span class="stt"> </span><span class="RktVal">3</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">[1 2 3]</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">list</span><span class="stt"> </span><span class="RktVal">1</span><span class="stt"> </span><span class="RktVal">2</span><span class="stt"> </span><span class="RktVal">3</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">(1 (2) 3)</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">list</span><span class="stt"> </span><span class="RktVal">1</span><span class="stt"> </span><span class="RktPn">(</span><span class="RktSym">list</span><span class="stt"> </span><span class="RktVal">2</span><span class="RktPn">)</span><span class="stt"> </span><span class="RktVal">3</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">(1 . 3)</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">cons</span><span class="stt"> </span><span class="RktVal">1</span><span class="stt"> </span><span class="RktVal">3</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">(1 . (3))</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">list</span><span class="stt"> </span><span class="RktVal">1</span><span class="stt"> </span><span class="RktVal">3</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">(1 . 2 . 3)</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">list</span><span class="stt"> </span><span class="RktVal">2</span><span class="stt"> </span><span class="RktVal">1</span><span class="stt"> </span><span class="RktVal">3</span><span class="RktPn">)</span></p></td></tr></table></td></tr></table></p><p>If the <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-square-bracket-as-paren%29%29" class="RktValLink" data-pltdoc="x">read-square-bracket-as-paren</a></span> and
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-square-bracket-with-tag%29%29" class="RktValLink" data-pltdoc="x">read-square-bracket-with-tag</a></span> <a href="eval-model.html#%28tech._parameter%29" class="techoutside" data-pltdoc="x"><span class="techinside">parameter</span></a>s are set to
|
|
<span class="RktVal">#f</span>, then when the reader encounters <span class="RktInBG"><span class="hspace"></span><span class="RktIn">[</span><span class="hspace"></span></span> and
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">]</span><span class="hspace"></span></span>, the <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aread%29%29" class="RktValLink" data-pltdoc="x">exn:fail:read</a></span> exception is raised. Similarly, if the
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-curly-brace-as-paren%29%29" class="RktValLink" data-pltdoc="x">read-curly-brace-as-paren</a></span> and
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-curly-brace-with-tag%29%29" class="RktValLink" data-pltdoc="x">read-curly-brace-with-tag</a></span> <a href="eval-model.html#%28tech._parameter%29" class="techoutside" data-pltdoc="x"><span class="techinside">parameter</span></a>s are set to
|
|
<span class="RktVal">#f</span>, then when the reader encounters <span class="RktInBG"><span class="hspace"></span><span class="RktIn">{</span><span class="hspace"></span></span> and
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">}</span><span class="hspace"></span></span>, the <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aread%29%29" class="RktValLink" data-pltdoc="x">exn:fail:read</a></span> exception is raised.</p><p>If the <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-accept-dot%29%29" class="RktValLink" data-pltdoc="x">read-accept-dot</a></span> <a href="eval-model.html#%28tech._parameter%29" class="techoutside" data-pltdoc="x"><span class="techinside">parameter</span></a> is set to
|
|
<span class="RktVal">#f</span>, then a delimited <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span> triggers an
|
|
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aread%29%29" class="RktValLink" data-pltdoc="x">exn:fail:read</a></span> exception. If the
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-accept-infix-dot%29%29" class="RktValLink" data-pltdoc="x">read-accept-infix-dot</a></span> <a href="eval-model.html#%28tech._parameter%29" class="techoutside" data-pltdoc="x"><span class="techinside">parameter</span></a> is set to <span class="RktVal">#f</span>,
|
|
then multiple delimited <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span>s trigger an <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aread%29%29" class="RktValLink" data-pltdoc="x">exn:fail:read</a></span>
|
|
exception, instead of the infix conversion.</p><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""parse-string"">1.3.7<tt> </tt><a name="(part._parse-string)"></a><a name="(idx._(gentag._34._(lib._scribblings/reference/reference..scrbl)))"></a><a name="(idx._(gentag._35._(lib._scribblings/reference/reference..scrbl)))"></a><a name="(idx._(gentag._36._(lib._scribblings/reference/reference..scrbl)))"></a>Reading Strings</h5><blockquote class="refpara"><blockquote class="refcolumn"><blockquote class="refcontent"><p><span class="imageleft"><img src="finger.png" alt="+" width="24" height="24"/></span><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=strings.html&version=8.6" class="Sq" data-pltdoc="x">Strings (Unicode)</a> in <a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=index.html&version=8.6" class="Sq" data-pltdoc="x">The Racket Guide</a> introduces the syntax of strings.</p></blockquote></blockquote></blockquote><p>When the reader encounters <a name="(idx._(gentag._37._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">"</span><span class="hspace"></span></span>, it begins parsing
|
|
characters to form a <a href="strings.html#%28tech._string%29" class="techoutside" data-pltdoc="x"><span class="techinside">string</span></a>. The string continues until it is
|
|
terminated by another <span class="RktInBG"><span class="hspace"></span><span class="RktIn">"</span><span class="hspace"></span></span> (that is not escaped by
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>). The resulting string is <a href="reader.html#%28tech._interned%29" class="techoutside" data-pltdoc="x"><span class="techinside">interned</span></a> in
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode.</p><p>Within a string sequence, the following escape sequences are
|
|
recognized:</p><ul><li><p><a name="(idx._(gentag._38._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\a</span><span class="hspace"></span></span>: alarm (ASCII 7)</p></li><li><p><a name="(idx._(gentag._39._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\b</span><span class="hspace"></span></span>: backspace (ASCII 8)</p></li><li><p><a name="(idx._(gentag._40._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\t</span><span class="hspace"></span></span>: tab (ASCII 9)</p></li><li><p><a name="(idx._(gentag._41._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\n</span><span class="hspace"></span></span>: linefeed (ASCII 10)</p></li><li><p><a name="(idx._(gentag._42._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\v</span><span class="hspace"></span></span>: vertical tab (ASCII 11)</p></li><li><p><a name="(idx._(gentag._43._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\f</span><span class="hspace"></span></span>: formfeed (ASCII 12)</p></li><li><p><a name="(idx._(gentag._44._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\r</span><span class="hspace"></span></span>: return (ASCII 13)</p></li><li><p><a name="(idx._(gentag._45._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\e</span><span class="hspace"></span></span>: escape (ASCII 27)</p></li><li><p><a name="(idx._(gentag._46._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\"</span><span class="hspace"></span></span>: double-quotes (without terminating the string)</p></li><li><p><a name="(idx._(gentag._47._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\'</span><span class="hspace"></span></span>: quote (i.e., the backslash has no effect)</p></li><li><p><a name="(idx._(gentag._48._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\\</span><span class="hspace"></span></span>: backslash (i.e., the second is not an escaping backslash)</p></li><li><p><a name="(idx._(gentag._49._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">8</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,3}</span></span>:
|
|
Unicode for the octal number specified by digit<span style="vertical-align: sub; font-size: 80%">8</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,3}</span></span> (i.e., 1 to 3 <span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">8</span></span>›</span>s), where
|
|
each <span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">8</span></span>›</span> is <span class="RktInBG"><span class="hspace"></span><span class="RktIn">0</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">1</span><span class="hspace"></span></span>,
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">2</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">3</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">4</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">5</span><span class="hspace"></span></span>,
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">6</span><span class="hspace"></span></span>, or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">7</span><span class="hspace"></span></span>. A longer form takes precedence
|
|
over a shorter form, and the resulting octal number must be
|
|
between 0 and 255 decimal, otherwise the
|
|
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aread%29%29" class="RktValLink" data-pltdoc="x">exn:fail:read</a></span> exception is raised.</p></li><li><p><a name="(idx._(gentag._50._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\x</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">16</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,2}</span></span>: Unicode for the hexadecimal
|
|
number specified by <span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">16</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,2}</span></span>,
|
|
where each <span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">16</span></span>›</span> is <span class="RktInBG"><span class="hspace"></span><span class="RktIn">0</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">1</span><span class="hspace"></span></span>,
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">2</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">3</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">4</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">5</span><span class="hspace"></span></span>,
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">6</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">7</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">8</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">9</span><span class="hspace"></span></span>,
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">a</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">b</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">c</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">d</span><span class="hspace"></span></span>,
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">e</span><span class="hspace"></span></span>, or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">f</span><span class="hspace"></span></span> (case-insensitive). The longer form
|
|
takes precedence over the shorter form.</p></li><li><p><a name="(idx._(gentag._51._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\u</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">16</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,4}</span></span>: like <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\x</span><span class="hspace"></span></span>, but with up to
|
|
four hexadecimal digits (longer sequences take precedence).
|
|
The resulting hexadecimal number must be a valid argument to
|
|
<span class="RktSym"><a href="characters.html#%28def._%28%28quote._~23~25kernel%29._integer-~3echar%29%29" class="RktValLink" data-pltdoc="x">integer->char</a></span>, otherwise the
|
|
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aread%29%29" class="RktValLink" data-pltdoc="x">exn:fail:read</a></span> exception is raised—<wbr></wbr>unless the encoding continues with
|
|
another <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\u</span><span class="hspace"></span></span> to form a surrogate-style encoding.</p></li><li><p><a name="(idx._(gentag._52._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\u</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">16</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{4,4}</span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\u</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">16</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{4,4}</span></span>: like <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\u</span><span class="hspace"></span></span>, but for two
|
|
hexadecimal numbers, where the first is in the range
|
|
<span class="RktVal">#xD800</span><span class="RktMeta"></span> to <span class="RktVal">#xDBFF</span><span class="RktMeta"></span> and the second is in the
|
|
range <span class="RktVal">#xDC00</span><span class="RktMeta"></span> to <span class="RktVal">#xDFFF</span><span class="RktMeta"></span>; the resulting
|
|
character is the one represented by the numbers as a UTF-16
|
|
surrogate pair.</p></li><li><p><a name="(idx._(gentag._53._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\U</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">16</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,8}</span></span>: like <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\x</span><span class="hspace"></span></span>, but with up
|
|
to eight hexadecimal digits (longer sequences take precedence).
|
|
The resulting hexadecimal number must be a valid argument to
|
|
<span class="RktSym"><a href="characters.html#%28def._%28%28quote._~23~25kernel%29._integer-~3echar%29%29" class="RktValLink" data-pltdoc="x">integer->char</a></span>, otherwise the
|
|
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aread%29%29" class="RktValLink" data-pltdoc="x">exn:fail:read</a></span> exception is raised.</p></li><li><p><a name="(idx._(gentag._54._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">newline</span>›</span>: elided, where
|
|
<span class="sroman">‹<span style="font-style: italic">newline</span>›</span> is either a linefeed, carriage return, or
|
|
carriage return–linefeed combination. This convention allows
|
|
single-line strings to span multiple lines in the source.</p></li></ul><p>If the reader encounters any other use of a backslash in a string
|
|
constant, the <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aread%29%29" class="RktValLink" data-pltdoc="x">exn:fail:read</a></span> exception is raised.</p><blockquote class="refpara"><blockquote class="refcolumn"><blockquote class="refcontent"><p><span class="imageleft"><img src="finger.png" alt="+" width="24" height="24"/></span><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=bytestrings.html&version=8.6" class="Sq" data-pltdoc="x">Bytes and Byte Strings</a> in <a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=index.html&version=8.6" class="Sq" data-pltdoc="x">The Racket Guide</a> introduces the syntax of byte strings.</p></blockquote></blockquote></blockquote><p>A string constant preceded by <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span> is parsed as a
|
|
<a href="bytestrings.html#%28tech._byte._string%29" class="techoutside" data-pltdoc="x"><span class="techinside">byte string</span></a>. (That is, <a name="(idx._(gentag._55._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#"</span><span class="hspace"></span></span> starts a byte-string
|
|
literal.) See <a href="bytestrings.html" data-pltdoc="x">Byte Strings</a> for information on byte
|
|
strings. The resulting byte string is <a href="reader.html#%28tech._interned%29" class="techoutside" data-pltdoc="x"><span class="techinside">interned</span></a> in
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode.
|
|
Byte-string constants support the same escape sequences as
|
|
character strings, except <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\u</span><span class="hspace"></span></span> and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\U</span><span class="hspace"></span></span>. Otherwise, each
|
|
character within the byte-string quotes must have a Unicode code-point number
|
|
in the range 0 to 255, which is used as the corresponding byte’s value; if
|
|
a character is not in that range, the <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aread%29%29" class="RktValLink" data-pltdoc="x">exn:fail:read</a></span> exception is raised.</p><p>When the reader encounters <a name="(idx._(gentag._56._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#<<</span><span class="hspace"></span></span>, it starts parsing a
|
|
<a name="(idx._(gentag._57._(lib._scribblings/reference/reference..scrbl)))"></a><span style="font-style: italic">here string</span>. The characters following <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#<<</span><span class="hspace"></span></span> until
|
|
a newline character define a terminator for the string. The content of
|
|
the string includes all characters between the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#<<</span><span class="hspace"></span></span> line and
|
|
a line whose only content is the specified terminator. More precisely,
|
|
the content of the string starts after a newline following
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#<<</span><span class="hspace"></span></span>, and it ends before a newline that is followed by the
|
|
terminator, where the terminator is itself followed by either a
|
|
newline or end-of-file. No escape sequences are recognized between the
|
|
starting and terminating lines; all characters are included in the
|
|
string (and terminator) literally. A return character is not treated
|
|
as a line separator in this context. If no characters appear between
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#<<</span><span class="hspace"></span></span> and a newline or end-of-file, or if an end-of-file is
|
|
encountered before a terminating line, the <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aread%29%29" class="RktValLink" data-pltdoc="x">exn:fail:read</a></span> exception is raised.</p><p><table cellspacing="0" cellpadding="0"><tr><td><p>Examples:</p></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">"Apple"</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktVal"><span class="stt">"Apple"</span></span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">"\x41pple"</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktVal"><span class="stt">"Apple"</span></span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">"\"Apple\""</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktVal"><span class="stt">"\x22Apple\x22"</span></span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">"\\"</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktVal"><span class="stt">"\x5C"</span></span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#"Apple"</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">bytes</span><span class="stt"> </span><span class="RktVal">65</span><span class="stt"> </span><span class="RktVal">112</span><span class="stt"> </span><span class="RktVal">112</span><span class="stt"> </span><span class="RktVal">108</span><span class="stt"> </span><span class="RktVal">101</span><span class="RktPn">)</span></p></td></tr></table></td></tr></table></p><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""parse-quote"">1.3.8<tt> </tt><a name="(part._parse-quote)"></a>Reading Quotes</h5><p>When the reader encounters <a name="(idx._(gentag._58._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">'</span><span class="hspace"></span></span>, it recursively
|
|
reads one datum and forms a new list containing the <a href="symbols.html#%28tech._symbol%29" class="techoutside" data-pltdoc="x"><span class="techinside">symbol</span></a>
|
|
<span class="RktVal">'</span><span class="RktVal">quote</span> and the following datum. This convention is mainly
|
|
useful for reading Racket code, where <span class="RktVal">'</span><span class="RktVal">s</span> can be used as a
|
|
shorthand for <span class="RktPn">(</span><span class="RktSym">quote</span><span class="stt"> </span><span class="RktVal">s</span><span class="RktPn">)</span>.</p><p>Several other sequences are recognized and transformed in a similar
|
|
way. Longer prefixes take precedence over short ones:</p><p><table cellspacing="0" cellpadding="0"><tr><td><p><span class="hspace"> </span></p></td><td><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">'</span><span class="hspace"></span></span></p></td><td><p><span class="hspace"> </span>adds<span class="hspace"> </span></p></td><td><p><span class="RktSym"><a href="quote.html#%28form._%28%28quote._~23~25kernel%29._quote%29%29" class="RktStxLink" data-pltdoc="x">quote</a></span></p></td></tr><tr><td><p><span class="hspace"> </span></p></td><td><p><a name="(idx._(gentag._59._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">`</span><span class="hspace"></span></span></p></td><td><p><span class="hspace"> </span>adds<span class="hspace"> </span></p></td><td><p><span class="RktSym"><a href="quasiquote.html#%28form._%28%28lib._racket%2Fprivate%2Fletstx-scheme..rkt%29._quasiquote%29%29" class="RktStxLink" data-pltdoc="x">quasiquote</a></span></p></td></tr><tr><td><p><span class="hspace"> </span></p></td><td><p><a name="(idx._(gentag._60._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">,</span><span class="hspace"></span></span></p></td><td><p><span class="hspace"> </span>adds<span class="hspace"> </span></p></td><td><p><span class="RktSym"><a href="quasiquote.html#%28form._%28%28quote._~23~25kernel%29._unquote%29%29" class="RktStxLink" data-pltdoc="x">unquote</a></span></p></td></tr><tr><td><p><span class="hspace"> </span></p></td><td><p><a name="(idx._(gentag._61._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">,@</span><span class="hspace"></span></span></p></td><td><p><span class="hspace"> </span>adds<span class="hspace"> </span></p></td><td><p><span class="RktSym"><a href="quasiquote.html#%28form._%28%28quote._~23~25kernel%29._unquote-splicing%29%29" class="RktStxLink" data-pltdoc="x">unquote-splicing</a></span></p></td></tr><tr><td><p><span class="hspace"> </span></p></td><td><p><a name="(idx._(gentag._62._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#'</span><span class="hspace"></span></span></p></td><td><p><span class="hspace"> </span>adds<span class="hspace"> </span></p></td><td><p><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fstxcase-scheme..rkt%29._syntax%29%29" class="RktStxLink" data-pltdoc="x">syntax</a></span></p></td></tr><tr><td><p><span class="hspace"> </span></p></td><td><p><a name="(idx._(gentag._63._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#`</span><span class="hspace"></span></span></p></td><td><p><span class="hspace"> </span>adds<span class="hspace"> </span></p></td><td><p><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fqqstx..rkt%29._quasisyntax%29%29" class="RktStxLink" data-pltdoc="x">quasisyntax</a></span></p></td></tr><tr><td><p><span class="hspace"> </span></p></td><td><p><a name="(idx._(gentag._64._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#,</span><span class="hspace"></span></span></p></td><td><p><span class="hspace"> </span>adds<span class="hspace"> </span></p></td><td><p><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fqqstx..rkt%29._unsyntax%29%29" class="RktStxLink" data-pltdoc="x">unsyntax</a></span></p></td></tr><tr><td><p><span class="hspace"> </span></p></td><td><p><a name="(idx._(gentag._65._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#,@</span><span class="hspace"></span></span></p></td><td><p><span class="hspace"> </span>adds<span class="hspace"> </span></p></td><td><p><span class="RktSym"><a href="stx-patterns.html#%28form._%28%28lib._racket%2Fprivate%2Fqqstx..rkt%29._unsyntax-splicing%29%29" class="RktStxLink" data-pltdoc="x">unsyntax-splicing</a></span></p></td></tr></table></p><p><table cellspacing="0" cellpadding="0"><tr><td><p>Examples:</p></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">'apple</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">list</span><span class="stt"> </span><span class="RktVal">'</span><span class="RktVal">quote</span><span class="stt"> </span><span class="RktVal">'</span><span class="RktVal">apple</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">`(1 ,2)</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">list</span><span class="stt"> </span><span class="RktVal">'</span><span class="RktVal">quasiquote</span><span class="stt"> </span><span class="RktPn">(</span><span class="RktSym">list</span><span class="stt"> </span><span class="RktVal">1</span><span class="stt"> </span><span class="RktPn">(</span><span class="RktSym">list</span><span class="stt"> </span><span class="RktVal">'</span><span class="RktVal">unquote</span><span class="stt"> </span><span class="RktVal">2</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></p></td></tr></table></td></tr></table></p><p>The <span class="RktInBG"><span class="hspace"></span><span class="RktIn">`</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">,</span><span class="hspace"></span></span>, and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">,@</span><span class="hspace"></span></span> forms are disabled when
|
|
the <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-accept-quasiquote%29%29" class="RktValLink" data-pltdoc="x">read-accept-quasiquote</a></span> <a href="eval-model.html#%28tech._parameter%29" class="techoutside" data-pltdoc="x"><span class="techinside">parameter</span></a> is set to
|
|
<span class="RktVal">#f</span>, in which case the <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aread%29%29" class="RktValLink" data-pltdoc="x">exn:fail:read</a></span> exception is raised instead.</p><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""parse-comment"">1.3.9<tt> </tt><a name="(part._parse-comment)"></a>Reading Comments</h5><p>A <a name="(idx._(gentag._66._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">;</span><span class="hspace"></span></span> starts a line comment. When the reader
|
|
encounters <span class="RktInBG"><span class="hspace"></span><span class="RktIn">;</span><span class="hspace"></span></span>, it skips past all characters until the
|
|
next linefeed (ASCII 10), carriage return (ASCII 13), next-line
|
|
(Unicode <span class="RktVal">133</span>), line-separator (Unicode <span class="RktVal">8232</span>),
|
|
or paragraph-separator (Unicode <span class="RktVal">8233</span>) character.</p><p>A <a name="(idx._(gentag._67._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#|</span><span class="hspace"></span></span> starts a nestable block comment. When the
|
|
reader encounters <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#|</span><span class="hspace"></span></span>, it skips past all characters
|
|
until a closing <span class="RktInBG"><span class="hspace"></span><span class="RktIn">|#</span><span class="hspace"></span></span>. Pairs of matching <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#|</span><span class="hspace"></span></span> and
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">|#</span><span class="hspace"></span></span> can be nested.</p><p>A <a name="(idx._(gentag._68._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#;</span><span class="hspace"></span></span> starts an S-expression comment. When the
|
|
reader encounters <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#;</span><span class="hspace"></span></span>, it recursively reads one datum, and
|
|
then discards it (continuing on to the next datum for the read
|
|
result).</p><p>A <a name="(idx._(gentag._69._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#!</span><span class="hspace"> </span></span> (which is <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#!</span><span class="hspace"></span></span> followed by a space)
|
|
or <a name="(idx._(gentag._70._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#!/</span><span class="hspace"></span></span> starts a line comment that can be
|
|
continued to the next line by ending a line with <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>. This
|
|
form of comment normally appears at the beginning of a Unix script
|
|
file.</p><p><table cellspacing="0" cellpadding="0"><tr><td><p>Examples:</p></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">; comment</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span style="font-style: italic">nothing</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#| a |# 1</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktVal">1</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#| #| a |# 1 |# 2</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktVal">2</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#;1 2</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktVal">2</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#!/bin/sh</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span style="font-style: italic">nothing</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#! /bin/sh</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span style="font-style: italic">nothing</span></p></td></tr></table></td></tr></table></p><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""parse-vector"">1.3.10<tt> </tt><a name="(part._parse-vector)"></a>Reading Vectors</h5><p>When the reader encounters a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#(</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#[</span><span class="hspace"></span></span>, or
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#{</span><span class="hspace"></span></span>, it starts parsing a <a href="vectors.html#%28tech._vector%29" class="techoutside" data-pltdoc="x"><span class="techinside">vector</span></a>; see <a href="vectors.html" data-pltdoc="x">Vectors</a> for
|
|
information on vectors. A <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#fl</span><span class="hspace"></span></span> in place of <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span>
|
|
starts an <a href="flonums.html#%28tech._flvector%29" class="techoutside" data-pltdoc="x"><span class="techinside">flvector</span></a>, but is not allowed in <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode;
|
|
see <a href="flonums.html#%28part._flvectors%29" data-pltdoc="x">Flonum Vectors</a> for information on flvectors.
|
|
A <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#fx</span><span class="hspace"></span></span> in place of <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span>
|
|
starts an <a href="fixnums.html#%28tech._fxvector%29" class="techoutside" data-pltdoc="x"><span class="techinside">fxvector</span></a>, but is not allowed in <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode;
|
|
see <a href="fixnums.html#%28part._fxvectors%29" data-pltdoc="x">Fixnum Vectors</a> for information on fxvectors.
|
|
The <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#[</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#{</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#fl[</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#fl{</span><span class="hspace"></span></span>,
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#fx[</span><span class="hspace"></span></span>, and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#fx{</span><span class="hspace"></span></span> forms can be disabled through
|
|
the <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-square-bracket-as-paren%29%29" class="RktValLink" data-pltdoc="x">read-square-bracket-as-paren</a></span> and
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-curly-brace-as-paren%29%29" class="RktValLink" data-pltdoc="x">read-curly-brace-as-paren</a></span> <a href="eval-model.html#%28tech._parameter%29" class="techoutside" data-pltdoc="x"><span class="techinside">parameters</span></a>.</p><p>The elements of the vector are recursively read until a matching
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">)</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">]</span><span class="hspace"></span></span>, or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">}</span><span class="hspace"></span></span> is found, just as for
|
|
lists (see <a href="reader.html#%28part._parse-pair%29" data-pltdoc="x">Reading Pairs and Lists</a>). A delimited <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span> is not
|
|
allowed among the vector elements. In the case of <a href="flonums.html#%28tech._flvector%29" class="techoutside" data-pltdoc="x"><span class="techinside">flvectors</span></a>,
|
|
the recursive read for element is implicitly prefixed with <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#i</span><span class="hspace"></span></span>
|
|
and must produce a <a href="numbers.html#%28tech._flonum%29" class="techoutside" data-pltdoc="x"><span class="techinside">flonum</span></a>. In the case of <a href="fixnums.html#%28tech._fxvector%29" class="techoutside" data-pltdoc="x"><span class="techinside">fxvectors</span></a>,
|
|
the recursive read for element is implicitly prefixed with <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#e</span><span class="hspace"></span></span>
|
|
and must produce a <a href="numbers.html#%28tech._fixnum%29" class="techoutside" data-pltdoc="x"><span class="techinside">fixnum</span></a>.</p><p>An optional vector length can be specified between <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#fl</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#fx</span><span class="hspace"></span></span> and
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">(</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">[</span><span class="hspace"></span></span>, or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">{</span><span class="hspace"></span></span>. The size is specified
|
|
using a sequence of decimal digits, and the number of elements
|
|
provided for the vector must be no more than the specified size. If
|
|
fewer elements are provided, the last provided element is used for the
|
|
remaining vector slots; if no elements are provided, then <span class="RktVal">0</span>
|
|
is used for all slots.</p><p>In <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode, each recursive read for vector
|
|
elements is also in <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode, so that the wrapped
|
|
vector’s elements are also wrapped as syntax objects, and the vector is
|
|
immutable.</p><p><table cellspacing="0" cellpadding="0"><tr><td><p>Examples:</p></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#(1 apple 3)</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">vector</span><span class="stt"> </span><span class="RktVal">1</span><span class="stt"> </span><span class="RktVal">'</span><span class="RktVal">apple</span><span class="stt"> </span><span class="RktVal">3</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#3("apple" "banana")</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">vector</span><span class="stt"> </span><span class="RktVal">"apple"</span><span class="stt"> </span><span class="RktVal">"banana"</span><span class="stt"> </span><span class="RktVal">"banana"</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#3()</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">vector</span><span class="stt"> </span><span class="RktVal">0</span><span class="stt"> </span><span class="RktVal">0</span><span class="stt"> </span><span class="RktVal">0</span><span class="RktPn">)</span></p></td></tr></table></td></tr></table></p><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""parse-structure"">1.3.11<tt> </tt><a name="(part._parse-structure)"></a>Reading Structures</h5><p>When the reader encounters a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#s(</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#s[</span><span class="hspace"></span></span>, or
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#s{</span><span class="hspace"></span></span>, it starts parsing an instance of a <a href="structures.html#%28tech._prefab%29" class="techoutside" data-pltdoc="x"><span class="techinside">prefab</span></a>
|
|
<a href="structures.html#%28tech._structure._type%29" class="techoutside" data-pltdoc="x"><span class="techinside">structure type</span></a>; see <a href="structures.html" data-pltdoc="x">Structures</a> for information on
|
|
<a href="structures.html#%28tech._structure._type%29" class="techoutside" data-pltdoc="x"><span class="techinside">structure types</span></a>. The <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#s[</span><span class="hspace"></span></span> and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#s{</span><span class="hspace"></span></span> forms
|
|
can be disabled through the <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-square-bracket-as-paren%29%29" class="RktValLink" data-pltdoc="x">read-square-bracket-as-paren</a></span> and
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-curly-brace-as-paren%29%29" class="RktValLink" data-pltdoc="x">read-curly-brace-as-paren</a></span> <a href="eval-model.html#%28tech._parameter%29" class="techoutside" data-pltdoc="x"><span class="techinside">parameters</span></a>.</p><p>The elements of the structure are recursively read until a matching
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">)</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">]</span><span class="hspace"></span></span>, or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">}</span><span class="hspace"></span></span> is found, just as for lists
|
|
(see <a href="reader.html#%28part._parse-pair%29" data-pltdoc="x">Reading Pairs and Lists</a>). A single delimited <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span> is not
|
|
allowed among the elements, but two <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span>s can be used as in a
|
|
list for an infix conversion.</p><p>The first element is used as the structure descriptor, and it must
|
|
have the form (when quoted) of a possible argument to
|
|
<span class="RktSym"><a href="structutils.html#%28def._%28%28quote._~23~25kernel%29._make-prefab-struct%29%29" class="RktValLink" data-pltdoc="x">make-prefab-struct</a></span>; in the simplest case, it can be a
|
|
symbol. The remaining elements correspond to field values within the
|
|
structure.</p><p>In <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode, the structure type must not have any
|
|
mutable fields. The structure’s elements are read in
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode, so that the wrapped structure’s elements
|
|
are also wrapped as syntax objects.</p><p>If the first structure element is not a valid <a href="structures.html#%28tech._prefab%29" class="techoutside" data-pltdoc="x"><span class="techinside">prefab</span></a> structure
|
|
type key, or if the number of provided fields is inconsistent with the
|
|
indicated <a href="structures.html#%28tech._prefab%29" class="techoutside" data-pltdoc="x"><span class="techinside">prefab</span></a> structure type, the <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aread%29%29" class="RktValLink" data-pltdoc="x">exn:fail:read</a></span> exception is raised.</p><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""parse-hashtable"">1.3.12<tt> </tt><a name="(part._parse-hashtable)"></a>Reading Hash Tables</h5><p>A <a name="(idx._(gentag._71._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#hash</span><span class="hspace"></span></span> starts an immutable <a href="hashtables.html#%28tech._hash._table%29" class="techoutside" data-pltdoc="x"><span class="techinside">hash-table</span></a> constant
|
|
with key matching based on <span class="RktSym"><a href="Equality.html#%28def._%28%28quote._~23~25kernel%29._equal~3f%29%29" class="RktValLink" data-pltdoc="x">equal?</a></span>. The characters after
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">hash</span><span class="hspace"></span></span> must parse as a list of pairs (see
|
|
<a href="reader.html#%28part._parse-pair%29" data-pltdoc="x">Reading Pairs and Lists</a>) with a specific use of delimited <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span>:
|
|
it must appear between the elements of each pair in the list and
|
|
nowhere in the sequence of list elements. The first element of each
|
|
pair is used as the key for a table entry, and the second element of
|
|
each pair is the associated value.</p><p>A <a name="(idx._(gentag._72._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#hashalw</span><span class="hspace"></span></span> starts a hash table like
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#hash</span><span class="hspace"></span></span>, except that it constructs a hash table based on
|
|
<span class="RktSym"><a href="Equality.html#%28def._%28%28quote._~23~25kernel%29._equal-always~3f%29%29" class="RktValLink" data-pltdoc="x">equal-always?</a></span> instead of <span class="RktSym"><a href="Equality.html#%28def._%28%28quote._~23~25kernel%29._equal~3f%29%29" class="RktValLink" data-pltdoc="x">equal?</a></span>.</p><p>A <a name="(idx._(gentag._73._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#hasheq</span><span class="hspace"></span></span> starts a hash table like
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#hash</span><span class="hspace"></span></span>, except that it constructs a hash table based on
|
|
<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> instead of <span class="RktSym"><a href="Equality.html#%28def._%28%28quote._~23~25kernel%29._equal~3f%29%29" class="RktValLink" data-pltdoc="x">equal?</a></span>.</p><p>A <a name="(idx._(gentag._74._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#hasheqv</span><span class="hspace"></span></span> starts a hash table like
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#hash</span><span class="hspace"></span></span>, except that it constructs a hash table based on
|
|
<span class="RktSym"><a href="Equality.html#%28def._%28%28quote._~23~25kernel%29._eqv~3f%29%29" class="RktValLink" data-pltdoc="x">eqv?</a></span> instead of <span class="RktSym"><a href="Equality.html#%28def._%28%28quote._~23~25kernel%29._equal~3f%29%29" class="RktValLink" data-pltdoc="x">equal?</a></span>.</p><p>In all cases, the table is constructed by adding each mapping to the
|
|
hash table from left to right, so later mappings can hide earlier
|
|
mappings if the keys are equivalent.</p><p><table cellspacing="0" cellpadding="0"><tr><td><p>Examples, where <span class="RktSym">make-...</span> stands for <span class="RktSym"><a href="hashtables.html#%28def._%28%28quote._~23~25kernel%29._make-immutable-hash%29%29" class="RktValLink" data-pltdoc="x">make-immutable-hash</a></span>:</p></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#hash()</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">make-...</span><span class="stt"> </span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">)</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#hasheq()</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">make-...eq</span><span class="stt"> </span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">)</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#hash(("a" . 5))</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">make-...</span><span class="stt"> </span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">(</span><span class="RktVal">"a"</span><span class="stt"> </span><span class="RktVal">. </span><span class="RktVal">5</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#hasheq((a . 5) (b . 7))</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">make-...eq</span><span class="stt"> </span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">(</span><span class="RktVal">b</span><span class="stt"> </span><span class="RktVal">. </span><span class="RktVal">7</span><span class="RktVal">)</span><span class="stt"> </span><span class="RktVal">(</span><span class="RktVal">a</span><span class="stt"> </span><span class="RktVal">. </span><span class="RktVal">5</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#hasheq((a . 5) (a . 7))</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">make-...eq</span><span class="stt"> </span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">(</span><span class="RktVal">a</span><span class="stt"> </span><span class="RktVal">. </span><span class="RktVal">7</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktPn">)</span></p></td></tr></table></td></tr></table></p><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""parse-box"">1.3.13<tt> </tt><a name="(part._parse-box)"></a>Reading Boxes</h5><p>When the reader encounters a <a name="(idx._(gentag._75._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#&</span><span class="hspace"></span></span>, it starts
|
|
parsing a <a href="boxes.html#%28tech._box%29" class="techoutside" data-pltdoc="x"><span class="techinside">box</span></a>; see <a href="boxes.html" data-pltdoc="x">Boxes</a> for information on boxes. The
|
|
content of the box is determined by recursively reading the next
|
|
datum.</p><p>In <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode, the recursive read for the box content
|
|
is also in <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode, so that the wrapped box’s
|
|
content is also wrapped as a syntax object, and the box is immutable.</p><p><table cellspacing="0" cellpadding="0"><tr><td><p>Examples:</p></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#&17</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">box</span><span class="stt"> </span><span class="RktVal">17</span><span class="RktPn">)</span></p></td></tr></table></td></tr></table></p><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""parse-character"">1.3.14<tt> </tt><a name="(part._parse-character)"></a>Reading Characters</h5><blockquote class="refpara"><blockquote class="refcolumn"><blockquote class="refcontent"><p><span class="imageleft"><img src="finger.png" alt="+" width="24" height="24"/></span><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=characters.html&version=8.6" class="Sq" data-pltdoc="x">Characters</a> in <a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=index.html&version=8.6" class="Sq" data-pltdoc="x">The Racket Guide</a> introduces the syntax of characters.</p></blockquote></blockquote></blockquote><p>A <a name="(idx._(gentag._76._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\</span><span class="hspace"></span></span> starts a <a href="characters.html#%28tech._character%29" class="techoutside" data-pltdoc="x"><span class="techinside">character</span></a> constant, which has
|
|
one of the following forms:</p><ul><li><p><a name="(idx._(gentag._77._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\nul</span><span class="hspace"></span></span> or <a name="(idx._(gentag._78._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\null</span><span class="hspace"></span></span>: NUL (ASCII 0); the next character must not be <a href="characters.html#%28def._%28%28quote._~23~25kernel%29._char-alphabetic~3f%29%29" data-pltdoc="x">alphabetic</a>.</p></li><li><p><a name="(idx._(gentag._79._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\backspace</span><span class="hspace"></span></span>: backspace (ASCII 8); the next character must not be <a href="characters.html#%28def._%28%28quote._~23~25kernel%29._char-alphabetic~3f%29%29" data-pltdoc="x">alphabetic</a>.</p></li><li><p><a name="(idx._(gentag._80._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\tab</span><span class="hspace"></span></span>: tab (ASCII 9); the next character must not be <a href="characters.html#%28def._%28%28quote._~23~25kernel%29._char-alphabetic~3f%29%29" data-pltdoc="x">alphabetic</a>.</p></li><li><p><a name="(idx._(gentag._81._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\newline</span><span class="hspace"></span></span> or <a name="(idx._(gentag._82._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\linefeed</span><span class="hspace"></span></span>: linefeed (ASCII 10); the next character must not be <a href="characters.html#%28def._%28%28quote._~23~25kernel%29._char-alphabetic~3f%29%29" data-pltdoc="x">alphabetic</a>.</p></li><li><p><a name="(idx._(gentag._83._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\vtab</span><span class="hspace"></span></span>: vertical tab (ASCII 11); the next character must not be <a href="characters.html#%28def._%28%28quote._~23~25kernel%29._char-alphabetic~3f%29%29" data-pltdoc="x">alphabetic</a>.</p></li><li><p><a name="(idx._(gentag._84._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\page</span><span class="hspace"></span></span>: page break (ASCII 12); the next character must not be <a href="characters.html#%28def._%28%28quote._~23~25kernel%29._char-alphabetic~3f%29%29" data-pltdoc="x">alphabetic</a>.</p></li><li><p><a name="(idx._(gentag._85._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\return</span><span class="hspace"></span></span>: carriage return (ASCII 13); the next character must not be <a href="characters.html#%28def._%28%28quote._~23~25kernel%29._char-alphabetic~3f%29%29" data-pltdoc="x">alphabetic</a>.</p></li><li><p><a name="(idx._(gentag._86._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\space</span><span class="hspace"></span></span>: space (ASCII 32); the next character must not be <a href="characters.html#%28def._%28%28quote._~23~25kernel%29._char-alphabetic~3f%29%29" data-pltdoc="x">alphabetic</a>.</p></li><li><p><a name="(idx._(gentag._87._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\rubout</span><span class="hspace"></span></span>: delete (ASCII 127); the next character must not be <a href="characters.html#%28def._%28%28quote._~23~25kernel%29._char-alphabetic~3f%29%29" data-pltdoc="x">alphabetic</a>.</p></li><li><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">8</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{3,3}</span></span>:
|
|
Unicode for the octal number specified by three octal digits—<wbr></wbr>as in string escapes (see
|
|
<a href="reader.html#%28part._parse-string%29" data-pltdoc="x">Reading Strings</a>), but constrained to exactly three digits.</p></li><li><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\u</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">16</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,4}</span></span>:
|
|
Unicode for the hexadecimal number specified by <span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">16</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,4}</span></span>, as in string escapes (see
|
|
<a href="reader.html#%28part._parse-string%29" data-pltdoc="x">Reading Strings</a>).</p></li><li><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\U</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">16</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,8}</span></span>:
|
|
like <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\u</span><span class="hspace"></span></span>, but with up to eight hexadecimal digits (although
|
|
only six digits are actually useful).</p></li><li><p><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">c</span>›</span>: the character <span class="sroman">‹<span style="font-style: italic">c</span>›</span>, as long
|
|
as <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">c</span>›</span> and the characters following it
|
|
do not match any of the previous cases, as long as
|
|
<span class="sroman">‹<span style="font-style: italic">c</span>›</span> or the
|
|
character after <span class="sroman">‹<span style="font-style: italic">c</span>›</span> is not
|
|
<a href="characters.html#%28def._%28%28quote._~23~25kernel%29._char-alphabetic~3f%29%29" data-pltdoc="x">alphabetic</a>, and as long as
|
|
<span class="sroman">‹<span style="font-style: italic">c</span>›</span> is not an octal digit or is not followed by an
|
|
octal digit (i.e., two octal digits commit to a third).</p></li></ul><p><table cellspacing="0" cellpadding="0"><tr><td><p>Examples:</p></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\newline</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">integer->char</span><span class="stt"> </span><span class="RktVal">10</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\n</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">integer->char</span><span class="stt"> </span><span class="RktVal">110</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\u3BB</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">integer->char</span><span class="stt"> </span><span class="RktVal">955</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\λ</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">integer->char</span><span class="stt"> </span><span class="RktVal">955</span><span class="RktPn">)</span></p></td></tr></table></td></tr></table></p><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""parse-keyword"">1.3.15<tt> </tt><a name="(part._parse-keyword)"></a>Reading Keywords</h5><p>A <a name="(idx._(gentag._88._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#:</span><span class="hspace"></span></span> starts a <a href="keywords.html#%28tech._keyword%29" class="techoutside" data-pltdoc="x"><span class="techinside">keyword</span></a>. The parsing of a keyword
|
|
after the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#:</span><span class="hspace"></span></span> is the same as for a symbol, including
|
|
case-folding in case-insensitive mode, except that the part after
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#:</span><span class="hspace"></span></span> is never parsed as a number. The resulting keyword is
|
|
<a href="reader.html#%28tech._interned%29" class="techoutside" data-pltdoc="x"><span class="techinside">interned</span></a>.</p><p><table cellspacing="0" cellpadding="0"><tr><td><p>Examples:</p></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#:Apple</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">string->keyword</span><span class="stt"> </span><span class="RktVal">"Apple"</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#:1</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">string->keyword</span><span class="stt"> </span><span class="RktVal">"1"</span><span class="RktPn">)</span></p></td></tr></table></td></tr></table></p><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""parse-regexp"">1.3.16<tt> </tt><a name="(part._parse-regexp)"></a>Reading Regular Expressions</h5><p>A <a name="(idx._(gentag._89._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#rx</span><span class="hspace"></span></span> or <a name="(idx._(gentag._90._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#px</span><span class="hspace"></span></span> starts a
|
|
<a href="regexp.html#%28tech._regular._expression%29" class="techoutside" data-pltdoc="x"><span class="techinside">regular expression</span></a>. The characters immediately after <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#rx</span><span class="hspace"></span></span> or
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#px</span><span class="hspace"></span></span> must parse as a string or byte string (see
|
|
<a href="reader.html#%28part._parse-string%29" data-pltdoc="x">Reading Strings</a>). A <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#rx</span><span class="hspace"></span></span> prefix starts a regular
|
|
expression as would be constructed by <span class="RktSym"><a href="regexp.html#%28def._%28%28quote._~23~25kernel%29._regexp%29%29" class="RktValLink" data-pltdoc="x">regexp</a></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#px</span><span class="hspace"></span></span>
|
|
as constructed by <span class="RktSym"><a href="regexp.html#%28def._%28%28quote._~23~25kernel%29._pregexp%29%29" class="RktValLink" data-pltdoc="x">pregexp</a></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#rx#</span><span class="hspace"></span></span> as constructed by
|
|
<span class="RktSym"><a href="regexp.html#%28def._%28%28quote._~23~25kernel%29._byte-regexp%29%29" class="RktValLink" data-pltdoc="x">byte-regexp</a></span>, and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#px#</span><span class="hspace"></span></span> as constructed by
|
|
<span class="RktSym"><a href="regexp.html#%28def._%28%28quote._~23~25kernel%29._byte-pregexp%29%29" class="RktValLink" data-pltdoc="x">byte-pregexp</a></span>. The resulting regular expression is <a href="reader.html#%28tech._interned%29" class="techoutside" data-pltdoc="x"><span class="techinside">interned</span></a> in
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode.</p><p><table cellspacing="0" cellpadding="0"><tr><td><p>Examples:</p></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#rx".*"</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">regexp</span><span class="stt"> </span><span class="RktVal">".*"</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#px"[\\s]*"</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">pregexp</span><span class="stt"> </span><span class="RktVal">"[\\s]*"</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#rx#".*"</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">byte-regexp</span><span class="stt"> </span><span class="RktVal">#".*"</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#px#"[\\s]*"</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">byte-pregexp</span><span class="stt"> </span><span class="RktVal">#"[\\s]*"</span><span class="RktPn">)</span></p></td></tr></table></td></tr></table></p><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""parse-graph"">1.3.17<tt> </tt><a name="(part._parse-graph)"></a><a name="(idx._(gentag._91._(lib._scribblings/reference/reference..scrbl)))"></a><a name="(idx._(gentag._92._(lib._scribblings/reference/reference..scrbl)))"></a>Reading Graph Structure</h5><p>A <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,8}</span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">=</span><span class="hspace"></span></span> tags the following datum for reference via
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,8}</span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span>, which allows the reader to produce a datum that
|
|
has graph structure.</p><p>In <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read%29%29" class="RktValLink" data-pltdoc="x">read</a></span> mode, for a specific <span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,8}</span></span> in a single read
|
|
result, each <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,8}</span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span> reference is replaced by the datum read for
|
|
the corresponding <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,8}</span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">=</span><span class="hspace"></span></span>; the definition <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,8}</span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">=</span><span class="hspace"></span></span> also
|
|
produces just the datum after it. A <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,8}</span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">=</span><span class="hspace"></span></span> definition can appear
|
|
at most once, and a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,8}</span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">=</span><span class="hspace"></span></span> definition must appear before a
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,8}</span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span> reference appears, otherwise the <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aread%29%29" class="RktValLink" data-pltdoc="x">exn:fail:read</a></span> exception is raised.
|
|
If the <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-accept-graph%29%29" class="RktValLink" data-pltdoc="x">read-accept-graph</a></span> parameter is set to <span class="RktVal">#f</span>, then
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,8}</span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">=</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,8}</span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span> triggers a <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aread%29%29" class="RktValLink" data-pltdoc="x">exn:fail:read</a></span>
|
|
exception.</p><p>In <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode, graph structure is parsed the same way
|
|
as in <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read%29%29" class="RktValLink" data-pltdoc="x">read</a></span> mode. However, since <a href="syntax-model.html#%28tech._syntax._object%29" class="techoutside" data-pltdoc="x"><span class="techinside">syntax objects</span></a> made
|
|
from plain S-expressions may not contain cycles, each <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,8}</span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">=</span><span class="hspace"></span></span>
|
|
definition and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,8}</span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span> reference is replaced with a
|
|
<a href="pairs.html#%28tech._placeholder%29" class="techoutside" data-pltdoc="x"><span class="techinside">placeholder</span></a> in the result that contains the referenced value.
|
|
Since such syntax objects are not directly useful (they cannot be
|
|
marshaled to compiled code and are therefore rejected by the default
|
|
<a href="eval.html#%28tech._compilation._handler%29" class="techoutside" data-pltdoc="x"><span class="techinside">compilation handler</span></a>), parsing of graph structure in
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode is controlled by the separate
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax-accept-graph%29%29" class="RktValLink" data-pltdoc="x">read-syntax-accept-graph</a></span> parameter, which is initially set
|
|
to <span class="RktVal">#f</span>.</p><p>Although a comment parsed via <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#;</span><span class="hspace"></span></span> discards the datum
|
|
afterward, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#</span><span class="hspace"></span></span><span class="sroman">‹<span style="font-style: italic">digit<span style="vertical-align: sub; font-size: 80%">10</span></span>›</span><span class="sroman"><span style="vertical-align: super; font-size: 80%">{1,8}</span></span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">=</span><span class="hspace"></span></span> definitions in the discarded datum
|
|
still can be referenced by other parts of the reader input, as long as
|
|
both the comment and the reference are grouped together by some other
|
|
form (i.e., some recursive read); a top-level <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#;</span><span class="hspace"></span></span> comment
|
|
neither defines nor uses graph tags for other top-level forms.</p><p><table cellspacing="0" cellpadding="0"><tr><td><p>Examples:</p></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">(#1=100 #1# #1#)</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><p><span class="RktPn">(</span><span class="RktSym">list</span><span class="stt"> </span><span class="RktVal">100</span><span class="stt"> </span><span class="RktVal">100</span><span class="stt"> </span><span class="RktVal">100</span><span class="RktPn">)</span></p></td></tr><tr><td valign="baseline"><p><span class="hspace"> </span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#0=(1 . #0#)</span><span class="hspace"></span></span></p></td><td valign="baseline"><p><span class="hspace"> </span>reads equal to<span class="hspace"> </span></p></td><td valign="baseline"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="let.html#%28form._%28%28lib._racket%2Fprivate%2Fletstx-scheme..rkt%29._let%2A%29%29" class="RktStxLink" data-pltdoc="x">let*</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktPn">[</span><span class="RktSym">ph</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="pairs.html#%28def._%28%28quote._~23~25kernel%29._make-placeholder%29%29" class="RktValLink" data-pltdoc="x">make-placeholder</a></span><span class="hspace"> </span><span class="RktVal">#f</span><span class="RktPn">)</span><span class="RktPn">]</span></td></tr><tr><td><span class="hspace"> </span><span class="RktPn">[</span><span class="RktSym">v</span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="pairs.html#%28def._%28%28quote._~23~25kernel%29._cons%29%29" class="RktValLink" data-pltdoc="x">cons</a></span><span class="hspace"> </span><span class="RktVal">1</span><span class="hspace"> </span><span class="RktSym">ph</span><span class="RktPn">)</span><span class="RktPn">]</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="pairs.html#%28def._%28%28quote._~23~25kernel%29._placeholder-set%21%29%29" class="RktValLink" data-pltdoc="x">placeholder-set!</a></span><span class="hspace"> </span><span class="RktSym">ph</span><span class="hspace"> </span><span class="RktSym">v</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="pairs.html#%28def._%28%28quote._~23~25kernel%29._make-reader-graph%29%29" class="RktValLink" data-pltdoc="x">make-reader-graph</a></span><span class="hspace"> </span><span class="RktSym">v</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr></table></td></tr></table></p><p class="SHistory">Changed in version 8.4.0.8 of package <span class="stt">base</span>: Added support for reading graph structure
|
|
in <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode if enabled by
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax-accept-graph%29%29" class="RktValLink" data-pltdoc="x">read-syntax-accept-graph</a></span>.</p><table cellspacing="0" cellpadding="0"><tr><td></td></tr></table><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""parse-reader"">1.3.18<tt> </tt><a name="(part._parse-reader)"></a>Reading via an Extension</h5><blockquote class="refpara"><blockquote class="refcolumn"><blockquote class="refcontent"><p><span class="imageleft"><img src="finger.png" alt="+" width="24" height="24"/></span><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=hash-reader.html&version=8.6" class="Sq" data-pltdoc="x">Reader Extensions</a> in <a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=index.html&version=8.6" class="Sq" data-pltdoc="x">The Racket Guide</a> introduces reader extension.</p></blockquote></blockquote></blockquote><p>When the reader encounters <a name="(idx._(gentag._93._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#reader</span><span class="hspace"></span></span>, it loads
|
|
an external reader procedure and applies it to the current input
|
|
stream.</p><p>The reader recursively reads the next datum after <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#reader</span><span class="hspace"></span></span>,
|
|
and passes it to the procedure that is the value of the
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._current-reader-guard%29%29" class="RktValLink" data-pltdoc="x">current-reader-guard</a></span> <a href="eval-model.html#%28tech._parameter%29" class="techoutside" data-pltdoc="x"><span class="techinside">parameter</span></a>; the result is used as a
|
|
module path. The module path is passed to <span class="RktSym"><a href="Module_Names_and_Loading.html#%28def._%28%28quote._~23~25kernel%29._dynamic-require%29%29" class="RktValLink" data-pltdoc="x">dynamic-require</a></span>
|
|
with either <span class="RktVal">'</span><span class="RktVal">read</span> or <span class="RktVal">'</span><span class="RktVal">read-syntax</span> (depending on
|
|
whether the reader is in <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read%29%29" class="RktValLink" data-pltdoc="x">read</a></span> or <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span>
|
|
mode) while holding the registry lock via
|
|
<span class="RktSym"><a href="Namespaces.html#%28def._%28%28quote._~23~25kernel%29._namespace-call-with-registry-lock%29%29" class="RktValLink" data-pltdoc="x">namespace-call-with-registry-lock</a></span>.
|
|
The module is loaded in a <a href="Namespaces.html#%28tech._root._namespace%29" class="techoutside" data-pltdoc="x"><span class="techinside">root namespace</span></a> of the
|
|
<a href="syntax-model.html#%28tech._current._namespace%29" class="techoutside" data-pltdoc="x"><span class="techinside">current namespace</span></a>.</p><p>The arity of the resulting procedure determines whether it accepts
|
|
extra source-location information: a <span class="RktSym">read</span> procedure
|
|
accepts either one argument (an input port) or five, and a
|
|
<span class="RktSym">read-syntax</span> procedure accepts either two arguments (a
|
|
name value and an input port) or six. In either case, the four
|
|
optional arguments are the reader’s module path (as a syntax object in
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode) followed by the line (positive exact
|
|
integer or <span class="RktVal">#f</span>), column (non-negative exact integer or
|
|
<span class="RktVal">#f</span>), and position (positive exact integer or <span class="RktVal">#f</span>) of
|
|
the start of the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#reader</span><span class="hspace"></span></span> form. The input port is the one
|
|
whose stream contained <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#reader</span><span class="hspace"></span></span>, where the stream position is
|
|
immediately after the recursively read module path.</p><p>The procedure should produce a datum result. If the result is a
|
|
syntax object in <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read%29%29" class="RktValLink" data-pltdoc="x">read</a></span> mode, then it is converted to a datum
|
|
using <span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._syntax-~3edatum%29%29" class="RktValLink" data-pltdoc="x">syntax->datum</a></span>; if the result is not a syntax object in
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode, then it is converted to one using
|
|
<span class="RktSym"><a href="stxops.html#%28def._%28%28quote._~23~25kernel%29._datum-~3esyntax%29%29" class="RktValLink" data-pltdoc="x">datum->syntax</a></span>. See also <a href="reader-procs.html" data-pltdoc="x">Reader-Extension Procedures</a> for
|
|
information on the procedure’s results.</p><p>If the <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-accept-reader%29%29" class="RktValLink" data-pltdoc="x">read-accept-reader</a></span> <a href="eval-model.html#%28tech._parameter%29" class="techoutside" data-pltdoc="x"><span class="techinside">parameter</span></a> is set to
|
|
<span class="RktVal">#f</span>, then if the reader encounters <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#reader</span><span class="hspace"></span></span>, the
|
|
<span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aread%29%29" class="RktValLink" data-pltdoc="x">exn:fail:read</a></span> exception is raised.</p><blockquote class="refpara"><blockquote class="refcolumn"><blockquote class="refcontent"><p><span class="imageleft"><img src="finger.png" alt="+" width="24" height="24"/></span><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=Module_Syntax.html%23%2528part._hash-lang%2529&version=8.6" class="Sq" data-pltdoc="x">The <span class="RktMod">#lang</span> Shorthand</a> in <a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=index.html&version=8.6" class="Sq" data-pltdoc="x">The Racket Guide</a> introduces <span class="RktMod">#lang</span>.</p></blockquote></blockquote></blockquote><p>The <a name="(idx._(gentag._94._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#lang</span><span class="hspace"></span></span> reader form is similar to
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#reader</span><span class="hspace"></span></span>, but more constrained: the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#lang</span><span class="hspace"></span></span> must be
|
|
followed by a single space (ASCII 32), and then a non-empty sequence
|
|
of alphanumeric ASCII, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">+</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">-</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">_</span><span class="hspace"></span></span>, and/or
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span> characters terminated by
|
|
<a href="characters.html#%28def._%28%28quote._~23~25kernel%29._char-whitespace~3f%29%29" data-pltdoc="x">whitespace</a> or an end-of-file. The
|
|
sequence must not start or end with <span class="RktInBG"><span class="hspace"></span><span class="RktIn">/</span><span class="hspace"></span></span>. A sequence
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#lang</span><span class="hspace"> </span></span><span class="sroman">‹<span style="font-style: italic">name</span>›</span> is equivalent to either
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#reader (submod</span><span class="hspace"> </span></span><span class="sroman">‹<span style="font-style: italic">name</span>›</span><span class="RktInBG"><span class="hspace"> </span><span class="RktIn">reader)</span><span class="hspace"></span></span> or
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#reader</span><span class="hspace"> </span></span><span class="sroman">‹<span style="font-style: italic">name</span>›</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">/lang/reader</span><span class="hspace"></span></span>, where the
|
|
former is tried first guarded by a <span class="RktSym"><a href="Module_Names_and_Loading.html#%28def._%28%28quote._~23~25kernel%29._module-declared~3f%29%29" class="RktValLink" data-pltdoc="x">module-declared?</a></span>
|
|
check (but after filtering by
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._current-reader-guard%29%29" class="RktValLink" data-pltdoc="x">current-reader-guard</a></span>, so both are passed to the
|
|
value of <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._current-reader-guard%29%29" class="RktValLink" data-pltdoc="x">current-reader-guard</a></span> if the latter is used). Note
|
|
that the terminating whitespace (if any) is not consumed before the
|
|
external reading procedure is called.</p><blockquote class="refpara"><blockquote class="refcolumn"><blockquote class="refcontent"><p><span class="imageleft"><img src="finger.png" alt="+" width="24" height="24"/></span><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=hash-languages.html&version=8.6" class="Sq" data-pltdoc="x">Defining new <span class="RktModLink"><span class="RktMod">#lang</span></span> Languages</a> in <a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=index.html&version=8.6" class="Sq" data-pltdoc="x">The Racket Guide</a> introduces the creation languages for <a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=Module_Syntax.html%23%2528part._hash-lang%2529&version=8.6" class="RktModLink Sq" data-pltdoc="x"><span class="RktMod">#lang</span></a>.</p></blockquote></blockquote></blockquote><p>Finally, <a name="(idx._(gentag._95._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#!</span><span class="hspace"></span></span> is an alias for <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#lang</span><span class="hspace"></span></span>
|
|
followed by a space when <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#!</span><span class="hspace"></span></span> is followed by alphanumeric
|
|
ASCII, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">+</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">-</span><span class="hspace"></span></span>, or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">_</span><span class="hspace"></span></span>. Use of this alias
|
|
is discouraged except as needed to construct programs that conform to
|
|
certain grammars, such as that of R<span style="vertical-align: super; font-size: 80%">6</span>RS
|
|
[<a href="doc-bibliography.html#%28cite._.Sperber07%29" data-pltdoc="x">Sperber07</a>].</p><blockquote class="refpara"><blockquote class="refcolumn"><blockquote class="refcontent"><p>The <a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=syntax&rel=reader-helpers.html%23%2528mod-path._syntax%252Fmodule-reader%2529&version=8.6" class="RktModLink Sq" data-pltdoc="x"><span class="RktSym">syntax/module-reader</span></a> library provides a
|
|
domain-specific language for writing language readers.</p></blockquote></blockquote></blockquote><p>By convention, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#lang</span><span class="hspace"></span></span> normally appears at the beginning of a
|
|
file, possibly after comment forms, to specify the syntax of a module.</p><p>If the <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-accept-reader%29%29" class="RktValLink" data-pltdoc="x">read-accept-reader</a></span> or <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-accept-lang%29%29" class="RktValLink" data-pltdoc="x">read-accept-lang</a></span>
|
|
<a href="eval-model.html#%28tech._parameter%29" class="techoutside" data-pltdoc="x"><span class="techinside">parameter</span></a> is set to <span class="RktVal">#f</span>, then if the reader encounters
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#lang</span><span class="hspace"></span></span> or equivalent <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#!</span><span class="hspace"></span></span>, the <span class="RktSym"><a href="exns.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._exn~3afail~3aread%29%29" class="RktValLink" data-pltdoc="x">exn:fail:read</a></span> exception is raised.</p><p class="SHistory">Changed in version 8.2.0.2 of package <span class="stt">base</span>: Changed reader-module loading for <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#reader</span><span class="hspace"></span></span>
|
|
and <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#lang</span><span class="hspace"></span></span> to hold the current namespace
|
|
registry’s lock.</p><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""parse-cdot"">1.3.19<tt> </tt><a name="(part._parse-cdot)"></a>Reading with C-style Infix-Dot Notation</h5><p>When the <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-cdot%29%29" class="RktValLink" data-pltdoc="x">read-cdot</a></span> <a href="eval-model.html#%28tech._parameter%29" class="techoutside" data-pltdoc="x"><span class="techinside">parameter</span></a> is set to <span class="RktVal">#t</span>,
|
|
then a variety of changes occur in the reader.</p><p>First, symbols can no longer include the character <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span>, unless
|
|
the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span> is quoted with <span class="RktInBG"><span class="hspace"></span><span class="RktIn">|</span><span class="hspace"></span></span> or <span class="RktInBG"><span class="hspace"></span><span class="RktIn">\</span><span class="hspace"></span></span>.</p><p>Second, numbers can no longer include the character <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span>,
|
|
unless the number is prefixed with <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#e</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#i</span><span class="hspace"></span></span>,
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">#b</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#o</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#d</span><span class="hspace"></span></span>, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#x</span><span class="hspace"></span></span>, or an
|
|
equivalent prefix as discussed in <a href="reader.html#%28part._parse-number%29" data-pltdoc="x">Reading Numbers</a>. If these
|
|
numbers are followed by a <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span> intended to be read as a C-style
|
|
infix dot, then a <a href="reader.html#%28tech._delimiter%29" class="techoutside" data-pltdoc="x"><span class="techinside">delimiter</span></a> must precede the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span>.</p><p>Finally, after reading any datum <span class="RktVar">x</span>, the reader will consume
|
|
whitespace, BOM characters, and comments to look for zero or more sequences of a
|
|
<span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span> followed by another datum <span class="RktVar">y</span>. It will then group
|
|
<span class="RktVar">x</span> and <span class="RktVar">y</span> with <a name="(idx._(gentag._96._(lib._scribblings/reference/reference..scrbl)))"></a><span class="RktVal">'</span><span class="RktVal">#%dot</span> so that
|
|
<span class="RktVar">x.y</span> reads equal to reading <span class="RktPn">(</span><span class="RktSym">#%dot</span><span class="stt"> </span><span class="RktVar">x</span><span class="stt"> </span><span class="RktVar">y</span><span class="RktPn">)</span>.</p><p>If <span class="RktVar">x.y</span> has another <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span> after it, the reader will
|
|
accumulate more <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span>-separated datums, grouping them from
|
|
left-to-right. For example, <span class="RktVar">x.y.z</span> reads equal to reading
|
|
<span class="RktPn">(</span><span class="RktSym">#%dot</span><span class="stt"> </span><span class="RktPn">(</span><span class="RktSym">#%dot</span><span class="stt"> </span><span class="RktVar">x</span><span class="stt"> </span><span class="RktVar">y</span><span class="RktPn">)</span><span class="stt"> </span><span class="RktVar">z</span><span class="RktPn">)</span>.</p><p>In <span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read-syntax%29%29" class="RktValLink" data-pltdoc="x">read-syntax</a></span> mode, the <span class="RktVal">'</span><span class="RktVal">#%dot</span> symbol has the
|
|
source location information of the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span> character and the
|
|
entire list has the source location information spanning from the
|
|
start of <span class="RktVar">x</span> to the end of <span class="RktVar">y</span>.</p><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""S-Expression_Reader_Language"">1.3.19.1<tt> </tt><a name="(part._.S-.Expression_.Reader_.Language)"></a><a name="(mod-path._s-exp)"></a>S-Expression Reader Language</h5><p><table cellspacing="0" cellpadding="0" class="defmodule"><tr><td align="left"><span class="hspace"> </span><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=Module_Syntax.html%23%2528part._hash-lang%2529&version=8.6" class="RktModLink Sq" data-pltdoc="x"><span class="RktMod">#lang</span></a><span class="hspace"> </span><a href="reader.html#%28mod-path._s-exp%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">s-exp</span></a></td><td align="right"><span class="RpackageSpec"><span class="Smaller"> 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></p><blockquote class="refpara"><blockquote class="refcolumn"><blockquote class="refcontent"><p><span class="imageleft"><img src="finger.png" alt="+" width="24" height="24"/></span><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=module-languages.html%23%2528part._s-exp%2529&version=8.6" class="Sq" data-pltdoc="x">Using <span class="RktModLink"><span class="RktMod">#lang</span></span><span class="stt"> </span><span class="RktModLink"><span class="RktSym">s-exp</span></span></a> in <a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=index.html&version=8.6" class="Sq" data-pltdoc="x">The Racket Guide</a> introduces the <a href="reader.html#%28mod-path._s-exp%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">s-exp</span></a> meta-language.</p></blockquote></blockquote></blockquote><p>The <span class="RktSym">s-exp</span> “language” is a kind of meta-language. It
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read%29%29" class="RktValLink" data-pltdoc="x">read</a></span>s the S-expression that follows <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#lang s-exp</span><span class="hspace"></span></span> and
|
|
uses it as the language of a <span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%29%29" class="RktStxLink" data-pltdoc="x">module</a></span> form. It also reads all
|
|
remaining S-expressions until an end-of-file, using them for the body
|
|
of the generated <span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%29%29" class="RktStxLink" data-pltdoc="x">module</a></span>.</p><p>That is,</p><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=Module_Syntax.html%23%2528part._hash-lang%2529&version=8.6" class="RktModLink Sq" data-pltdoc="x"><span class="RktMod">#lang</span></a><span class="hspace"> </span><a href="reader.html#%28mod-path._s-exp%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">s-exp</span></a><span class="hspace"> </span><span class="RktVar">module-path</span></td></tr><tr><td><span class="RktVar">form</span><span class="hspace"> </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></td></tr></table></blockquote><p>is equivalent to</p><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="module.html#%28form._%28%28quote._~23~25kernel%29._module%29%29" class="RktStxLink" data-pltdoc="x">module</a></span><span class="hspace"> </span><span class="RktVar">name-id</span><span class="hspace"> </span><span class="RktVar">module-path</span></td></tr><tr><td><span class="hspace"> </span><span class="RktVar">form</span><span class="hspace"> </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="RktPn">)</span></td></tr></table></blockquote><p>where <span class="RktVar">name-id</span> is derived from the source input port’s name:
|
|
if the port name is a filename path, the filename without its
|
|
directory path and extension is used for <span class="RktVar">name-id</span>, otherwise
|
|
<span class="RktVar">name-id</span> is <span class="RktSym">anonymous-module</span>.</p><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-source-pkg="racket-doc" x-part-tag=""Chaining_Reader_Language"">1.3.19.2<tt> </tt><a name="(part._.Chaining_.Reader_.Language)"></a><a name="(mod-path._reader)"></a>Chaining Reader Language</h5><p><table cellspacing="0" cellpadding="0" class="defmodule"><tr><td align="left"><span class="hspace"> </span><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=Module_Syntax.html%23%2528part._hash-lang%2529&version=8.6" class="RktModLink Sq" data-pltdoc="x"><span class="RktMod">#lang</span></a><span class="hspace"> </span><a href="reader.html#%28mod-path._reader%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">reader</span></a></td><td align="right"><span class="RpackageSpec"><span class="Smaller"> 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></p><blockquote class="refpara"><blockquote class="refcolumn"><blockquote class="refcontent"><p><span class="imageleft"><img src="finger.png" alt="+" width="24" height="24"/></span><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=hash-lang_reader.html&version=8.6" class="Sq" data-pltdoc="x">Using <span class="RktModLink"><span class="RktMod">#lang</span></span><span class="stt"> </span><span class="RktModLink"><span class="RktSym">reader</span></span></a> in <a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=index.html&version=8.6" class="Sq" data-pltdoc="x">The Racket Guide</a> introduces the <a href="reader.html#%28mod-path._reader%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">reader</span></a> meta-language.</p></blockquote></blockquote></blockquote><p>The <span class="RktSym">reader</span> “language” is a kind of meta-language. It
|
|
<span class="RktSym"><a href="Reading.html#%28def._%28%28quote._~23~25kernel%29._read%29%29" class="RktValLink" data-pltdoc="x">read</a></span>s the S-expression that follows <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#lang reader</span><span class="hspace"></span></span>
|
|
and uses it as a module path (relative to the module being read) that
|
|
effectively takes the place of <a href="reader.html#%28mod-path._reader%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">reader</span></a>. In other words,
|
|
the <a href="reader.html#%28mod-path._reader%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">reader</span></a> meta-language generalizes the syntax of the
|
|
module specified after <a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=guide&rel=Module_Syntax.html%23%2528part._hash-lang%2529&version=8.6" class="RktModLink Sq" data-pltdoc="x"><span class="RktMod">#lang</span></a> to be a module path, and without
|
|
the implicit addition of <span class="RktInBG"><span class="hspace"></span><span class="RktIn">/lang/reader</span><span class="hspace"></span></span> to the path.</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, "8.6", "../");"/></form> <a href="https://docs.racket-lang.org/index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot("8.6");">top</a><span class="tocsettoggle"> <a href="javascript:void(0);" title="show/hide table of contents" onclick="TocsetToggle();">contents</a></span></span><span class="navright"> <a href="syntax-model.html" title="backward to "1.2 Syntax Model"" data-pltdoc="x">← prev</a> <a href="model.html" title="up to "1 Language Model"" data-pltdoc="x">up</a> <a href="printing.html" title="forward to "1.4 The Printer"" data-pltdoc="x">next →</a></span> </div></div></div><div id="contextindicator"> </div></body></html> |