<!--Dear translator: please NEVER translate the id or anything inside the tags as they are needed in english by the application
     Thanks a lot in advance.-->
<chapter id="reference">
<title
>Programmeren met &turtlelang;</title>
<para
>Dit is een overzicht van &kturtle;'s &turtlelang;. In dit hoofdstuk bespreken we in het kort de <link linkend="different-instructions"
>verschillende instructietypen</link
>. Daarna leggen we één voor één de <link linkend="commands"
>commando's</link
> uit. Daarna volgen de <link linkend="containers"
>plaatshouders</link
>, <link linkend="math"
>rekenen</link
>, <link linkend="questions"
>vragen</link
> en de <link linkend="controlling-execution"
>programmastuurcommando's</link
>. Tot slot laten we je zien hoe je je eigen commando's kunt maken met het commando <link linkend="learn"
>leer</link
>.</para>

<sect1 id="different-instructions">
<title
>Verschillende instructietypen</title>
<para
>Zoals elke taal heeft &turtlelang; verschillende soorten woorden en symbolen. Hier worden de verschillen tussen deze soorten kort uitgelegd.</para>

<sect2 id="command">
<title
>Commando's</title>
<para
>Met behulp van commando's vertel je de schildpad of &kturtle; om iets te doen. Sommige commando's vragen om een invoer, anderen geven een uitvoer. <screen
># vooruit is een commando dat invoer nodig heeft. In ons geval het getal 100:
vooruit 100
</screen>
</para>
<para
>Meer informatie over alle commando's die &kturtle; kent vind je <link linkend="commands"
>hier</link
>.</para>
</sect2>

<sect2 id="number">
<title
>Getallen</title>
<para
>Getallen ken je vast wel. De manier waarop getallen worden gebruikt in &kturtle; is niet veel anders dan in een spreektaal, of bij het rekenen. </para>
<para
>We hebben de zogenaamde natuurlijke getallen: <userinput
>0</userinput
>, <userinput
>1</userinput
>, <userinput
>2</userinput
>, <userinput
>3</userinput
>, <userinput
>4</userinput
>, <userinput
>5</userinput
>, enz. De negatieve getallen: <userinput
>-1</userinput
>, <userinput
>-2</userinput
>, <userinput
>-3</userinput
>, enz. En de getallen met een komma: <userinput
> 0,1</userinput
>, <userinput
> 3,14</userinput
>, <userinput
> 33,3333</userinput
>, <userinput
> -5,05</userinput
>, <userinput
>-1,0</userinput
>. </para>
<para
>Getallen kunnen worden gebruikt in <link linkend="math"
>berekeningen</link
> en in <link linkend="questions"
>vragen</link
>. Ze kunnen ook in <link linkend="containers"
>plaatshouders</link
> worden geplaatst.</para>
<para
>Getallen worden donkerrood <glossterm
>geaccentueerd</glossterm
> in de <link linkend="the-code-editor"
>codebewerker</link
>.</para>
</sect2>

<!-- constants like pi? -->

<sect2 id="string">
<title
>Tekenreeksen</title>
<para
>Eerst een voorbeeld:<screen>
schrijf "Hallo, ik ben een tekenreeks."
</screen
> In dit voorbeeld is <userinput
>schrijf</userinput
> een commando en <userinput
>"Hallo, ik ben een tekenreeks"</userinput
> een tekenreeks. Een tekenreeks begint en eindigt met het teken <userinput
>"</userinput
>. Hierdoor "weet" &kturtle; dat dit een tekenreeks is.</para>
<para
>Tekenreeksen kunnen in <link linkend="containers"
>plaatshouders</link
> worden geplaatst. Maar je kunt ze niet gebruiken in <link linkend="math"
>berekeningen</link
> en <link linkend="questions"
>vragen</link
>.</para>
<para
>Tekenreeksen worden rood <glossterm
>geaccentueerd</glossterm
> in de <link linkend="the-code-editor"
>codebewerker</link
>.</para>
</sect2>


<sect2 id="name">
<title
>Namen</title>
<para
>When using the &turtlelang; programming language you create new things. If you write a program you will often need <link linkend="containers"
>containers</link
> and in some cases you need <link linkend="learn"
>learn</link
> to create new commands. When making a new command with <link linkend="learn"
>learn</link
> you will have to specify a name.</para>
<para
>You can choose any name, as long as it does not already have a meaning. For instance you cannot name a function <link linkend="forward"
>forward</link
>, since that name is already used for an internal command. <screen>
# here forward is used as a new command, 
# but it already has a meaning so 
# this will produce an error:
learn forward {
  print "this is invalid"
}

# this works:
learn myforward {
  print "this is ok"
}
</screen
> Names can contain only letters, numbers and underscores (_). Yet they have to start with a letter. Container names have to start with the container prefix ($). <screen
># here forward is used as a container, 
# starting with the $ prefix, so it does
# not conflict with the forward command
$forward = 20
print $forward
</screen>
</para>
<para
>Plaatshouders worden <glossterm
>geaccentueerd</glossterm
> met vet paars in de <link linkend="the-code-editor"
>codebewerker</link
>.</para>
<para
>Lees ook de documentatie over <link linkend="containers"
>plaatshouders</link
> en het commando <link linkend="learn"
>leer</link
> voor een betere uitleg en meer voorbeelden. </para>
</sect2>

<sect2 id="assignment">
<title
>Toewijzingen</title>
<para
>Toewijzingen worden gedaan met het symbool <userinput
>=</userinput
>. In programmeertalen is het beter om een <userinput
>=</userinput
> niet te lezen als 'is', maar als 'wordt'. Het woordje 'is' past beter bij het teken <userinput
>==</userinput
>, dit is een <link linkend="questions"
>vraag</link
>.</para>
<para
>Toewijzingen worden meestal om twee redenen gebruikt: (1) om inhoud toe te voegen aan <link linkend="containers"
>plaatshouders</link
> en (2) om de inhoud van een plaatshouder te veranderen. Bijvoorbeeld: <screen
>$x = 10
# de plaatshouder x bevat nu het getal 10
$W = "Mijn leeftijd is: "
# de plaatshouder W bevat nu de tekenreeks "Mijn leeftijd is:"
# dit plaatst de inhoud van de plaatshouders 'W' en 'x' op het canvas
schrijf $W + $x
</screen>
</para>
<para
>Meer voorbeelden kun je vinden in het hoofdstuk waarin het begrip <link linkend="containers"
>plaatshouders</link
> wordt uitgelegd.</para>
</sect2>

