75 lines
No EOL
34 KiB
HTML
75 lines
No EOL
34 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
|
<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"/><meta name="viewport" content="width=device-width, initial-scale=0.8"/><title>1 Welcome to Racket</title><link rel="stylesheet" type="text/css" href="../scribble.css" title="default"/><link rel="stylesheet" type="text/css" href="../racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-style.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../manual-racket.css" title="default"/><link rel="stylesheet" type="text/css" href="../doc-site.css" title="default"/><script type="text/javascript" src="../scribble-common.js"></script><script type="text/javascript" src="../manual-racket.js"></script><script type="text/javascript" src="../manual-racket.js"></script><script type="text/javascript" src="../doc-site.js"></script><script type="text/javascript" src="../local-redirect/local-redirect.js"></script><script type="text/javascript" src="../local-redirect/local-user-redirect.js"></script><!--[if IE 6]><style type="text/css">.SIEHidden { overflow: hidden; }</style><![endif]--></head><body id="doc-racket-lang-org"><div class="tocset"><div class="tocview"><div class="tocviewlist tocviewlisttopspace"><div class="tocviewtitle"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,"tocview_0");">▼</a></td><td></td><td><a href="index.html" class="tocviewlink" data-pltdoc="x">The Racket Guide</a></td></tr></table></div><div class="tocviewsublisttop" style="display: block;" id="tocview_0"><table cellspacing="0" cellpadding="0"><tr><td align="right">1 </td><td><a href="intro.html" class="tocviewselflink" data-pltdoc="x">Welcome to Racket</a></td></tr><tr><td align="right">2 </td><td><a href="to-scheme.html" class="tocviewlink" data-pltdoc="x">Racket Essentials</a></td></tr><tr><td align="right">3 </td><td><a href="datatypes.html" class="tocviewlink" data-pltdoc="x">Built-<wbr></wbr>In Datatypes</a></td></tr><tr><td align="right">4 </td><td><a href="scheme-forms.html" class="tocviewlink" data-pltdoc="x">Expressions and Definitions</a></td></tr><tr><td align="right">5 </td><td><a href="define-struct.html" class="tocviewlink" data-pltdoc="x">Programmer-<wbr></wbr>Defined Datatypes</a></td></tr><tr><td align="right">6 </td><td><a href="modules.html" class="tocviewlink" data-pltdoc="x">Modules</a></td></tr><tr><td align="right">7 </td><td><a href="contracts.html" class="tocviewlink" data-pltdoc="x">Contracts</a></td></tr><tr><td align="right">8 </td><td><a href="i_o.html" class="tocviewlink" data-pltdoc="x">Input and Output</a></td></tr><tr><td align="right">9 </td><td><a href="regexp.html" class="tocviewlink" data-pltdoc="x">Regular Expressions</a></td></tr><tr><td align="right">10 </td><td><a href="control.html" class="tocviewlink" data-pltdoc="x">Exceptions and Control</a></td></tr><tr><td align="right">11 </td><td><a href="for.html" class="tocviewlink" data-pltdoc="x">Iterations and Comprehensions</a></td></tr><tr><td align="right">12 </td><td><a href="match.html" class="tocviewlink" data-pltdoc="x">Pattern Matching</a></td></tr><tr><td align="right">13 </td><td><a href="classes.html" class="tocviewlink" data-pltdoc="x">Classes and Objects</a></td></tr><tr><td align="right">14 </td><td><a href="units.html" class="tocviewlink" data-pltdoc="x">Units</a></td></tr><tr><td align="right">15 </td><td><a href="reflection.html" class="tocviewlink" data-pltdoc="x">Reflection and Dynamic Evaluation</a></td></tr><tr><td align="right">16 </td><td><a href="macros.html" class="tocviewlink" data-pltdoc="x">Macros</a></td></tr><tr><td align="right">17 </td><td><a href="languages.html" class="tocviewlink" data-pltdoc="x">Creating Languages</a></td></tr><tr><td align="right">18 </td><td><a href="concurrency.html" class="tocviewlink" data-pltdoc="x">Concurrency and Synchronization</a></td></tr><tr><td align="right">19 </td><td><a href="performance.html" class="tocviewlink" data-pltdoc="x">Performance</a></td></tr><tr><td align="right">20 </td><td><a href="parallelism.html" class="tocviewlink" data-pltdoc="x">Parallelism</a></td></tr><tr><td align="right">21 </td><td><a href="running.html" class="tocviewlink" data-pltdoc="x">Running and Creating Executables</a></td></tr><tr><td align="right">22 </td><td><a href="More_Libraries.html" class="tocviewlink" data-pltdoc="x">More Libraries</a></td></tr><tr><td align="right">23 </td><td><a href="dialects.html" class="tocviewlink" data-pltdoc="x">Dialects of Racket and Scheme</a></td></tr><tr><td align="right">24 </td><td><a href="other-editors.html" class="tocviewlink" data-pltdoc="x">Command-<wbr></wbr>Line Tools and Your Editor of Choice</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="intro.html" class="tocviewselflink" data-pltdoc="x">Welcome to Racket</a></td></tr></table><div class="tocviewsublistbottom" style="display: none;" id="tocview_1"><table cellspacing="0" cellpadding="0"><tr><td align="right">1.1 </td><td><a href="intro.html#%28part._.Interacting_with_.Racket%29" class="tocviewlink" data-pltdoc="x">Interacting with Racket</a></td></tr><tr><td align="right">1.2 </td><td><a href="intro.html#%28part._.Definitions_and_.Interactions%29" class="tocviewlink" data-pltdoc="x">Definitions and Interactions</a></td></tr><tr><td align="right">1.3 </td><td><a href="intro.html#%28part._.Creating_.Executables%29" class="tocviewlink" data-pltdoc="x">Creating Executables</a></td></tr><tr><td align="right">1.4 </td><td><a href="intro.html#%28part._use-module%29" class="tocviewlink" data-pltdoc="x">A Note to Readers with Lisp/<span class="mywbr"> </span>Scheme Experience</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.1<tt> </tt></span><a href="intro.html#%28part._.Interacting_with_.Racket%29" class="tocsubseclink" data-pltdoc="x">Interacting with Racket</a></td></tr><tr><td><span class="tocsublinknumber">1.2<tt> </tt></span><a href="intro.html#%28part._.Definitions_and_.Interactions%29" class="tocsubseclink" data-pltdoc="x">Definitions and Interactions</a></td></tr><tr><td><span class="tocsublinknumber">1.3<tt> </tt></span><a href="intro.html#%28part._.Creating_.Executables%29" class="tocsubseclink" data-pltdoc="x">Creating Executables</a></td></tr><tr><td><span class="tocsublinknumber">1.4<tt> </tt></span><a href="intro.html#%28part._use-module%29" class="tocsubseclink" data-pltdoc="x">A Note to Readers with Lisp/<span class="mywbr"> </span>Scheme Experience</a></td></tr></table></div></div><div class="maincolumn"><div class="main"><div class="navsettop"><span class="navleft"><form class="searchform"><input class="searchbox" id="searchbox" type="text" tabindex="1" placeholder="...search manuals..." title="Enter a search string to search the manuals" onkeypress="return DoSearchKey(event, this, "8.6", "../");"/></form> <a href="https://download.racket-lang.org/releases/8.6/doc/index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot("8.6");">top</a><span class="tocsettoggle"> <a href="javascript:void(0);" title="show/hide table of contents" onclick="TocsetToggle();">contents</a></span></span><span class="navright"> <a href="index.html" title="backward to "The Racket Guide"" data-pltdoc="x">← prev</a> <a href="index.html" title="up to "The Racket Guide"" data-pltdoc="x">up</a> <a href="to-scheme.html" title="forward to "2 Racket Essentials"" data-pltdoc="x">next →</a></span> </div><h3 x-source-module="(lib "scribblings/guide/guide.scrbl")" x-source-pkg="racket-doc" x-part-tag=""intro"">1<tt> </tt><a name="(part._intro)"></a>Welcome to Racket</h3><p>Depending on how you look at it, <span style="font-weight: bold">Racket</span> is</p><ul><li><p>a <span style="font-style: italic">programming language</span>—<wbr></wbr>a dialect of Lisp and a
|
|
descendant of Scheme;</p><blockquote class="refpara"><blockquote class="refcolumn"><blockquote class="refcontent"><p>See <a href="dialects.html" data-pltdoc="x">Dialects of Racket and Scheme</a> for more information on
|
|
other dialects of Lisp and how they relate to Racket.</p></blockquote></blockquote></blockquote></li><li><p>a <span style="font-style: italic">family</span> of programming languages—<wbr></wbr>variants of
|
|
Racket, and more; or</p></li><li><p>a set of <span style="font-style: italic">tools</span>—<wbr></wbr>for using a family of programming languages.</p></li></ul><p>Where there is no room for confusion, we use simply <span style="font-style: italic">Racket</span>.</p><p>Racket’s main tools are</p><ul><li><p><span style="font-weight: bold"><span class="stt">racket</span></span>, the core compiler, interpreter, and run-time system;</p></li><li><p><span style="font-weight: bold">DrRacket</span>, the programming environment; and</p></li><li><p><span style="font-weight: bold"><span class="stt">raco</span></span>, a command-line tool for executing <span style="font-weight: bold">Ra</span>cket
|
|
<span style="font-weight: bold">co</span>mmands that install packages, build libraries, and more.</p></li></ul><p>Most likely, you’ll want to explore the Racket language using
|
|
DrRacket, especially at the beginning. If you prefer, you can also
|
|
work with the command-line <span class="stt">racket</span> interpreter and your favorite
|
|
text editor; see also <a href="other-editors.html" data-pltdoc="x">Command-Line Tools and Your Editor of Choice</a>. The rest of this guide
|
|
presents the language mostly independent of your choice of editor.</p><p>If you’re using DrRacket, you’ll need to choose the proper language,
|
|
because DrRacket accommodates many different variants of Racket, as
|
|
well as other languages. Assuming that you’ve never used DrRacket
|
|
before, start it up, type the line</p><blockquote class="SCodeFlow"><p><a href="Module_Syntax.html#%28part._hash-lang%29" class="RktModLink" data-pltdoc="x"><span class="RktMod">#lang</span></a><span class="hspace"> </span><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=reference&rel=index.html&version=8.6" class="RktModLink Sq" data-pltdoc="x"><span class="RktSym">racket</span></a></p></blockquote><p>in DrRacket’s top text area, and then click the <span class="ssansserif">Run</span> button
|
|
that’s above the text area. DrRacket then understands that you mean to
|
|
work in the normal variant of Racket (as opposed to the smaller
|
|
<a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=reference&rel=index.html&version=8.6" class="RktModLink Sq" data-pltdoc="x"><span class="RktSym">racket/base</span></a> or many other possibilities).</p><blockquote class="refpara"><blockquote class="refcolumn"><blockquote class="refcontent"><p><a href="more-hash-lang.html" data-pltdoc="x">More Rackets</a> describes some of the other
|
|
possibilities.</p></blockquote></blockquote></blockquote><p>If you’ve used DrRacket before with something other than a program
|
|
that starts <a href="Module_Syntax.html#%28part._hash-lang%29" class="RktModLink" data-pltdoc="x"><span class="RktMod">#lang</span></a>, DrRacket will remember the last language
|
|
that you used, instead of inferring the language from the <a href="Module_Syntax.html#%28part._hash-lang%29" class="RktModLink" data-pltdoc="x"><span class="RktMod">#lang</span></a>
|
|
line. In that case, use the <span class="ssansserif">Language|Choose Language...</span>
|
|
menu item. In the dialog that appears, select the first item, which
|
|
tells DrRacket to use the language that is declared in a source
|
|
program via <a href="Module_Syntax.html#%28part._hash-lang%29" class="RktModLink" data-pltdoc="x"><span class="RktMod">#lang</span></a>. Put the <a href="Module_Syntax.html#%28part._hash-lang%29" class="RktModLink" data-pltdoc="x"><span class="RktMod">#lang</span></a> line above in the top
|
|
text area, still.</p><h4 x-source-module="(lib "scribblings/guide/guide.scrbl")" x-source-pkg="racket-doc" x-part-tag=""Interacting_with_Racket"">1.1<tt> </tt><a name="(part._.Interacting_with_.Racket)"></a>Interacting with Racket</h4><p>DrRacket’s bottom text area and the <span class="stt">racket</span> command-line program
|
|
(when started with no options) both act as a kind of calculator. You
|
|
type a Racket expression, hit the Return key, and the answer is
|
|
printed. In the terminology of Racket, this kind of calculator is
|
|
called a <span style="font-style: italic">read-eval-print loop</span> or <a name="(tech._repl)"></a><span style="font-style: italic">REPL</span>.</p><p>A number by itself is an expression, and the answer is just the
|
|
number:</p><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">> </span><span class="RktVal">5</span></td></tr><tr><td><p><span class="RktRes">5</span></p></td></tr></table></blockquote><p>A string is also an expression that evaluates to itself. A string is
|
|
written with double quotes at the start and end of the string:</p><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">> </span><span class="RktVal">"Hello, world!"</span></td></tr><tr><td><p><span class="RktRes">"Hello, world!"</span></p></td></tr></table></blockquote><p>Racket uses parentheses to wrap larger expressions—<wbr></wbr>almost any kind
|
|
of expression, other than simple constants. For example, a function
|
|
call is written: open parenthesis, function name, argument
|
|
expression, and closing parenthesis. The following expression calls
|
|
the built-in function <span class="RktSym"><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=reference&rel=strings.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._substring%2529%2529&version=8.6" class="RktValLink Sq" data-pltdoc="x">substring</a></span> with the arguments
|
|
<span class="RktVal">"the boy out of the country"</span>, <span class="RktVal">4</span>, and <span class="RktVal">7</span>:</p><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=reference&rel=strings.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._substring%2529%2529&version=8.6" class="RktValLink Sq" data-pltdoc="x">substring</a></span><span class="hspace"> </span><span class="RktVal">"the boy out of the country"</span><span class="hspace"> </span><span class="RktVal">4</span><span class="hspace"> </span><span class="RktVal">7</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">"boy"</span></p></td></tr></table></blockquote><h4 x-source-module="(lib "scribblings/guide/guide.scrbl")" x-source-pkg="racket-doc" x-part-tag=""Definitions_and_Interactions"">1.2<tt> </tt><a name="(part._.Definitions_and_.Interactions)"></a>Definitions and Interactions</h4><p>You can define your own functions that work like <span class="RktSym"><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=reference&rel=strings.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._substring%2529%2529&version=8.6" class="RktValLink Sq" data-pltdoc="x">substring</a></span> by
|
|
using the <span class="RktSym"><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=reference&rel=define.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fbase..rkt%2529._define%2529%2529&version=8.6" class="RktStxLink Sq" data-pltdoc="x">define</a></span> form, like this:</p><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0"><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=reference&rel=define.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fbase..rkt%2529._define%2529%2529&version=8.6" class="RktStxLink Sq" data-pltdoc="x">define</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">extract</span><span class="hspace"> </span><span class="RktSym">str</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=reference&rel=strings.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._substring%2529%2529&version=8.6" class="RktValLink Sq" data-pltdoc="x">substring</a></span><span class="hspace"> </span><span class="RktSym">str</span><span class="hspace"> </span><span class="RktVal">4</span><span class="hspace"> </span><span class="RktVal">7</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><p> </p></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">> </span><span class="RktPn">(</span><span class="RktSym">extract</span><span class="hspace"> </span><span class="RktVal">"the boy out of the country"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">"boy"</span></p></td></tr><tr><td><span class="stt">> </span><span class="RktPn">(</span><span class="RktSym">extract</span><span class="hspace"> </span><span class="RktVal">"the country out of the boy"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">"cou"</span></p></td></tr></table></td></tr></table></blockquote><p>Although you can evaluate the <span class="RktSym"><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=reference&rel=define.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fbase..rkt%2529._define%2529%2529&version=8.6" class="RktStxLink Sq" data-pltdoc="x">define</a></span> form in the <a href="intro.html#%28tech._repl%29" class="techoutside" data-pltdoc="x"><span class="techinside">REPL</span></a>,
|
|
definitions are normally a part of a program that you want to keep and
|
|
use later. So, in DrRacket, you’d normally put the definition in the
|
|
top text area—<wbr></wbr>called the <a name="(tech._definitions._area)"></a><span style="font-style: italic">definitions area</span>—<wbr></wbr>along with the
|
|
<a href="Module_Syntax.html#%28part._hash-lang%29" class="RktModLink" data-pltdoc="x"><span class="RktMod">#lang</span></a> prefix:</p><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><a href="Module_Syntax.html#%28part._hash-lang%29" class="RktModLink" data-pltdoc="x"><span class="RktMod">#lang</span></a><span class="hspace"> </span><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=reference&rel=index.html&version=8.6" class="RktModLink Sq" data-pltdoc="x"><span class="RktSym">racket</span></a></td></tr><tr><td><span class="hspace"> </span></td></tr><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=reference&rel=define.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fbase..rkt%2529._define%2529%2529&version=8.6" class="RktStxLink Sq" data-pltdoc="x">define</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">extract</span><span class="hspace"> </span><span class="RktSym">str</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=reference&rel=strings.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._substring%2529%2529&version=8.6" class="RktValLink Sq" data-pltdoc="x">substring</a></span><span class="hspace"> </span><span class="RktSym">str</span><span class="hspace"> </span><span class="RktVal">4</span><span class="hspace"> </span><span class="RktVal">7</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></blockquote><p>If calling <span class="RktPn">(</span><span class="RktSym">extract</span><span class="stt"> </span><span class="RktVal">"the boy"</span><span class="RktPn">)</span> is part of the main action of
|
|
your program, that would go in the <a href="intro.html#%28tech._definitions._area%29" class="techoutside" data-pltdoc="x"><span class="techinside">definitions area</span></a>, too. But
|
|
if it was just an example expression that you were using to explore
|
|
<span class="RktSym">extract</span>, then you’d more likely leave the <a href="intro.html#%28tech._definitions._area%29" class="techoutside" data-pltdoc="x"><span class="techinside">definitions
|
|
area</span></a> as above, click <span class="ssansserif">Run</span>, and then evaluate
|
|
<span class="RktPn">(</span><span class="RktSym">extract</span><span class="stt"> </span><span class="RktVal">"the boy"</span><span class="RktPn">)</span> in the <a href="intro.html#%28tech._repl%29" class="techoutside" data-pltdoc="x"><span class="techinside">REPL</span></a>.</p><p>When using command-line <span class="stt">racket</span> instead of DrRacket, you’d save
|
|
the above text in a file using your favorite editor. If you save it as
|
|
<span class="stt">"extract.rkt"</span>, then after starting <span class="stt">racket</span> in the same
|
|
directory, you’d evaluate the following sequence:</p><blockquote class="refpara"><blockquote class="refcolumn"><blockquote class="refcontent"><p>If you use <a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=xrepl&rel=index.html&version=8.6" class="RktModLink Sq" data-pltdoc="x"><span class="RktSym">xrepl</span></a>, you can use
|
|
<a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=xrepl&rel=index.html%23%2528xrepl._enter%2529&version=8.6" class="plainlink Sq" data-pltdoc="x"><span class="RktInBG"><span class="hspace"></span><span class="RktIn">,enter extract.rkt</span><span class="hspace"></span></span></a>.</p></blockquote></blockquote></blockquote><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=reference&rel=interactive.html%23%2528form._%2528%2528lib._racket%252Fenter..rkt%2529._enter%2521%2529%2529&version=8.6" class="RktStxLink Sq" data-pltdoc="x">enter!</a></span><span class="hspace"> </span><span class="RktVal">"extract.rkt"</span><span class="RktPn">)</span></td></tr><tr><td><span class="stt">> </span><span class="RktPn">(</span><span class="RktSym">extract</span><span class="hspace"> </span><span class="RktVal">"the gal out of the city"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">"gal"</span></p></td></tr></table></blockquote><p>The <span class="RktSym"><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=reference&rel=interactive.html%23%2528form._%2528%2528lib._racket%252Fenter..rkt%2529._enter%2521%2529%2529&version=8.6" class="RktStxLink Sq" data-pltdoc="x">enter!</a></span> form both loads the code and switches the
|
|
evaluation context to the inside of the module, just like DrRacket’s
|
|
<span class="ssansserif">Run</span> button.</p><h4 x-source-module="(lib "scribblings/guide/guide.scrbl")" x-source-pkg="racket-doc" x-part-tag=""Creating_Executables"">1.3<tt> </tt><a name="(part._.Creating_.Executables)"></a>Creating Executables</h4><p>If your file (or <a href="intro.html#%28tech._definitions._area%29" class="techoutside" data-pltdoc="x"><span class="techinside">definitions area</span></a> in DrRacket) contains</p><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><a href="Module_Syntax.html#%28part._hash-lang%29" class="RktModLink" data-pltdoc="x"><span class="RktMod">#lang</span></a><span class="hspace"> </span><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=reference&rel=index.html&version=8.6" class="RktModLink Sq" data-pltdoc="x"><span class="RktSym">racket</span></a></td></tr><tr><td><span class="hspace"> </span></td></tr><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=reference&rel=define.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fbase..rkt%2529._define%2529%2529&version=8.6" class="RktStxLink Sq" data-pltdoc="x">define</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">extract</span><span class="hspace"> </span><span class="RktSym">str</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=reference&rel=strings.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._substring%2529%2529&version=8.6" class="RktValLink Sq" data-pltdoc="x">substring</a></span><span class="hspace"> </span><span class="RktSym">str</span><span class="hspace"> </span><span class="RktVal">4</span><span class="hspace"> </span><span class="RktVal">7</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span></td></tr><tr><td><span class="RktPn">(</span><span class="RktSym">extract</span><span class="hspace"> </span><span class="RktVal">"the cat out of the bag"</span><span class="RktPn">)</span></td></tr></table></blockquote><p>then it is a complete program that prints “cat” when run. You can
|
|
run the program within DrRacket or using <span class="RktSym"><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=reference&rel=interactive.html%23%2528form._%2528%2528lib._racket%252Fenter..rkt%2529._enter%2521%2529%2529&version=8.6" class="RktStxLink Sq" data-pltdoc="x">enter!</a></span> in
|
|
<span class="stt">racket</span>, but if the program is saved in <span class="sroman">‹<span style="font-style: italic">src-filename</span>›</span>,
|
|
you can also run it from a command line with</p><p><span class="hspace"> </span><span class="stt">racket </span><span class="sroman">‹<span style="font-style: italic">src-filename</span>›</span></p><p>To package the program as an executable, you have a few options:</p><ul><li><p>In DrRacket, you can select the <span class="ssansserif">Racket|Create
|
|
Executable...</span> menu item.</p></li><li><p>From a command-line prompt, run <span class="stt">raco exe</span><span class="stt">
|
|
</span><span class="sroman">‹<span style="font-style: italic">src-filename</span>›</span>, where <span class="sroman">‹<span style="font-style: italic">src-filename</span>›</span> contains
|
|
the program. See <a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=raco&rel=exe.html&version=8.6" class="Sq" data-pltdoc="x"><span class="stt">raco exe</span>: Creating Stand-Alone Executables</a> for more information.</p></li><li><p>With Unix or Mac OS, you can turn the program file into an
|
|
executable script by inserting the line</p><blockquote class="refpara"><blockquote class="refcolumn"><blockquote class="refcontent"><p>See <a href="scripts.html" data-pltdoc="x">Scripts</a> for more information on
|
|
script files.</p></blockquote></blockquote></blockquote><p><table cellspacing="0" cellpadding="0" class="SVerbatim"><tr><td><p><span class="hspace"> </span><span class="stt">#! /usr/bin/env racket</span></p></td></tr></table></p><p>at the very beginning of the file. Also, change the file
|
|
permissions to executable using <span class="stt">chmod +x</span><span class="stt">
|
|
</span><span class="sroman">‹<span style="font-style: italic">filename</span>›</span> on the command line.</p><p>The script works as long as <span class="stt">racket</span> is in the user’s
|
|
executable search path. Alternately, use a full path to
|
|
<span class="stt">racket</span> after <span class="stt">#!</span> (with a space between <span class="stt">#!</span>
|
|
and the path), in which case the user’s executable search path
|
|
does not matter.</p></li></ul><h4 x-source-module="(lib "scribblings/guide/guide.scrbl")" x-source-pkg="racket-doc" x-part-tag=""use-module"">1.4<tt> </tt><a name="(part._use-module)"></a>A Note to Readers with Lisp/Scheme Experience</h4><p>If you already know something about Scheme or Lisp, you might be
|
|
tempted to put just</p><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=reference&rel=define.html%23%2528form._%2528%2528lib._racket%252Fprivate%252Fbase..rkt%2529._define%2529%2529&version=8.6" class="RktStxLink Sq" data-pltdoc="x">define</a></span><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym">extract</span><span class="hspace"> </span><span class="RktSym">str</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace"> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=reference&rel=strings.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._substring%2529%2529&version=8.6" class="RktValLink Sq" data-pltdoc="x">substring</a></span><span class="hspace"> </span><span class="RktSym">str</span><span class="hspace"> </span><span class="RktVal">4</span><span class="hspace"> </span><span class="RktVal">7</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></blockquote><p>into <span class="stt">"extract.rktl"</span> and run <span class="stt">racket</span> with</p><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">> </span><span class="RktPn">(</span><span class="RktSym"><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=reference&rel=eval.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._load%2529%2529&version=8.6" class="RktValLink Sq" data-pltdoc="x">load</a></span><span class="hspace"> </span><span class="RktVal">"extract.rktl"</span><span class="RktPn">)</span></td></tr><tr><td><span class="stt">> </span><span class="RktPn">(</span><span class="RktSym">extract</span><span class="hspace"> </span><span class="RktVal">"the dog out"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">"dog"</span></p></td></tr></table></blockquote><p>That will work, because <span class="stt">racket</span> is willing to imitate a
|
|
traditional Lisp environment, but we strongly recommend against using
|
|
<span class="RktSym"><a href="https://download.racket-lang.org/releases/8.6/doc/local-redirect/index.html?doc=reference&rel=eval.html%23%2528def._%2528%2528quote._%7E23%7E25kernel%2529._load%2529%2529&version=8.6" class="RktValLink Sq" data-pltdoc="x">load</a></span> or writing programs outside of a module.</p><p>Writing definitions outside of a module leads to bad error messages,
|
|
bad performance, and awkward scripting to combine and run
|
|
programs. The problems are not specific to <span class="stt">racket</span>; they’re
|
|
fundamental limitations of the traditional top-level environment,
|
|
which Scheme and Lisp implementations have historically fought with ad
|
|
hoc command-line flags, compiler directives, and build tools. The
|
|
module system is designed to avoid these problems, so start with
|
|
<a href="Module_Syntax.html#%28part._hash-lang%29" class="RktModLink" data-pltdoc="x"><span class="RktMod">#lang</span></a>, and you’ll be happier with Racket in the long run.</p><div class="navsetbottom"><span class="navleft"><form class="searchform"><input class="searchbox" id="searchbox" type="text" tabindex="1" placeholder="...search manuals..." title="Enter a search string to search the manuals" onkeypress="return DoSearchKey(event, this, "8.6", "../");"/></form> <a href="https://download.racket-lang.org/releases/8.6/doc/index.html" title="up to the documentation top" data-pltdoc="x" onclick="return GotoPLTRoot("8.6");">top</a><span class="tocsettoggle"> <a href="javascript:void(0);" title="show/hide table of contents" onclick="TocsetToggle();">contents</a></span></span><span class="navright"> <a href="index.html" title="backward to "The Racket Guide"" data-pltdoc="x">← prev</a> <a href="index.html" title="up to "The Racket Guide"" data-pltdoc="x">up</a> <a href="to-scheme.html" title="forward to "2 Racket Essentials"" data-pltdoc="x">next →</a></span> </div></div></div><div id="contextindicator"> </div></body></html> |