/usr/share/doc/racket/reference/reader.html is in racket-doc 6.1-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 | <!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"/><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"><span style="font-weight: bold">The Racket Reference</span></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="" 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></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="" 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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%28part._parse-reader%29" class="tocviewlink" data-pltdoc="x">Reading via an Extension</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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%28part._parse-reader%29" class="tocsubseclink" data-pltdoc="x">Reading via an Extension</a></td></tr><tr><td><span class="tocsublinknumber">1.3.18.1<tt> </tt></span><a href="#%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.18.2<tt> </tt></span><a href="#%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" style="color: #888;" type="text" value="...search manuals..." title="Enter a search string to search the manuals" onkeypress="return DoSearchKey(event, this, "6.1", "../");" onfocus="this.style.color="black"; this.style.textAlign="left"; if (this.value == "...search manuals...") this.value="";" onblur="if (this.value.match(/^ *$/)) { this.style.color="#888"; this.style.textAlign="center"; this.value="...search manuals..."; }"/></form> <a href="../index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot("6.1");">top</a></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-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="booleans.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="booleans.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 <a href="#%28tech._interned%29" class="techoutside" data-pltdoc="x"><span class="techinside">interned</span></a> 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. Sending an
<a href="#%28tech._interned%29" class="techoutside" data-pltdoc="x"><span class="techinside">interned</span></a> 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 <a href="#%28tech._interned%29" class="techoutside" data-pltdoc="x"><span class="techinside">interned</span></a> 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><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" 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>, the following
characters are <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._2._(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._3._(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, 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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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></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="#%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></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="#%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></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="#%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></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="#%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></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="#%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></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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%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="#%28part._parse-symbol%29" data-pltdoc="x">Reading Symbols</a></p></td></tr></table></p><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" 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="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=symbols.html&version=6.1" class="Sq" data-pltdoc="x">Symbols</a> in <a href="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=index.html&version=6.1" class="Sq" data-pltdoc="x"><span style="font-weight: bold">The Racket Guide</span></a> introduces the syntax of symbols.</p></blockquote></blockquote></blockquote><p>A sequence that does not start with a delimiter 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="#%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="#%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 <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> also
starts a symbol. The resulting symbol is <a href="#%28tech._interned%29" class="techoutside" data-pltdoc="x"><span class="techinside">interned</span></a>. A successful
number or extflonum parse takes precedence over a symbol parse.</p><p><a name="(idx._(gentag._5._(lib._scribblings/reference/reference..scrbl)))"></a><a name="(idx._(gentag._6._(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._7._(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._8._(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-part-tag=""parse-number"">1.3.3<tt> </tt><a name="(part._parse-number)"></a><a name="(idx._(gentag._9._(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="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=numbers.html&version=6.1" class="Sq" data-pltdoc="x">Numbers</a> in <a href="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=index.html&version=6.1" class="Sq" data-pltdoc="x"><span style="font-weight: bold">The Racket Guide</span></a> introduces the syntax of numbers.</p></blockquote></blockquote></blockquote><p>A sequence that does not start with a delimiter 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="#%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._10._(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._11._(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._12._(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._13._(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._14._(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._15._(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 delimiter 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="#%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 single-precision
IEEE floating point is supported (see <a href="numbers.html" data-pltdoc="x">Numbers</a>), 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-precision. Otherwise, or
with any other mark, double-precision IEEE floating point is used.
In addition, single- and double-precision specials 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, whereas specials with the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.f</span><span class="hspace"></span></span> suffix are
single-precision.</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><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-complex</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-complex</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-complex</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-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-part-tag=""parse-boolean"">1.3.5<tt> </tt><a name="(part._parse-boolean)"></a>Reading Booleans</h5><p>A <a name="(idx._(gentag._16._(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._17._(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._18._(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 delimiter 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._19._(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._20._(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._21._(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
delimiter 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-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._22._(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._23._(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._24._(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._25._(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._26._(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._27._(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 delimited <span class="RktInBG"><span class="hspace"></span><span class="RktIn">.</span><span class="hspace"></span></span>. 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._28._(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._29._(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. 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._30._(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 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>.</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> <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 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="RktVal">"exn:fail:read"</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> <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 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="RktVal">"exn:fail:read"</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-part-tag=""parse-string"">1.3.7<tt> </tt><a name="(part._parse-string)"></a><a name="(idx._(gentag._31._(lib._scribblings/reference/reference..scrbl)))"></a><a name="(idx._(gentag._32._(lib._scribblings/reference/reference..scrbl)))"></a><a name="(idx._(gentag._33._(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="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=strings.html&version=6.1" class="Sq" data-pltdoc="x">Strings (Unicode)</a> in <a href="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=index.html&version=6.1" class="Sq" data-pltdoc="x"><span style="font-weight: bold">The Racket Guide</span></a> introduces the syntax of strings.</p></blockquote></blockquote></blockquote><p>When the reader encounters <a name="(idx._(gentag._34._(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="#%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._35._(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._36._(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._37._(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._38._(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._39._(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._40._(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._41._(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._42._(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._43._(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._44._(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._45._(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._46._(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._47._(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._48._(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._49._(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._50._(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._51._(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="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=bytestrings.html&version=6.1" class="Sq" data-pltdoc="x">Bytes and Byte Strings</a> in <a href="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=index.html&version=6.1" class="Sq" data-pltdoc="x"><span style="font-weight: bold">The Racket Guide</span></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._52._(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="#%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>.</p><p>When the reader encounters <a name="(idx._(gentag._53._(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._54._(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-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._55._(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._56._(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._57._(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._58._(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._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="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._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="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._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="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._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%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-part-tag=""parse-comment"">1.3.9<tt> </tt><a name="(part._parse-comment)"></a>Reading Comments</h5><p>A <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> 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._64._(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._65._(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._66._(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._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 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-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="#%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="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">#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-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="#%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-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._68._(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="booleans.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="#%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._69._(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="booleans.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="booleans.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._70._(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="booleans.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="booleans.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-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._71._(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-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="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=characters.html&version=6.1" class="Sq" data-pltdoc="x">Characters</a> in <a href="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=index.html&version=6.1" class="Sq" data-pltdoc="x"><span style="font-weight: bold">The Racket Guide</span></a> introduces the syntax of characters.</p></blockquote></blockquote></blockquote><p>A <a name="(idx._(gentag._72._(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><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\nul</span><span class="hspace"></span></span> or <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><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><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><span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\newline</span><span class="hspace"></span></span> or <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><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><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><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><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><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%">{1,3}</span></span>:
Unicode for the octal number specified by <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>, as in string escapes (see
<a href="#%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,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.</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,6}</span></span>:
like <span class="RktInBG"><span class="hspace"></span><span class="RktIn">#\x</span><span class="hspace"></span></span>, but with up to six hexadecimal digits.</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, and as long as 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>.</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-part-tag=""parse-keyword"">1.3.15<tt> </tt><a name="(part._parse-keyword)"></a>Reading Keywords</h5><p>A <a name="(idx._(gentag._73._(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="#%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-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._74._(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._75._(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="#%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="#%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-part-tag=""parse-graph"">1.3.17<tt> </tt><a name="(part._parse-graph)"></a><a name="(idx._(gentag._76._(lib._scribblings/reference/reference..scrbl)))"></a><a name="(idx._(gentag._77._(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>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>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><table cellspacing="0" cellpadding="0"><tr><td></td></tr></table><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" 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="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=hash-reader.html&version=6.1" class="Sq" data-pltdoc="x">Reader Extensions</a> in <a href="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=index.html&version=6.1" class="Sq" data-pltdoc="x"><span style="font-weight: bold">The Racket Guide</span></a> introduces reader extension.</p></blockquote></blockquote></blockquote><p>When the reader encounters <a name="(idx._(gentag._78._(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).</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="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=Module_Syntax.html%23%2528part._hash-lang%2529&version=6.1" class="Sq" data-pltdoc="x">The <span class="RktMod">#lang</span> Shorthand</a> in <a href="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=index.html&version=6.1" class="Sq" data-pltdoc="x"><span style="font-weight: bold">The Racket Guide</span></a> introduces <span class="RktMod">#lang</span>.</p></blockquote></blockquote></blockquote><p>The <a name="(idx._(gentag._79._(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="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=hash-languages.html&version=6.1" class="Sq" data-pltdoc="x">Defining new <span class="RktModLink"><span class="RktMod">#lang</span></span> Languages</a> in <a href="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=index.html&version=6.1" class="Sq" data-pltdoc="x"><span style="font-weight: bold">The Racket Guide</span></a> introduces the creation languages for <a href="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=Module_Syntax.html%23%2528part._hash-lang%2529&version=6.1" class="RktModLink Sq" data-pltdoc="x"><span class="RktMod">#lang</span></a>.</p></blockquote></blockquote></blockquote><p>Finally, <a name="(idx._(gentag._80._(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="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=syntax&rel=reader-helpers.html%23%2528mod-path._syntax%252Fmodule-reader%2529&version=6.1" 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><h5 x-source-module="(lib "scribblings/reference/reference.scrbl")" x-part-tag=""S-Expression_Reader_Language"">1.3.18.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="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=Module_Syntax.html%23%2528part._hash-lang%2529&version=6.1" class="RktModLink Sq" data-pltdoc="x"><span class="RktMod">#lang</span></a><span class="hspace"> </span><a href="#%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> <span class="stt">base</span></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="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=module-languages.html%23%2528part._s-exp%2529&version=6.1" 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="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=index.html&version=6.1" class="Sq" data-pltdoc="x"><span style="font-weight: bold">The Racket Guide</span></a> introduces the <a href="#%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="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=Module_Syntax.html%23%2528part._hash-lang%2529&version=6.1" class="RktModLink Sq" data-pltdoc="x"><span class="RktMod">#lang</span></a><span class="hspace"> </span><a href="#%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-part-tag=""Chaining_Reader_Language"">1.3.18.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="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=Module_Syntax.html%23%2528part._hash-lang%2529&version=6.1" class="RktModLink Sq" data-pltdoc="x"><span class="RktMod">#lang</span></a><span class="hspace"> </span><a href="#%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> <span class="stt">base</span></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="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=hash-lang_reader.html&version=6.1" 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="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=index.html&version=6.1" class="Sq" data-pltdoc="x"><span style="font-weight: bold">The Racket Guide</span></a> introduces the <a href="#%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="#%28mod-path._reader%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">reader</span></a>. In other words,
the <a href="#%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="http://download.racket-lang.org/docs/6.1/html/local-redirect/index.html?doc=guide&rel=Module_Syntax.html%23%2528part._hash-lang%2529&version=6.1" 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" style="color: #888;" type="text" value="...search manuals..." title="Enter a search string to search the manuals" onkeypress="return DoSearchKey(event, this, "6.1", "../");" onfocus="this.style.color="black"; this.style.textAlign="left"; if (this.value == "...search manuals...") this.value="";" onblur="if (this.value.match(/^ *$/)) { this.style.color="#888"; this.style.textAlign="center"; this.value="...search manuals..."; }"/></form> <a href="../index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot("6.1");">top</a></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>
|