<sect2 id="math-symbols">
<title
>Rekensymbolen</title>
<para
>&kturtle; supports all basic math symbols: add (<userinput
>+</userinput
>), subtract (<userinput
>-</userinput
>), multiply (<userinput
>*</userinput
>), divide (<userinput
>/</userinput
>) and the brackets <userinput
>(</userinput
> and <userinput
>)</userinput
>.</para>
<para
>Een complete uitleg en meer voorbeelden vind je in het hoofdstuk over <link linkend="math"
>rekenen</link
>.</para>
</sect2>

<sect2 id="question">
<title
>Vragen</title>
<para
>We kunnen eenvoudige vragen stellen waarop het antwoord alleen maar 'waar' of 'onwaar' zal zijn.</para>
<para
>Het gebruik van vragen wordt uitgebreid uitgelegd in het hoofdstuk over <link linkend="questions"
>vragen</link
>.</para>
</sect2>

<sect2 id="questions-glue">
<title
>Lijmwoorden voor vragen</title>
<para
>Vragen kunnen aan elkaar worden gelijmd met zogenaamde 'lijmwoorden'. De lijmwoorden zijn <userinput
>en</userinput
>, <userinput
>of</userinput
> en een speciaal lijmwoord is: <userinput
>niet</userinput
>.</para>
<para
>Het gebruiken van lijmwoorden wordt uitgelegd in het hoofdstuk <link linkend="question-glue"
>Vragenlijm</link
>.</para>
</sect2>


<sect2 id="comment">
<title
>Commentaar</title>
<para
>Commentaarregels zijn regels die beginnen met een <userinput
>#</userinput
>. Bijvoorbeeld: <screen>
# dit is commentaar!
schrijf "dit is geen commentaar"
# de vorige regel is geen commentaar, maar de volgende regel wel:
# schrijf "dit is geen commentaar"
</screen
> In commentaarregels kunnen we aantekeningen schrijven die iets vertellen over de programmacode, voor onszelf of voor iemand anders die deze code leest. Commentaar wordt gebruikt om : (1) een kleine beschrijving van het programma toe te voegen, (2) uit te leggen hoe een stukje code werkt als dit minder duidelijk is, en (3) om regels programmacode die (tijdelijk) niet gebruikt mogen worden over te slaan (zie de laatste regel in het voorbeeld).</para>
<para
>Commentaarregels worden <glossterm
>geaccentueerd</glossterm
> met lichtgrijs in de <link linkend="the-code-editor"
>codebewerker</link
>.</para>
</sect2>

</sect1>


<sect1 id="commands">
<title
>Commando's</title>
<para
>Met behulp van commando's vertel je de schildpad of &kturtle; om iets te doen. Sommige commando's vragen om een invoer, anderen geven een uitvoer. In deze sectie zullen we alle commando's die in &kturtle; kunnen worden gebruikt, aan je uitleggen. Onthoud dat alle ingebouwde commando's die we hier bespreken <glossterm
>geaccentueerd</glossterm
> worden met blauw in de <link linkend="the-code-editor"
>codebewerker</link
>. Hiermee kun je ze onderscheiden van de rest.</para>

<sect2 id="moving-the-turtle">
<title
>De schildpad voortbewegen</title>
<para
>Er zijn verschillende commando's waarmee je de schildpad over het scherm kunt bewegen.</para>

  <variablelist>
    <anchor id="forward"/>
    <varlistentry
> 
      <term
>forward (fw)<indexterm
><primary
>forward (fw)</primary
></indexterm
></term>
      <listitem
><para
><screen
>vooruit X</screen>
<userinput
>vooruit</userinput
> verplaatst de schildpad X pixels vooruit. Als de pen neer is zal de schildpad een spoor achterlaten. <userinput
>vooruit</userinput
> kun je afkorten met <userinput
>vt</userinput
></para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="backward"/>
    <varlistentry
>  
      <term
>backward (bw)<indexterm
><primary
>backward (bw)</primary
></indexterm
></term>
      <listitem
><para
><screen
>achteruit X</screen>
<userinput
>achteruit</userinput
> verplaatst de schildpad X pixels achteruit. Als de pen neer is zal de schildpad een spoor achterlaten. <userinput
>achteruit</userinput
> kun je afkorten met <userinput
>at</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="turnleft"/>
    <varlistentry
> 
      <term
>turnleft (tl)<indexterm
><primary
>turnleft (tl)</primary
></indexterm
></term>
      <listitem
><para
><screen
>draailinks X</screen>
<userinput
>draailinks</userinput
> laat de schildpad X graden naar links draaien. <userinput
>draailinks</userinput
> kun je afkorten met <userinput
>dl</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="turnright"/>
    <varlistentry
> 
      <term
>turnright (tr)<indexterm
><primary
>turnright (tr)</primary
></indexterm
></term>
      <listitem
><para
><screen
>draairechts X</screen>
<userinput
>turnright</userinput
> the turtle to turn an amount of X degrees to the right. <userinput
>turnright</userinput
> can be abbreviated to <userinput
>tr</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="direction"/>
    <varlistentry
> 
      <term
>direction (dir)<indexterm
><primary
>direction (dir)</primary
></indexterm
></term>
      <listitem
><para
><screen
>richting X</screen>
<userinput
>richting</userinput
> zet de richting van de schildpad op X graden, geteld vanaf 0. Dus niet vanuit de vorige positie van de schildpad. <userinput
>richting</userinput
> kun je afkorten met <userinput
>rt</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="center"/>
    <varlistentry
> 
      <term
>thuis<indexterm
><primary
>center</primary
></indexterm
></term>
      <listitem
><para
><screen
>thuis</screen>
<userinput
>thuis</userinput
> zet de schildpad in het midden van het canvas.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="go"/>
    <varlistentry
> 
      <term
>ganaar<indexterm
><primary
>go</primary
></indexterm
></term>
      <listitem
><para
><screen
>ganaar X,Y</screen>
<userinput
>go</userinput
> commands the turtle to go to a certain place on the canvas. This place is X <glossterm linkend="pixels"
>pixels</glossterm
> from the left of the canvas, and Y <glossterm linkend="pixels"
>pixels</glossterm
> form the top of the canvas. </para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="gox"/>
    <varlistentry
> 
      <term
>ganaarx<indexterm
><primary
>gox</primary
></indexterm
></term>
      <listitem
><para
><screen
>ganaarx X</screen>
<userinput
>ganaarx X</userinput
> laat de schildpad naar een positie gaan die X <glossterm linkend="pixels"
>pixels</glossterm
> vanaf de linkerkant van het canvas ligt. De hoogte blijft hetzelfde. <userinput
>ganaarx</userinput
> kun je afkorten met <userinput
>gx</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="goy"/>
    <varlistentry
> 
      <term
>ganaary<indexterm
><primary
>goy</primary
></indexterm
></term>
      <listitem
><para
><screen
>ganaary Y</screen>
<userinput
>ganaary</userinput
> laat de schildpad naar een positie gaan die Y <glossterm linkend="pixels"
>pixels</glossterm
> vanaf de bovenkant van het canvas ligt. De afstand vanaf de linkerkant van het canvas blijft hetzelfde. <userinput
>ganaary</userinput
> kun je afkorten met <userinput
>gy</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <note
><para
>Using the commands <userinput
>go</userinput
>, <userinput
>gox</userinput
>, <userinput
>goy</userinput
> and <userinput
>center</userinput
> the turtle will not draw a line, no matter if the pen is up or down.</para>
  </note>
</sect2>

<sect2 id="locate-the-turtle">
<title
>Where is the turtle?</title>
<para
>There are two commands which return the position of the turtle on the screen.</para>

  <variablelist>
    <anchor id="getx"/>
    <varlistentry
> 
      <term
>getx<indexterm
><primary
>getx</primary
></indexterm
></term>
      <listitem
><para
><userinput
>getx</userinput
> returns the number of pixels from the left of the canvas to the current position of the turtle.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="gety"/>
    <varlistentry
> 
      <term
>gety<indexterm
><primary
>gety</primary
></indexterm
></term>
      <listitem
><para
><userinput
>gety</userinput
> returns the number of pixels from the top of the canvas to the current position of the turtle.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="pen">
<title
>De schildpad heeft een pen</title>
<para
>De schildpad heeft een pen die een lijn tekent als de schildpad beweegt. Er zijn een aantal commando's die de pen bedienen. In deze sectie leggen we deze commando's uit.</para>
  <variablelist>
    <anchor id="penup"/>
    <varlistentry
> 
      <term
>penup (pu)<indexterm
><primary
>penup (pu)</primary
></indexterm
></term>
      <listitem
><para
><screen
>penup</screen>
<userinput
>penop</userinput
> tilt de pen van het canvas. Als de pen <quote
>omhoog</quote
> is, dan wordt er geen lijn getekend als de schildpad beweegt. Kijk ook bij <userinput
>penneer</userinput
>. <userinput
>penop</userinput
> kun je afkorten met <userinput
>po</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="pendown"/>
    <varlistentry
> 
      <term
>pendown (pd)<indexterm
><primary
>pendown (pd)</primary
></indexterm
></term>
      <listitem
><para
><screen
>pendown</screen>
<userinput
>penneer</userinput
> zet de pen op het canvas. Als de pen op het canvas <quote
>drukt</quote
>, dan wordt er een lijn getekend als de schildpad beweegt. Zie ook <userinput
>penop</userinput
>. <userinput
>penneer</userinput
> kun je afkorten met <userinput
>pn</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="setpenwidth"/>
    <varlistentry
> 
      <term
>penwidth (pw)<indexterm
><primary
>penwidth (pw)</primary
></indexterm
></term>
      <listitem
><para
><screen
>pendikte X</screen>
<userinput
>pendikte</userinput
> X stelt de dikte van de pen (de breedte van de lijn) op X <glossterm linkend="pixels"
>pixels</glossterm
>. <userinput
>pendikte</userinput
> kun je afkorten met <userinput
>pd</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="setfgcolor"/>
    <varlistentry
> 
      <term
>pencolor (pc)<indexterm
><primary
>pencolor (pc)</primary
></indexterm
></term>
      <listitem
><para
><screen
>penkleur R,G,B</screen>
<userinput
>penkleur</userinput
> bepaalt de kleur van de pen. <userinput
>penkleur</userinput
> vraagt om een <glossterm linkend="rgb"
>RGB-combinatie (drie getallen tussen 0 en 256) </glossterm
> als invoer. <userinput
>penkleur</userinput
> kun je afkorten met <userinput
>pk</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="canvas">
<title
>Commands to control the canvas</title>
<para
>There are several commands to control the canvas.</para>
  <variablelist>
    <anchor id="resizecanvas"/>
    <varlistentry>
      <term
>canvassize (cs)<indexterm
><primary
>canvassize (cs)</primary
></indexterm
></term>
      <listitem
><para
><screen
>canvassize X,Y</screen>
With the <userinput
>canvassize</userinput
> command you can set the size of the canvas. It takes X and Y as input, where X is the new canvas width in <glossterm linkend="pixels"
>pixels</glossterm
>, and Y is the new height of the canvas in <glossterm linkend="pixels"
>pixels</glossterm
>. <userinput
>canvassize</userinput
> can be abbreviated to <userinput
>cs</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="setbgcolor"/>
    <varlistentry
> 
      <term
>canvascolor (cc)<indexterm
><primary
>canvascolor (cc)</primary
></indexterm
></term>
      <listitem
><para
><screen
>canvascolor R,G,B</screen>
<userinput
>canvascolor</userinput
> set the color of the canvas. <userinput
>canvascolor</userinput
> takes an <glossterm linkend="rgb"
>RGB combination</glossterm
> as input. <userinput
>canvascolor</userinput
> can be abbreviated to <userinput
>cc</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
<!-- <sect3 id="wrapon">
  <title
>wrapon</title>
  <variablelist>
    <varlistentry
> 
      <term
>wrapon</term>
      <listitem
><para
><screen
>wrapon</screen>
      With the <userinput
>wrapon</userinput
> command you can set <glossterm linkend="wrapping"
>wrapping</glossterm
> <quote
>on</quote
> for the canvas. Please see the glossary if you want to know what <glossterm linkend="wrapping"
>wrapping</glossterm
> is.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
<sect3 id="wrapoff">
  <title
>wrapoff</title>
  <variablelist>
    <varlistentry
> 
      <term
>wrapoff</term>
      <listitem
><para
><screen
>wrapoff</screen>
      With the <userinput
>wrapoff</userinput
> command you can set <glossterm linkend="wrapping"
>wrapping</glossterm
> <quote
>off</quote
> for the canvas: this means the turtle can move off the canvas and can get <quote
>lost</quote
>. Please see the glossary if you want to know what <glossterm linkend="wrapping"
>wrapping</glossterm
> is.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3
>  -->
</sect2>

<sect2 id="clean">
<title
>Commando's om schoon te maken</title>
<para
>Er zijn twee commando's waarmee je het canvas kunt schoonmaken nadat je er een bende van hebt gemaakt.</para>
  <variablelist>
    <anchor id="clear"/>
    <varlistentry
> 
      <term
>clear (ccl)<indexterm
><primary
>clear (ccl)</primary
></indexterm
></term>
      <listitem
><para
><screen
>clear</screen>
Met <userinput
>schoon</userinput
> kun je alle tekeningen op het canvas wissen. De rest blijft staan, de positie en de hoek van de schildpad, de kleur van het canvas, de zichtbaarheid van de schildpad en de grootte van het canvas blijven zoals ze waren.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="reset"/>
    <varlistentry
> 
      <term
>alsnieuw<indexterm
><primary
>reset</primary
></indexterm
></term>
      <listitem
><para
><screen
>alsnieuw</screen>
<userinput
>reset</userinput
> cleans much more thoroughly than the <userinput
>clear</userinput
> command. After a <userinput
>reset</userinput
> command everything is like is was when you had just started &kturtle;. The turtle is positioned at the middle of the screen, the canvas color is white, the turtle draws a black line on the canvas and the canvassize is set to 400 x 400 pixels.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="sprites">
<title
>De schildpad is een sprite  (zeg maar: sprait)</title>
<para
>Eerst volgt hier een korte uitleg van wat sprites zijn: sprites zijn kleine plaatjes die je kunt rondbewegen op het scherm, zoals je vaak in computerspelletjes ziet. Onze schildpad is zo'n sprite. Voor meer info, zie de woordenlijst bij <glossterm
>linkend="sprites"
>sprites</glossterm
>. </para
> <para
>Noot vertaler: eigenlijk zijn sprites zoiets als geesten, feeën of kabouters. </para>
<para
>Hierna volgt een volledig overzicht van alle commando's die je kunt gebruiken bij sprites.</para>
<para
>[De huidige versie van &kturtle; heeft alleen een schildpad als sprite. Andere sprites zijn er dus niet. In toekomstige versies van het programma zul je de schildpad kunnen veranderen in je eigen ontwerp]</para>
  <variablelist>
    <anchor id="spriteshow"/>
    <varlistentry
> 
      <term
>spriteshow (ss)<indexterm
><primary
>spriteshow (ss)</primary
></indexterm
></term>
      <listitem
><para
><screen
>spriteshow</screen>
<userinput
>spriteshow</userinput
> makes the turtle visible again after it has been hidden. <userinput
>spriteshow</userinput
> can be abbreviated to <userinput
>ss</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="spritehide"/>
    <varlistentry
> 
      <term
>spritehide (sh)<indexterm
><primary
>spritehide (sh)</primary
></indexterm
></term>
      <listitem
><para
><screen
>spritehide</screen>
<userinput
>spritehide</userinput
> hides the turtle. This can be used if the turtle does not fit in your drawing. <userinput
>spritehide</userinput
> can be abbreviated to <userinput
>sh</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="writing">
<title
>Can the turtle write?</title>
<para
>Het antwoord is: <quote
>ja</quote
>. De schildpad kan schrijven. Hij schrijft zo'n beetje alles wat je hem opdraagt.</para>
  <variablelist>
    <anchor id="print"/>
    <varlistentry
> 
      <term
>schrijf<indexterm
><primary
>print</primary
></indexterm
></term>
      <listitem
><para
><screen
>schrijf X</screen>
Het commando <userinput
>schrijf</userinput
> kun je gebruiken om de schildpad iets op het canvas te laten schrijven. <userinput
>schrijf</userinput
> vraagt om letters en/of cijfers als invoer. Je kunt verschillende getallen en stukken tekst <userinput
>laten schrijven</userinput
> met behulp van het <quote
>+</quote
>-symbool. Hier is een klein voorbeeld: <screen
>$jaar = 2003
$auteur = "Cies"
schrijf $auteur + " begon het KTurtle-project in " + $jaar + " en vindt het nog steeds leuk om er aan te werken!"
</screen>
      </para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="fontsize"/>
    <varlistentry
> 
      <term
>lettermaat<indexterm
><primary
>fontsize</primary
></indexterm
></term>
      <listitem
><para
><screen
>lettermaat X</screen>
<userinput
>lettermaat</userinput
> bepaalt de grootte van de letters die wordt gebruikt door het commando <userinput
>schrijf</userinput
>. <userinput
>lettermaat</userinput
> vraagt om een getal als invoer. De grootte geef je op in <glossterm linkend="pixels"
>pixels</glossterm
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="random">
<title
>Een commando dat een dobbelsteen voor je gooit</title>
<para
>Er is een commando dat dobbelstenen voor je gooit. Dit commando heet <userinput
>gok</userinput
>, en is erg handig als je wat onverwachte resultaten wilt hebben.</para>
  <variablelist>
    <varlistentry
> 
      <term
>random (rnd)<indexterm
><primary
>random (rnd)</primary
></indexterm
></term>
      <listitem
><para
><screen
>gok X,Y</screen>
<userinput
>random</userinput
> is a command that takes input and gives output. As input are required two numbers, the first (X) sets the minimum output, the second (Y) sets the maximum. The output is a randomly chosen number that is equal or greater than the minimum and equal or smaller than the maximum. Here a small example: <screen>
repeat 500 {
  $x = random 1,20
  forward $x
  turnleft 10 - $x
}
</screen
> Using the <userinput
>random</userinput
> command you can add a bit of chaos to your program.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="dialogs">
<title
>Invoer en terugkoppeling met behulp van dialogen</title>
<para
>A dialog is a small pop-up window that provides some feedback or asks for some input. &kturtle; has two commands for dialogs, namely: <userinput
>message</userinput
> and <userinput
>ask</userinput
></para>
  <variablelist>
    <anchor id="message"/>
    <varlistentry
> 
      <term
>bericht<indexterm
><primary
>message</primary
></indexterm
></term>
      <listitem
><para
><screen
>bericht X</screen>
De opdracht <userinput
>bericht</userinput
> heeft als invoer een <link linkend="string"
>tekenreeks</link
>. Er wordt een venstertje getoond waarin een dialoog met de tekst van deze <link linkend="string"
>tekenreeks</link
>. <screen
>bericht "Cies begon het KTurtle-project in 2003 en vindt het nog steeds leuk om er aan te werken!"
</screen>
      </para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="ask"/>
    <varlistentry
> 
      <term
>vraag<indexterm
><primary
>ask</primary
></indexterm
></term>
      <listitem
><para
><screen
>vraag X</screen>
<userinput
>vraag</userinput
> heeft als invoer een <link linkend="string"
>tekenreeks</link
>. Er wordt een venstertje getoond met de tekst van deze tekenreeks, net als bij het commando <link linkend="message"
>bericht</link
>. Maar in deze dialoog is ook een invoerveld. In dit invoerveld kan een gebruiker een <link linkend="number"
>getal</link
> of een <link linkend="string"
>tekenreeks</link
> invoeren die in een <link linkend="containers"
>plaatshouder</link
> kan worden opgeslagen. Bijvoorbeeld <screen>
$in = vraag "Hoe oud ben je?"
$uit = 5 + $in
schrijf "Over 5 jaar ben je " + $uit + " jaar."
</screen
>. Als de gebruiker de invoerdialoog annuleert of er niets in invult wordt de <link linkend="containers"
>plaatshouder</link
> leeg gemaakt.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

</sect1>



<sect1 id="containers">
<title
>Plaatshouders</title>
<para
>Plaatshouders zijn letters of woorden die door de programmeur kunnen worden gebruikt om daarin een getal of tekst op te slaan. Plaatshouders die een getal bevatten heten <link linkend="variables"
>variabelen</link
>, plaatshouders die tekst bevatten heten <link linkend="strings"
>tekenreeksen</link
>. Plaatshouders kun je herkennen aan het <quote
>$</quote
>-teken dat ervoor wordt geplaatst.</para>

<para
>Containers that are not used contain nothing. An example: <screen>
print $N
</screen
> This will print nothing and you get an error message. </para>

<sect2 id="variables">
<title
>Variabelen: plaatshouders voor getallen</title>
<para
>Laten we beginnen met een voorbeeld: <screen>
$x = 3
schrijf $x
</screen
> Op de eerste regel wordt de letter <userinput
>x</userinput
> omgevormd tot een variabele (plaatshouder van een getal). Zoals je ziet wordt de waarde van de variabele <userinput
>x</userinput
> op 3 gesteld. Op de tweede regel wordt de waarde geschreven.</para>
<para
>Merk op dat als we een <quote
>x</quote
> hadden willen schrijven, we het volgende zouden hebben geschreven <screen
>schrijf "x"
</screen>
</para>
<para
>Dat was gemakkelijk. Nu een wat moeilijker voorbeeld:<screen>
$A = 2004
$B = 25
$C = $A + $B

# het volgende commando schrijft "2029"
schrijf $C
achteruit 30
# het volgende commando schrijft "2004 plus 25"
schrijf $A + " plus " + $B
achteruit 30
# het volgende commando schrijft "1979"
schrijf $A - $B
</screen
> Op de eerste twee regels krijgen de variabelen <userinput
>A</userinput
> en <userinput
>B</userinput
> de waarden 2004 en 25 toegekend. Op de derde regel krijgt de variabele <userinput
>C</userinput
> de waarde <userinput
>A + B</userinput
>, en dat is 2029. De rest van het voorbeeld bestaat uit 3 <userinput
>schrijf</userinput
>-commando's met <userinput
>achteruit 30</userinput
> ertussen in. De <userinput
>achteruit 30</userinput
> staat er om er voor te zorgen dat elke uitvoer op een nieuwe regel komt. In dit voorbeeld zie je ook dat variabelen kunnen worden gebruikt om ermee te <link linkend="math"
>rekenen</link
>.</para>
</sect2>

<sect2 id="strings">
<title
>Plaatshouders die tekst bevatten (tekenreeksen)</title>
<para
>In programmacode begint en eindigt gewone tekst vaak met aanhalingstekens. Zoals we eerder al hebben gezien: <screen>
schrijf "Hallo programmeur!"
</screen
> De gewone tekst staat tussen aanhalingstekens. Dit soort stukjes tekst noemen we <link linkend="strings"
>tekenreeksen</link
>.</para>
<para
>Strings can also be stored in <link linkend="containers"
>containers</link
> just like <link linkend="number"
>numbers</link
> Strings are a lot like variables. The biggest difference is that they contain text in stead of numbers. For this reason strings cannot be used in <link linkend="math"
>mathematical calculations</link
> and <link linkend="questions"
>questions</link
>. An example of the use of strings: <screen>
$x = "Hello "
$name = ask "Please enter your name..."
print $x + $name + ", how are you?"
</screen
> On the first line the string <userinput
>x</userinput
> is set to <quote
>Hello </quote
>. On the second line the string <userinput
>name</userinput
> is set to the output of the <userinput
>ask</userinput
> command. On the third line the program prints a composition of three strings on the canvas.</para>
<para
>Dit programma vraagt je je naam in te voeren. Als je bijvoorbeeld de naam <quote
>Paul</quote
> invoert, dan schrijft het programma <quote
>Hallo Paul, hoe gaat het met je?</quote
>. Houd er rekening mee dat de plus (+) het enige rekenkundige teken is dat je kunt gebruiken met tekenreeksen. Hierdoor worden tekenreeksen als het ware aan elkaar geplakt.</para>
</sect2>
</sect1>

<sect1 id="math">
<title
>Kan de schildpad rekenen?</title>
<para
>Yes, &kturtle; will do your math. You can add (+), subtract (-), multiply (*), and divide (/). Here is an example in which we use all of them: <screen>
$a = 20 - 5
$b = 15 * 2
$c = 30 / 30
$d = 1 + 1
print "a: "+$a+", b: "+$b+", c: "+$c+", d: "+$d 
</screen
> Do you know what value a, b, c and d have? Please note the use of the <link linkend="assignment"
>assignment</link
> symbol <userinput
>=</userinput
>.</para>
<para
>Als je een eenvoudige rekensom wilt laten doen, dan kan dat bijvoorbeeld zo: <screen
>schrijf 2004-12
</screen
></para>
<para
>Nu een voorbeeld met haakjes: <screen>
schrijf ( ( 20 - 5 ) * 2 / 30 ) + 1
</screen
> Het gedeelte tussen de binnenste haakjes zal als eerste worden uitgerekend. In dit voorbeeld wordt 20 - 5 berekend, dan wordt de uitkomst vermenigvuldigd met 2, en daarna wordt er gedeeld door 30. Tot slot wordt er 1 bij opgeteld (het antwoord is 2).</para>
<para
>&kturtle; has advanced mathematical features. It knows the number <userinput
>pi</userinput
> and trigonometrical functions like <userinput
>sin</userinput
>, <userinput
>cos</userinput
>, <userinput
>tan</userinput
>, <userinput
>arcsin</userinput
>, <userinput
>arccos</userinput
>, <userinput
>arctan</userinput
> and the functions <userinput
>sqrt</userinput
> and <userinput
>exp</userinput
>. <indexterm
><primary
>pi</primary
></indexterm>
<indexterm
><primary
>sin, cos, tan</primary
></indexterm>
<indexterm
><primary
>arcsin, arccos, arctan</primary
></indexterm>
<indexterm
><primary
>sqrt, exp</primary
></indexterm>
</para>

<sect2 id="round">
<title
>Let the turtle round your numbers</title>
<para
>If you need integers in calculations, use this function.</para>
  <variablelist>
    <varlistentry>
      <term
>round<indexterm
><primary
>round</primary
></indexterm
></term>
      <listitem
><para
><screen
>round(x)</screen>
<userinput
>round</userinput
> the given number to the nearest integer. <screen>
print round(10.8)
forward 20
print round(10.3)
forward 20
</screen
> With this code the turtle will print the numbers 11 and 10.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>
</sect1>

<sect1 id="questions">
<title
>Stel vragen en krijg antwoorden...</title>
<para
><link linkend="if"
><userinput
>als</userinput
></link
> en <link linkend="while"
><userinput
>terwijl</userinput
></link
> zijn <link linkend="controlling-execution"
>programmastuurcommando's</link
> die we in de volgende sectie zullen bespreken. In deze sectie gaan we het commando <link linkend="if"
><userinput
>als</userinput
></link
> gebruiken om vragen uit te leggen.</para>
<sect2 id="q">
<title
>Vragen</title>
<para
>Een voorbeeld van een vraag: <screen>
$x = 6
als $x &gt; 5 {
 schrijf "hallo"
}
</screen
> In dit voorbeeld is de vraag het gedeelte <userinput
>x &gt; 5</userinput
>. Als het antwoord op deze vraag 'waar' is, dan wordt de programmacode tussen de accolades uitgevoerd. Vragen zijn een belangrijk onderdeel van het programmeren en worden vaak gebruikt in combinatie met <link linkend="controlling-execution"
>programmastuurcommando's</link
>, zoals <link linkend="if"
><userinput
>als</userinput
></link
>. Alle getallen en <link linkend="variables"
>variabelen</link
> (getalplaatshouders) kunnen met elkaar worden vergeleken met behulp van vragen.</para>
<para
>Hier zijn alle mogelijke vragen: <table>
<title
>Soorten van vragen</title>
<tgroup cols="3">
<tbody>
<row>
<entry
><userinput
>a == b</userinput
></entry>
<entry
>gelijk aan</entry>
<entry
>het antwoord is <quote
>waar</quote
> als <userinput
>a</userinput
> gelijk is aan <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a != b</userinput
></entry>
<entry
>ongelijk aan</entry>
<entry
>het antwoord is <quote
>waar</quote
> als <userinput
>a</userinput
> niet gelijk is aan <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a &gt; b</userinput
></entry>
<entry
>groter dan</entry>
<entry
>het antwoord is <quote
>waar</quote
> als <userinput
>a</userinput
> groter is dan <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a &lt; b</userinput
></entry>
<entry
>kleiner dan</entry>
<entry
>het antwoord is <quote
>waar</quote
> als <userinput
>a</userinput
> kleiner is dan <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a &gt;= b</userinput
></entry>
<entry
>groter dan of gelijk aan</entry>
<entry
>het antwoord is <quote
>waar</quote
> als <userinput
>a</userinput
> groter is dan of gelijk aan <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a &lt;= b</userinput
></entry>
<entry
>kleiner dan of gelijk aan</entry>
<entry
>het antwoord is <quote
>waar</quote
> als <userinput
>a</userinput
> kleiner is dan of gelijk aan <userinput
>b</userinput
></entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</sect2>

<sect2 id="question-glue">
<title
>Vragenlijm</title>
<para
>Question glue-words enable us to glue questions into one big question. <screen>
$a = 1
$b = 5
if ($a &lt; $b) and ($b == 5) {
  print "hello"
}
</screen
> In this example the glue-word <userinput
>and</userinput
> is used to glue 2 questions (<userinput
>a &lt; 5</userinput
>, <userinput
>b == 5</userinput
>) together. If one side of the <userinput
>and</userinput
> would answer <quote
>false</quote
> the whole question would answer <quote
>false</quote
>, because with the glue-word <userinput
>and</userinput
> both sides need to be <quote
>true</quote
> in order to answer <quote
>true</quote
>. Please do not forget to use the brackets around the questions!</para>

<para
>Hier is een schematisch overzicht, een meer gedetailleerde uitleg volgt hieronder: <table>
<title
>Lijmwoorden voor vragen</title>
<tgroup cols="2">
<tbody>
<row>
<entry
><userinput
>en</userinput
></entry>
<entry
>beide zijden moeten 'waar' zijn voor het antwoord 'waar'</entry>
</row>
<row>
<entry
><userinput
>of</userinput
></entry>
<entry
>als een van de, of beide, zijden 'waar' is, dan is het antwoord 'waar'</entry>
</row>
<row>
<entry
><userinput
>niet</userinput
></entry>
<entry
>Een speciaal geval: werkt alleen op één vraag! Verandert 'waar' in 'onwaar' en 'onwaar' in 'waar'.</entry>
</row>
</tbody>
</tgroup>
</table>
</para>

<sect3 id="and">
<title
>en</title>
<indexterm
><primary
>and</primary
></indexterm>
<para
>Als twee vragen aan elkaar zijn gelijmd met <userinput
>en</userinput
>, dan moeten beide zijden van de <userinput
>en</userinput
> 'waar' zijn om 'waar' als resultaat te krijgen. Een voorbeeld: <screen>
$a = 1
$b = 5
als (($a &lt; 10) en ($b == 5)) en ($a &lt; $b) {
 schrijf "hallo"
}
</screen
> In dit voorbeeld zie je een gelijmde vraag vastgelijmd aan nog een andere vraag.</para>
</sect3>

<sect3 id="or">
<title
>of</title>
<indexterm
><primary
>or</primary
></indexterm>
<para
>Als één van de, of beide, vragen die aan elkaar zijn geplakt met <userinput
>of</userinput
> 'waar' is, dan is het antwoord 'waar'. Een voorbeeld: <screen>
$a = 1
$b = 5
als (($a &lt; 10) of ($b == 10)) of ($a == 0) {
 schrijf "hallo"
}
</screen
> In dit voorbeeld zie je een gelijmde vraag vastgelijmd aan nog een andere vraag.</para>
</sect3>

<sect3 id="not">
<title
>niet</title>
<indexterm
><primary
>not</primary
></indexterm>
<para
><userinput
>niet</userinput
> is een speciaal lijmwoord omdat het alleen met één vraag tegelijk werkt. <userinput
>niet</userinput
> verandert 'waar' in 'onwaar' en 'onwaar' in 'waar'. Voorbeeld: <screen>
$a = 1
$b = 5
 als niet (($a &lt; 10) en ($b == 5)) {
 schrijf "hallo"
}
anders
{
 schrijf "niet hallo ;-)"
}
</screen
> In dit voorbeeld is de gelijmde vraag 'waar', maar de <userinput
>niet</userinput
> verandert dit in 'onwaar<userinput
>. Dus uiteindelijk wordt </userinput
>"niet hallo ;-)" afgedrukt op het <link linkend="the-canvas"
>canvas</link
>.</para>
</sect3>

</sect2>

</sect1>

<sect1 id="controlling-execution">
<title
>Sturen van het programma</title>
<para
>De programmastuurcommando's maken het mogelijk, &mdash;zoals de naam al zegt&mdash; het verloop van een programma te sturen.</para>
<para
>Execution controlling commands are <glossterm
>highlighted</glossterm
> with dark green in a bold font type. The brackets are mostly used together with execution controllers and they are <glossterm
>highlighted</glossterm
> with bolded black.</para>

<sect2 id="wait">
<title
>De schildpad laten wachten</title>
<para
>Als je al wat hebt geprogrammeerd in &kturtle;, dan heb je vast gemerkt dat de schildpad erg snel is met tekenen. Dit commando laat de schildpad steeds een opgegeven tijdsduur te wachten.</para>
  <variablelist>
    <varlistentry>
      <term
>wait<indexterm
><primary
>wait</primary
></indexterm
></term>
      <listitem
><para
><screen
>wacht X</screen>
<userinput
>wacht</userinput
> X laat de schildpad steeds X seconden wachten. <screen>
herhaal 36{
 vooruit 5
 draairechts 10
 wacht 0,5
}
</screen
> Deze programmacode tekent een cirkel, maar de schildpad zal na elke stap een halve seconde wachten. Hier door lijkt het net of de schildpad kruipt.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="if">
<title
>Doe "als"</title>
  <variablelist>
    <varlistentry>
      <term
>als<indexterm
><primary
>if</primary
></indexterm
></term>
      <listitem
><para
><screen
>als <link linkend="questions"
>vraag</link
> { ... }</screen>
De programmacode die tussen de accolades staat wordt alleen uitgevoerd <userinput
>als</userinput
> het antwoord op de <link linkend="questions"
>vraag</link
> <quote
>waar</quote
> is. Lees voor meer informatie over <link linkend="questions"
>vragen</link
> het <link linkend="questions"
>gedeelte over vragen</link
>. <screen>
$x = 6
als $x &gt; 5 {
 schrijf "x is groter dan vijf!"
}
</screen
> Op de eerste regel krijgt <userinput
>x</userinput
> de waarde 6. Op de tweede regel wordt de <link linkend="questions"
>vraag</link
> <userinput
>x &gt; 5</userinput
> gesteld. Omdat het antwoord op deze vraag <quote
>waar</quote
> is zal door het programmastuurcommando <userinput
>als</userinput
> de programmacodecode tussen de haakjes worden uitgevoerd</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="else">
<title
>Als niet, of in andere woorden: "anders"</title>
  <variablelist>
    <varlistentry>
      <term
>else<indexterm
><primary
>else</primary
></indexterm
></term>
      <listitem
><para
><screen
>als vraag { ... } anders { ... }</screen>
<userinput
>anders</userinput
> kan worden gebruikt als aanvulling op het programmastuurcommando <link linkend="if"
><userinput
>als</userinput
></link
>. De programmacode tussen de accolades na <userinput
>anders</userinput
> wordt alleen uitgevoerd als het antwoord op de gestelde <link linkend="questions"
>vraag</link
> 'onwaar' is. <screen>
alsnieuw$x = 4
als $x &gt; 5 {
  schrijf "x is groter dan vijf!"
}
anders
{
  schrijf "x is kleiner dan zes!"
}
</screen
> Met de <link linkend="questions"
>vraag</link
> wordt gevraagd of <userinput
>x</userinput
> groter is dan 5. Omdat <userinput
>x</userinput
> op op de eerste regel de waarde 4 krijgt is het antwoord <quote
>onwaar</quote
>. Dit betekent dat de code tussen de accolades achter <userinput
>anders</userinput
> zal worden uitgevoerd.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="while">
<title
>De lus "terwijl"</title>
  <variablelist>
    <varlistentry>
      <term
>while<indexterm
><primary
>while</primary
></indexterm
></term>
      <listitem
><para
><screen
>terwijl <link linkend="questions"
>vraag</link
> { ... }</screen>
The execution controller <userinput
>while</userinput
> is a lot like <link linkend="if"
><userinput
>if</userinput
></link
>. The difference is that <userinput
>while</userinput
> keeps repeating (looping) the code between the brackets until the answer to the <link linkend="questions"
>question</link
> is <quote
>false</quote
>. <screen>
$x = 1
while $x &lt; 5 {
  forward 10
  wait 1
  $x = $x + 1
}
</screen
> On the first line <userinput
>x</userinput
> is set to 1. On the second line the <link linkend="questions"
>question</link
> <userinput
>x &lt; 5</userinput
> is asked. Since the answer to this question is <quote
>true</quote
> the execution controller <userinput
>while</userinput
> starts executing the code between the brackets until the answer to the <link linkend="questions"
>question</link
> is <quote
>false</quote
>. In this case the code between the brackets will be executed 4 times, because every time the fifth line is executed <userinput
>x</userinput
> increases by 1.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="repeat">
<title
>The "repeat" loop</title>
  <variablelist>
    <varlistentry>
      <term
>repeat<indexterm
><primary
>repeat</primary
></indexterm
></term>
      <listitem
><para
><screen
>repeat number { ... }</screen>
The execution controller <userinput
>repeat</userinput
> is a lot like <link linkend="while"
><userinput
>while</userinput
></link
>. The difference is that <userinput
>repeat</userinput
> keeps repeating (looping) the code between the brackets for the given number.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="for">
<title
>De lus "voor", een tellende lus</title>
  <variablelist>
    <varlistentry>
      <term
>voor<indexterm
><primary
>for</primary
></indexterm
><indexterm
><primary
>step</primary
></indexterm
></term>
      <listitem
><para
><screen
>for <userinput
>start point</userinput
> to <userinput
>end point</userinput
> { ... }</screen>
De lus <userinput
>voor</userinput
> is een <quote
>tellende lus</quote
>, dus die houdt de telling voor je bij. <screen>
voor $x = 1 tot 10 {
 schrijf $x * 7
 vooruit 15
}
</screen
> Telkens als de programmacode tussen de accolades wordt uitgevoerd wordt de waarde <userinput
>x</userinput
> met 1 vermeerderd (dit gaat dus van zelf), totdat <userinput
>x</userinput
> de waarde 10 heeft bereikt. De code tussen de accolades schrijft de waarde van <userinput
>x</userinput
> vermenigvuldigd met 7. Nadat deze commando's zijn uitgevoerd zie je de tafel van 7 op het canvas staan. </para>
     <para
>The default step size of a loop is 1, you can use an other value with <screen
>for <userinput
>start point</userinput
> to <userinput
>end point</userinput
> step <userinput
>step size</userinput
> { ... }</screen
></para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="break">
<title
>Leave a loop</title>
  <variablelist>
    <varlistentry>
      <term
>break<indexterm
><primary
>break</primary
></indexterm
></term>
      <listitem
><para
><screen
>break</screen>
Terminates the current loop immediately and transfers control to the statement immediately following that loop</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="exit">
<title
>Stop the turtle</title>
  <variablelist>
    <varlistentry>
      <term
>exit<indexterm
><primary
>exit</primary
></indexterm
></term>
      <listitem
><para
><screen
>exit</screen>
Finishes the execution of the code.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>
</sect1>


<sect1 id="learn">
<title
>Maak je eigen commando's met <quote
>leer</quote
></title>
<para
><userinput
>learn</userinput
><indexterm
><primary
>learn</primary
></indexterm
> is a very special command, because it is used to create your own commands. The command you create can take <glossterm linkend="input-output"
>input</glossterm
> and return <glossterm linkend="input-output"
>output</glossterm
>. Let us take a look at how a new command is created: <screen>
learn circle $x {
  repeat 36 {
    forward $x
    turnleft 10
  }
}
</screen
> The new command is called <userinput
>circle</userinput
>. <userinput
>circle</userinput
> takes one <glossterm linkend="input-output"
>input</glossterm
>, a number, to set the size of the circle. <userinput
>circle</userinput
> returns no <glossterm linkend="input-output"
>output</glossterm
>. The <userinput
>circle</userinput
> command can now be used like a normal command in the rest of the code. See this example: <screen
>learn circle $X {
  repeat 36 {
    forward $X 
    turnleft 10 
  }
}

go 200,200 
circle 20

go 300,200 
circle 40  
</screen>
</para>
<para
>In the next example, a command with a return value is created. <screen>
reset

learn multiplyBySelf $n {
  $r = $n * $n
  return $r
}
$i = ask "Please enter a number and press OK"
print $i + " multiplied by itself is: " + multiplyBySelf $i
</screen
> In this example a new command called <userinput
>multiplyBySelf</userinput
> is created. The input of this command is multiplied by itself and then returned, using the <anchor id="return"/><userinput
>return</userinput
> command. The <userinput
>return</userinput
> command is the way to output a value from a function you have created. </para>
<para
>Commands can have more than one <glossterm linkend="input-output"
>input</glossterm
>. In the next example, a command that draws a rectangle is created. <screen>
learn box $X, $Y {
  forward $Y
  turnright 90
  forward $X
  turnright 90
  forward $Y
  turnright 90
  forward $X
  turnright 90
}
</screen
> Now you can run <userinput
>box 50, 100</userinput
> and the turtle will draw a rectangle on the canvas. </para>
  
</sect1>

</chapter>
