File indexing completed on 2024-05-12 04:02:09

0001 <!DOCTYPE html>
0002 <html><head>
0003 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
0004 <title>test.nim</title>
0005 <meta name="generator" content="KF5::SyntaxHighlighting - Definition (Nim) - Theme (Breeze Light)"/>
0006 </head><body style="background-color:#ffffff;color:#1f1c1b"><pre>
0007 <span style="color:#898887"># Nim Sample file</span>
0008 <span style="color:#898887"># Obtained form: https://nim-by-example.github.io/</span>
0009 
0010 <span style="color:#898887"># Comment </span><span style="color:#e85848;background-color:#451e1a;font-weight:bold">ALERT</span><span style="color:#898887"> </span><span style="color:#81ca2d;background-color:#f7e6e6;font-weight:bold">NOTE</span><span style="color:#898887"> </span><span style="color:#ca9219;background-color:#451e1a;font-weight:bold">FIXME</span>
0011 <span style="color:#898887">#[ Multi-line</span>
0012 <span style="color:#898887">comment ]#</span>
0013 
0014 <span style="color:#607880">## Documentation comment</span>
0015 <span style="color:#607880">##[ Multi-line</span>
0016 <span style="color:#607880">    documentation comment ]##</span>
0017 
0018 <span style="font-weight:bold">import</span> strformat
0019 
0020 <span style="font-weight:bold">type</span>
0021     <span style="color:#0057ae">Person</span> <span style="color:#898887">=</span> <span style="font-weight:bold">object</span>
0022         name<span style="font-weight:bold">:</span> <span style="color:#0057ae">string</span>
0023         age<span style="font-weight:bold">:</span> <span style="color:#0057ae">Natural</span> <span style="color:#898887"># Ensures the age is positive</span>
0024 
0025 <span style="font-weight:bold">let</span> people <span style="color:#898887">=</span> <span style="font-weight:bold">[</span>
0026     <span style="color:#0057ae">Person</span><span style="font-weight:bold">(</span>name<span style="font-weight:bold">:</span> <span style="color:#bf0303">"John"</span><span style="font-weight:bold">,</span> age<span style="font-weight:bold">:</span> <span style="color:#b08000">45</span><span style="font-weight:bold">),</span>
0027     <span style="color:#0057ae">Person</span><span style="font-weight:bold">(</span>name<span style="font-weight:bold">:</span> <span style="color:#bf0303">"Kate"</span><span style="font-weight:bold">,</span> age<span style="font-weight:bold">:</span> <span style="color:#b08000">30</span><span style="font-weight:bold">)</span>
0028 <span style="font-weight:bold">]</span>
0029 
0030 <span style="font-weight:bold">for</span> person <span style="color:#898887;font-weight:bold">in</span> people<span style="font-weight:bold">:</span>
0031     <span style="color:#898887"># Type-safe string interpolation,</span>
0032     <span style="color:#898887"># evaluated at compile time.</span>
0033     <span style="font-weight:bold">echo</span><span style="font-weight:bold">(</span><span style="color:#644a9b">fmt</span><span style="color:#bf0303">"{person.name} is {person.age} years old"</span><span style="font-weight:bold">)</span>
0034 
0035 <span style="color:#898887"># Thanks to Nim's 'iterator' and 'yield' constructs,</span>
0036 <span style="color:#898887"># iterators are as easy to write as ordinary</span>
0037 <span style="color:#898887"># functions. They are compiled to inline loops.</span>
0038 <span style="font-weight:bold">iterator</span> <span style="color:#bf0303;font-weight:bold">oddNumbers</span><span style="font-weight:bold">[</span><span style="color:#0057ae">Idx</span><span style="font-weight:bold">,</span> <span style="color:#0057ae">T</span><span style="font-weight:bold">](</span>a<span style="font-weight:bold">:</span> <span style="color:#0057ae">array</span><span style="font-weight:bold">[</span><span style="color:#0057ae">Idx</span><span style="font-weight:bold">,</span> <span style="color:#0057ae">T</span><span style="font-weight:bold">]):</span> <span style="color:#0057ae">T</span> <span style="color:#898887">=</span>
0039     <span style="font-weight:bold">for</span> x <span style="color:#898887;font-weight:bold">in</span> a<span style="font-weight:bold">:</span>
0040         <span style="font-weight:bold">if</span> x <span style="color:#898887;font-weight:bold">mod</span> <span style="color:#b08000">2</span> <span style="color:#898887">==</span> <span style="color:#b08000">1</span><span style="font-weight:bold">:</span>
0041             <span style="font-weight:bold">yield</span> x
0042 
0043 <span style="font-weight:bold">for</span> odd <span style="color:#898887;font-weight:bold">in</span> <span style="color:#644a9b">oddNumbers</span><span style="font-weight:bold">([</span><span style="color:#b08000">3</span><span style="font-weight:bold">,</span> <span style="color:#b08000">6</span><span style="font-weight:bold">,</span> <span style="color:#b08000">9</span><span style="font-weight:bold">,</span> <span style="color:#b08000">12</span><span style="font-weight:bold">,</span> <span style="color:#b08000">15</span><span style="font-weight:bold">,</span> <span style="color:#b08000">18</span><span style="font-weight:bold">]):</span>
0044     <span style="font-weight:bold">echo</span> odd
0045 
0046 <span style="color:#898887"># Use Nim's macro system to transform a dense</span>
0047 <span style="color:#898887"># data-centric description of x86 instructions</span>
0048 <span style="color:#898887"># into lookup tables that are used by</span>
0049 <span style="color:#898887"># assemblers and JITs.</span>
0050 <span style="font-weight:bold">import</span> macros<span style="font-weight:bold">,</span> strutils
0051 
0052 <span style="font-weight:bold">macro</span> <span style="color:#bf0303;font-weight:bold">toLookupTable</span><span style="font-weight:bold">(</span>data<span style="font-weight:bold">:</span> <span style="color:#0057ae">static</span><span style="font-weight:bold">[</span><span style="color:#0057ae">string</span><span style="font-weight:bold">]):</span> <span style="color:#0057ae">untyped</span> <span style="color:#898887">=</span>
0053     <span style="color:#006e28">result</span> <span style="color:#898887">=</span> <span style="color:#644a9b">newTree</span><span style="font-weight:bold">(</span>nnkBracket<span style="font-weight:bold">)</span>
0054     <span style="font-weight:bold">for</span> w <span style="color:#898887;font-weight:bold">in</span> data<span style="font-weight:bold">.</span><span style="color:#644a9b">split</span><span style="font-weight:bold">(</span><span style="color:#924c9d">';'</span><span style="font-weight:bold">):</span>
0055         <span style="color:#006e28">result</span><span style="font-weight:bold">.</span><span style="color:#0057ae">add</span> <span style="color:#644a9b">newLit</span><span style="font-weight:bold">(</span>w<span style="font-weight:bold">)</span>
0056 
0057 <span style="font-weight:bold">const</span>
0058     data <span style="color:#898887">=</span> <span style="color:#bf0303">"mov;btc;cli;xor"</span>
0059     opcodes <span style="color:#898887">=</span> <span style="color:#644a9b">toLookupTable</span><span style="font-weight:bold">(</span>data<span style="font-weight:bold">)</span>
0060 
0061 <span style="font-weight:bold">for</span> o <span style="color:#898887;font-weight:bold">in</span> opcodes<span style="font-weight:bold">:</span>
0062     <span style="font-weight:bold">echo</span> o
0063 
0064 <span style="color:#898887"># Variables</span>
0065 <span style="font-weight:bold">proc</span> <span style="color:#bf0303;font-weight:bold">getAlphabet</span><span style="font-weight:bold">():</span> <span style="color:#0057ae">string</span> <span style="color:#898887">=</span>
0066     <span style="font-weight:bold">var</span> accm <span style="color:#898887">=</span> <span style="color:#bf0303">""</span>
0067     <span style="font-weight:bold">for</span> letter <span style="color:#898887;font-weight:bold">in</span> <span style="color:#924c9d">'a'</span><span style="font-weight:bold">..</span><span style="color:#924c9d">'z'</span><span style="font-weight:bold">:</span>  <span style="color:#898887"># see iterators</span>
0068         accm<span style="font-weight:bold">.</span><span style="color:#644a9b">add</span><span style="font-weight:bold">(</span>letter<span style="font-weight:bold">)</span>
0069     <span style="font-weight:bold">return</span> accm
0070 
0071 <span style="color:#898887"># Computed at compilation time</span>
0072 <span style="font-weight:bold">const</span> alphabet <span style="color:#898887">=</span> <span style="color:#644a9b">getAlphabet</span><span style="font-weight:bold">()</span>
0073 
0074 <span style="color:#898887"># Mutable variables</span>
0075 <span style="font-weight:bold">var</span>
0076     a <span style="color:#898887">=</span> <span style="color:#bf0303">"foo"</span>
0077     b <span style="color:#898887">=</span> <span style="color:#b08000">0</span>
0078     <span style="color:#898887"># Works fine, initialized to 0</span>
0079     c<span style="font-weight:bold">:</span> <span style="color:#0057ae">int</span>
0080 
0081 <span style="color:#898887"># Immutable variables</span>
0082 <span style="font-weight:bold">let</span>
0083     d <span style="color:#898887">=</span> <span style="color:#bf0303">"foo"</span>
0084     e <span style="color:#898887">=</span> <span style="color:#b08000">5</span>
0085     <span style="color:#898887"># Compile-time error, must be initialized at creation</span>
0086     f<span style="font-weight:bold">:</span> <span style="color:#0057ae">float</span>
0087 
0088 <span style="color:#898887"># Works fine, `a` is mutable</span>
0089 a<span style="font-weight:bold">.</span><span style="color:#644a9b">add</span><span style="font-weight:bold">(</span><span style="color:#bf0303">"bar"</span><span style="font-weight:bold">)</span>
0090 b <span style="color:#898887">+=</span> <span style="color:#b08000">1</span>
0091 c <span style="color:#898887">=</span> <span style="color:#b08000">3</span>
0092 
0093 <span style="color:#898887"># Compile-time error, const cannot be modified at run-time</span>
0094 alphabet <span style="color:#898887">=</span> <span style="color:#bf0303">"abc"</span>
0095 
0096 <span style="color:#898887"># Compile-time error, `d` and `e` are immutable</span>
0097 d<span style="font-weight:bold">.</span><span style="color:#644a9b">add</span><span style="font-weight:bold">(</span><span style="color:#bf0303">"bar"</span><span style="font-weight:bold">)</span>
0098 e <span style="color:#898887">+=</span> <span style="color:#b08000">1</span>
0099 
0100 <span style="color:#898887"># Const</span>
0101 <span style="color:#0057ae">STRING_LITERAL</span><span style="font-weight:bold">(</span><span style="color:#0057ae">TMP129</span><span style="font-weight:bold">,</span> <span style="color:#bf0303">"abcdefghijklmnopqrstuvwxyz"</span><span style="font-weight:bold">,</span> <span style="color:#b08000">26</span><span style="font-weight:bold">);</span>
0102 
0103 <span style="color:#898887"># Loops</span>
0104 <span style="font-weight:bold">import</span> strutils<span style="font-weight:bold">,</span> random
0105 
0106 <span style="color:#644a9b">randomize</span><span style="font-weight:bold">()</span>
0107 <span style="font-weight:bold">let</span> answer <span style="color:#898887">=</span> <span style="color:#644a9b">random</span><span style="font-weight:bold">(</span><span style="color:#b08000">10</span><span style="font-weight:bold">)</span> <span style="color:#898887">+</span> <span style="color:#b08000">1</span>
0108 <span style="font-weight:bold">while</span> <span style="color:#aa5500;font-weight:bold">true</span><span style="font-weight:bold">:</span>
0109     <span style="font-weight:bold">echo</span> <span style="color:#bf0303">"I have a number from 1 to 10, what is it? "</span>
0110     <span style="font-weight:bold">let</span> guess <span style="color:#898887">=</span> <span style="color:#644a9b">parseInt</span><span style="font-weight:bold">(</span>stdin<span style="font-weight:bold">.</span><span style="color:#0057ae">readLine</span><span style="font-weight:bold">)</span>
0111 
0112     <span style="font-weight:bold">if</span> guess <span style="color:#898887">&lt;</span> answer<span style="font-weight:bold">:</span>
0113         <span style="font-weight:bold">echo</span> <span style="color:#bf0303">"Too low, try again"</span>
0114     <span style="font-weight:bold">elif</span> guess <span style="color:#898887">></span> answer<span style="font-weight:bold">:</span>
0115         <span style="font-weight:bold">echo</span> <span style="color:#bf0303">"Too high, try again"</span>
0116     <span style="font-weight:bold">else</span><span style="font-weight:bold">:</span>
0117         <span style="font-weight:bold">echo</span> <span style="color:#bf0303">"Correct!"</span>
0118         <span style="font-weight:bold">break</span>
0119 
0120 <span style="font-weight:bold">block</span> busyloops<span style="font-weight:bold">:</span>
0121     <span style="font-weight:bold">while</span> <span style="color:#aa5500;font-weight:bold">true</span><span style="font-weight:bold">:</span>
0122         <span style="font-weight:bold">while</span> <span style="color:#aa5500;font-weight:bold">true</span><span style="font-weight:bold">:</span>
0123         <span style="font-weight:bold">break</span> busyloops
0124 
0125 <span style="color:#898887"># Case Statements</span>
0126 <span style="font-weight:bold">case</span> <span style="color:#bf0303">"charlie"</span><span style="font-weight:bold">:</span>
0127     <span style="color:#898887;font-weight:bold">of</span> <span style="color:#bf0303">"alfa"</span><span style="font-weight:bold">:</span>
0128         <span style="font-weight:bold">echo</span> <span style="color:#bf0303">"A"</span>
0129     <span style="color:#898887;font-weight:bold">of</span> <span style="color:#bf0303">"bravo"</span><span style="font-weight:bold">:</span>
0130         <span style="font-weight:bold">echo</span> <span style="color:#bf0303">"B"</span>
0131     <span style="color:#898887;font-weight:bold">of</span> <span style="color:#bf0303">"charlie"</span><span style="font-weight:bold">:</span>
0132         <span style="font-weight:bold">echo</span> <span style="color:#bf0303">"C"</span>
0133     <span style="font-weight:bold">else</span><span style="font-weight:bold">:</span>
0134         <span style="font-weight:bold">echo</span> <span style="color:#bf0303">"Unrecognized letter"</span>
0135 
0136 <span style="font-weight:bold">case</span> <span style="color:#924c9d">'h'</span><span style="font-weight:bold">:</span>
0137     <span style="color:#898887;font-weight:bold">of</span> <span style="color:#924c9d">'a'</span><span style="font-weight:bold">,</span> <span style="color:#924c9d">'e'</span><span style="font-weight:bold">,</span> <span style="color:#924c9d">'i'</span><span style="font-weight:bold">,</span> <span style="color:#924c9d">'o'</span><span style="font-weight:bold">,</span> <span style="color:#924c9d">'u'</span><span style="font-weight:bold">:</span>
0138         <span style="font-weight:bold">echo</span> <span style="color:#bf0303">"Vowel"</span>
0139     <span style="color:#898887;font-weight:bold">of</span> <span style="color:#924c9d">'\127'</span><span style="font-weight:bold">..</span><span style="color:#924c9d">'\255'</span><span style="font-weight:bold">:</span>
0140         <span style="font-weight:bold">echo</span> <span style="color:#bf0303">"Unknown"</span>
0141     <span style="font-weight:bold">else</span><span style="font-weight:bold">:</span>
0142         <span style="font-weight:bold">echo</span> <span style="color:#bf0303">"Consonant"</span>
0143 
0144 <span style="font-weight:bold">proc</span> <span style="color:#bf0303;font-weight:bold">positiveOrNegative</span><span style="font-weight:bold">(</span>num<span style="font-weight:bold">:</span> <span style="color:#0057ae">int</span><span style="font-weight:bold">):</span> <span style="color:#0057ae">string</span> <span style="color:#898887">=</span>
0145     <span style="color:#006e28">result</span> <span style="color:#898887">=</span> <span style="font-weight:bold">case</span> num<span style="font-weight:bold">:</span>
0146         <span style="color:#898887;font-weight:bold">of</span> <span style="color:#644a9b">low</span><span style="font-weight:bold">(</span><span style="color:#0057ae">int</span><span style="font-weight:bold">)..</span> <span style="color:#898887">-</span><span style="color:#b08000">1</span><span style="font-weight:bold">:</span>
0147             <span style="color:#bf0303">"negative"</span>
0148         <span style="color:#898887;font-weight:bold">of</span> <span style="color:#b08000">0</span><span style="font-weight:bold">:</span>
0149             <span style="color:#bf0303">"zero"</span>
0150         <span style="color:#898887;font-weight:bold">of</span> <span style="color:#b08000">1</span><span style="font-weight:bold">..</span><span style="color:#644a9b">high</span><span style="font-weight:bold">(</span><span style="color:#0057ae">int</span><span style="font-weight:bold">):</span>
0151             <span style="color:#bf0303">"positive"</span>
0152         <span style="font-weight:bold">else</span><span style="font-weight:bold">:</span>
0153             <span style="color:#bf0303">"impossible"</span>
0154 
0155 <span style="font-weight:bold">echo</span> <span style="color:#644a9b">positiveOrNegative</span><span style="font-weight:bold">(</span><span style="color:#898887">-</span><span style="color:#b08000">1</span><span style="font-weight:bold">)</span>
0156 
0157 <span style="color:#898887"># items and pairs</span>
0158 <span style="font-weight:bold">type</span>
0159     <span style="color:#0057ae">CustomRange</span> <span style="color:#898887">=</span> <span style="font-weight:bold">object</span>
0160         low<span style="font-weight:bold">:</span> <span style="color:#0057ae">int</span>
0161         high<span style="font-weight:bold">:</span> <span style="color:#0057ae">int</span>
0162 
0163 <span style="font-weight:bold">iterator</span> <span style="color:#bf0303;font-weight:bold">items</span><span style="font-weight:bold">(</span>range<span style="font-weight:bold">:</span> <span style="color:#0057ae">CustomRange</span><span style="font-weight:bold">):</span> <span style="color:#0057ae">int</span> <span style="color:#898887">=</span>
0164     <span style="font-weight:bold">var</span> i <span style="color:#898887">=</span> range<span style="font-weight:bold">.</span><span style="color:#0057ae">low</span>
0165     <span style="font-weight:bold">while</span> i <span style="color:#898887">&lt;=</span> range<span style="font-weight:bold">.</span><span style="color:#0057ae">high</span><span style="font-weight:bold">:</span>
0166         <span style="font-weight:bold">yield</span> i
0167         <span style="color:#644a9b">inc</span> i
0168 
0169 <span style="font-weight:bold">iterator</span> <span style="color:#bf0303;font-weight:bold">pairs</span><span style="font-weight:bold">(</span>range<span style="font-weight:bold">:</span> <span style="color:#0057ae">CustomRange</span><span style="font-weight:bold">):</span> <span style="color:#0057ae">tuple</span><span style="font-weight:bold">[</span>a<span style="font-weight:bold">:</span> <span style="color:#0057ae">int</span><span style="font-weight:bold">,</span> b<span style="font-weight:bold">:</span> <span style="color:#0057ae">char</span><span style="font-weight:bold">]</span> <span style="color:#898887">=</span>
0170     <span style="font-weight:bold">for</span> i <span style="color:#898887;font-weight:bold">in</span> range<span style="font-weight:bold">:</span>  <span style="color:#898887"># uses CustomRange.items</span>
0171         <span style="font-weight:bold">yield</span> <span style="font-weight:bold">(</span>i<span style="font-weight:bold">,</span> <span style="color:#0057ae">char</span><span style="font-weight:bold">(</span>i <span style="color:#898887">+</span> <span style="color:#644a9b">ord</span><span style="font-weight:bold">(</span><span style="color:#924c9d">'a'</span><span style="font-weight:bold">)))</span>
0172 
0173 <span style="font-weight:bold">for</span> i<span style="font-weight:bold">,</span> c <span style="color:#898887;font-weight:bold">in</span> <span style="color:#0057ae">CustomRange</span><span style="font-weight:bold">(</span>low<span style="font-weight:bold">:</span> <span style="color:#b08000">1</span><span style="font-weight:bold">,</span> high<span style="font-weight:bold">:</span> <span style="color:#b08000">3</span><span style="font-weight:bold">):</span>
0174     <span style="font-weight:bold">echo</span> c
0175 
0176 <span style="color:#898887"># Operators</span>
0177 <span style="font-weight:bold">iterator</span> <span style="color:#bf0303;font-weight:bold">`...`</span><span style="color:#898887">*</span><span style="font-weight:bold">[</span><span style="color:#0057ae">T</span><span style="font-weight:bold">](</span>a<span style="font-weight:bold">:</span> <span style="color:#0057ae">T</span><span style="font-weight:bold">,</span> b<span style="font-weight:bold">:</span> <span style="color:#0057ae">T</span><span style="font-weight:bold">):</span> <span style="color:#0057ae">T</span> <span style="color:#898887">=</span>
0178     <span style="font-weight:bold">var</span> res<span style="font-weight:bold">:</span> <span style="color:#0057ae">T</span> <span style="color:#898887">=</span> <span style="color:#0057ae">T</span><span style="font-weight:bold">(</span>a<span style="font-weight:bold">)</span>
0179     <span style="font-weight:bold">while</span> res <span style="color:#898887">&lt;=</span> b<span style="font-weight:bold">:</span>
0180         <span style="font-weight:bold">yield</span> res
0181         <span style="color:#644a9b">inc</span> res
0182 
0183 <span style="font-weight:bold">for</span> i <span style="color:#898887;font-weight:bold">in</span> <span style="color:#b08000">0</span><span style="font-weight:bold">...</span><span style="color:#b08000">5</span><span style="font-weight:bold">:</span>
0184     <span style="font-weight:bold">echo</span> i
0185 
0186 <span style="color:#898887"># Inline Iterators</span>
0187 <span style="font-weight:bold">iterator</span> <span style="color:#bf0303;font-weight:bold">countTo</span><span style="font-weight:bold">(</span>n<span style="font-weight:bold">:</span> <span style="color:#0057ae">int</span><span style="font-weight:bold">):</span> <span style="color:#0057ae">int</span> <span style="color:#898887">=</span>
0188     <span style="font-weight:bold">var</span> i <span style="color:#898887">=</span> <span style="color:#b08000">0</span>
0189     <span style="font-weight:bold">while</span> i <span style="color:#898887">&lt;=</span> n<span style="font-weight:bold">:</span>
0190         <span style="font-weight:bold">yield</span> i
0191         <span style="color:#644a9b">inc</span> i
0192 
0193 <span style="font-weight:bold">for</span> i <span style="color:#898887;font-weight:bold">in</span> <span style="color:#644a9b">countTo</span><span style="font-weight:bold">(</span><span style="color:#b08000">5</span><span style="font-weight:bold">):</span>
0194     <span style="font-weight:bold">echo</span> i
0195 
0196 <span style="color:#898887"># Closure Iterators</span>
0197 <span style="font-weight:bold">proc</span> <span style="color:#bf0303;font-weight:bold">countTo</span><span style="font-weight:bold">(</span>n<span style="font-weight:bold">:</span> <span style="color:#0057ae">int</span><span style="font-weight:bold">):</span> <span style="font-weight:bold">iterator</span><span style="font-weight:bold">():</span> <span style="color:#0057ae">int</span> <span style="color:#898887">=</span>
0198     <span style="font-weight:bold">return</span> <span style="font-weight:bold">iterator</span><span style="font-weight:bold">():</span> <span style="color:#0057ae">int</span> <span style="color:#898887">=</span>
0199         <span style="font-weight:bold">var</span> i <span style="color:#898887">=</span> <span style="color:#b08000">0</span>
0200         <span style="font-weight:bold">while</span> i <span style="color:#898887">&lt;=</span> n<span style="font-weight:bold">:</span>
0201             <span style="font-weight:bold">yield</span> i
0202             <span style="color:#644a9b">inc</span> i
0203 
0204 <span style="font-weight:bold">let</span> countTo20 <span style="color:#898887">=</span> <span style="color:#644a9b">countTo</span><span style="font-weight:bold">(</span><span style="color:#b08000">20</span><span style="font-weight:bold">)</span>
0205 
0206 <span style="font-weight:bold">echo</span> <span style="color:#644a9b">countTo20</span><span style="font-weight:bold">()</span>
0207 
0208 <span style="font-weight:bold">var</span> output <span style="color:#898887">=</span> <span style="color:#bf0303">""</span>
0209 <span style="color:#898887"># Raw iterator usage:</span>
0210 <span style="font-weight:bold">while</span> <span style="color:#aa5500;font-weight:bold">true</span><span style="font-weight:bold">:</span>
0211     <span style="color:#898887"># 1. grab an element</span>
0212     <span style="font-weight:bold">let</span> next <span style="color:#898887">=</span> <span style="color:#644a9b">countTo20</span><span style="font-weight:bold">()</span>
0213     <span style="color:#898887"># 2. Is the element bogus? It's the end of the loop, discard it</span>
0214     <span style="font-weight:bold">if</span> <span style="color:#644a9b">finished</span><span style="font-weight:bold">(</span>countTo20<span style="font-weight:bold">):</span>
0215         <span style="font-weight:bold">break</span>
0216     <span style="color:#898887"># 3. Loop body goes here:</span>
0217     output<span style="font-weight:bold">.</span><span style="color:#644a9b">add</span><span style="font-weight:bold">(</span><span style="color:#898887">$</span>next <span style="color:#898887">&amp;</span> <span style="color:#bf0303">" "</span><span style="font-weight:bold">)</span>
0218 
0219 <span style="font-weight:bold">echo</span> output
0220 
0221 output <span style="color:#898887">=</span> <span style="color:#bf0303">""</span>
0222 <span style="font-weight:bold">let</span> countTo9 <span style="color:#898887">=</span> <span style="color:#644a9b">countTo</span><span style="font-weight:bold">(</span><span style="color:#b08000">9</span><span style="font-weight:bold">)</span>
0223 <span style="font-weight:bold">for</span> i <span style="color:#898887;font-weight:bold">in</span> <span style="color:#644a9b">countTo9</span><span style="font-weight:bold">():</span>
0224     output<span style="font-weight:bold">.</span><span style="color:#644a9b">add</span><span style="font-weight:bold">(</span><span style="color:#898887">$</span>i<span style="font-weight:bold">)</span>
0225 <span style="font-weight:bold">echo</span> output
0226 
0227 <span style="color:#898887"># Procs</span>
0228 <span style="font-weight:bold">proc</span> <span style="color:#bf0303;font-weight:bold">fibonacci</span><span style="font-weight:bold">(</span>n<span style="font-weight:bold">:</span> <span style="color:#0057ae">int</span><span style="font-weight:bold">):</span> <span style="color:#0057ae">int</span> <span style="color:#898887">=</span>
0229     <span style="font-weight:bold">if</span> n <span style="color:#898887">&lt;</span> <span style="color:#b08000">2</span><span style="font-weight:bold">:</span>
0230         <span style="color:#006e28">result</span> <span style="color:#898887">=</span> n
0231     <span style="font-weight:bold">else</span><span style="font-weight:bold">:</span>
0232         <span style="color:#006e28">result</span> <span style="color:#898887">=</span> <span style="color:#644a9b">fibonacci</span><span style="font-weight:bold">(</span>n <span style="color:#898887">-</span> <span style="color:#b08000">1</span><span style="font-weight:bold">)</span> <span style="color:#898887">+</span> <span style="font-weight:bold">(</span>n <span style="color:#898887">-</span> <span style="color:#b08000">2</span><span style="font-weight:bold">).</span><span style="color:#0057ae">fibonacci</span>
0233 
0234 <span style="color:#898887"># Operators</span>
0235 <span style="font-weight:bold">proc</span> <span style="color:#bf0303;font-weight:bold">`$`</span><span style="font-weight:bold">(</span>a<span style="font-weight:bold">:</span> <span style="color:#0057ae">array</span><span style="font-weight:bold">[</span><span style="color:#b08000">2</span><span style="font-weight:bold">,</span> <span style="color:#0057ae">array</span><span style="font-weight:bold">[</span><span style="color:#b08000">2</span><span style="font-weight:bold">,</span> <span style="color:#0057ae">int</span><span style="font-weight:bold">]]):</span> <span style="color:#0057ae">string</span> <span style="color:#898887">=</span>
0236     <span style="color:#006e28">result</span> <span style="color:#898887">=</span> <span style="color:#bf0303">""</span>
0237     <span style="font-weight:bold">for</span> v <span style="color:#898887;font-weight:bold">in</span> a<span style="font-weight:bold">:</span>
0238         <span style="font-weight:bold">for</span> vx <span style="color:#898887;font-weight:bold">in</span> v<span style="font-weight:bold">:</span>
0239             <span style="color:#006e28">result</span><span style="font-weight:bold">.</span><span style="color:#644a9b">add</span><span style="font-weight:bold">(</span><span style="color:#898887">$</span>vx <span style="color:#898887">&amp;</span> <span style="color:#bf0303">", "</span><span style="font-weight:bold">)</span>
0240         <span style="color:#006e28">result</span><span style="font-weight:bold">.</span><span style="color:#644a9b">add</span><span style="font-weight:bold">(</span><span style="color:#bf0303">"</span><span style="color:#3daee9">\n</span><span style="color:#bf0303">"</span><span style="font-weight:bold">)</span>
0241 
0242 <span style="font-weight:bold">echo</span><span style="font-weight:bold">([[</span><span style="color:#b08000">1</span><span style="font-weight:bold">,</span> <span style="color:#b08000">2</span><span style="font-weight:bold">],</span> <span style="font-weight:bold">[</span><span style="color:#b08000">3</span><span style="font-weight:bold">,</span> <span style="color:#b08000">4</span><span style="font-weight:bold">]])</span>  <span style="color:#898887"># See varargs for</span>
0243                         <span style="color:#898887"># how echo works</span>
0244 
0245 <span style="font-weight:bold">proc</span> <span style="color:#bf0303;font-weight:bold">`^&amp;*^@%`</span><span style="font-weight:bold">(</span>a<span style="font-weight:bold">,</span> b<span style="font-weight:bold">:</span> <span style="color:#0057ae">string</span><span style="font-weight:bold">):</span> <span style="color:#0057ae">string</span> <span style="color:#898887">=</span>
0246     <span style="color:#607880">## A confusingly named useless operator</span>
0247     <span style="color:#006e28">result</span> <span style="color:#898887">=</span> a<span style="font-weight:bold">[</span><span style="color:#b08000">0</span><span style="font-weight:bold">]</span> <span style="color:#898887">&amp;</span> b<span style="font-weight:bold">[</span><span style="color:#644a9b">high</span><span style="font-weight:bold">(</span>b<span style="font-weight:bold">)]</span>
0248 
0249 <span style="font-weight:bold">assert</span><span style="font-weight:bold">(</span><span style="color:#bf0303">"foo"</span> <span style="color:#898887">^&amp;*^@%</span> <span style="color:#bf0303">"bar"</span> <span style="color:#898887">==</span> <span style="color:#bf0303">"fr"</span><span style="font-weight:bold">)</span>
0250 
0251 <span style="color:#898887"># Generic Functions</span>
0252 <span style="color:#898887"># Not really good idea for obvious reasons</span>
0253 <span style="font-weight:bold">let</span> zero <span style="color:#898887">=</span> <span style="color:#bf0303">""</span>
0254 <span style="font-weight:bold">proc</span> <span style="color:#bf0303;font-weight:bold">`+`</span><span style="font-weight:bold">(</span>a<span style="font-weight:bold">,</span> b<span style="font-weight:bold">:</span> <span style="color:#0057ae">string</span><span style="font-weight:bold">):</span> <span style="color:#0057ae">string</span> <span style="color:#898887">=</span>
0255     a <span style="color:#898887">&amp;</span> b
0256 
0257 <span style="font-weight:bold">proc</span> <span style="color:#bf0303;font-weight:bold">`*`</span><span style="font-weight:bold">[</span><span style="color:#0057ae">T</span><span style="font-weight:bold">](</span>a<span style="font-weight:bold">:</span> <span style="color:#0057ae">T</span><span style="font-weight:bold">,</span> b<span style="font-weight:bold">:</span> <span style="color:#0057ae">int</span><span style="font-weight:bold">):</span> <span style="color:#0057ae">T</span> <span style="color:#898887">=</span>
0258     <span style="color:#006e28">result</span> <span style="color:#898887">=</span> zero
0259     <span style="font-weight:bold">for</span> i <span style="color:#898887;font-weight:bold">in</span> <span style="color:#b08000">0</span><span style="font-weight:bold">..</span>b<span style="color:#898887">-</span><span style="color:#b08000">1</span><span style="font-weight:bold">:</span>
0260         <span style="color:#006e28">result</span> <span style="color:#898887">=</span> <span style="color:#006e28">result</span> <span style="color:#898887">+</span> <span style="color:#644a9b">a </span> <span style="color:#898887"># calls `+` from line 3</span>
0261 
0262 <span style="font-weight:bold">assert</span><span style="font-weight:bold">(</span><span style="color:#bf0303">"a"</span> <span style="color:#898887">*</span> <span style="color:#b08000">10</span> <span style="color:#898887">==</span> <span style="color:#bf0303">"aaaaaaaaaa"</span><span style="font-weight:bold">)</span>
0263 
0264 <span style="color:#898887"># Blocks</span>
0265 <span style="font-weight:bold">block</span> outer<span style="font-weight:bold">:</span>
0266     <span style="font-weight:bold">for</span> i <span style="color:#898887;font-weight:bold">in</span> <span style="color:#b08000">0</span><span style="font-weight:bold">..</span><span style="color:#b08000">2000</span><span style="font-weight:bold">:</span>
0267         <span style="font-weight:bold">for</span> j <span style="color:#898887;font-weight:bold">in</span> <span style="color:#b08000">0</span><span style="font-weight:bold">..</span><span style="color:#b08000">2000</span><span style="font-weight:bold">:</span>
0268             <span style="font-weight:bold">if</span> i<span style="color:#898887">+</span>j <span style="color:#898887">==</span> <span style="color:#b08000">3145</span><span style="font-weight:bold">:</span>
0269                 <span style="font-weight:bold">echo</span> i<span style="font-weight:bold">,</span> <span style="color:#bf0303">", "</span><span style="font-weight:bold">,</span> j
0270                 <span style="font-weight:bold">break</span> outer
0271 
0272 <span style="font-weight:bold">let</span> b <span style="color:#898887">=</span> <span style="color:#b08000">3</span>
0273 <span style="font-weight:bold">block</span><span style="font-weight:bold">:</span>
0274     <span style="font-weight:bold">let</span> b <span style="color:#898887">=</span> <span style="color:#bf0303">"3"</span>  <span style="color:#898887"># shadowing is probably a dumb idea</span>
0275 
0276 <span style="color:#898887"># Primitive types</span>
0277 <span style="font-weight:bold">let</span>
0278     a<span style="font-weight:bold">:</span> <span style="color:#0057ae">int8</span> <span style="color:#898887">=</span> <span style="color:#b08000">0x7F</span> <span style="color:#898887"># Works</span>
0279     b<span style="font-weight:bold">:</span> <span style="color:#0057ae">uint8</span> <span style="color:#898887">=</span> <span style="color:#b08000">0b1111_1111</span> <span style="color:#898887"># Works</span>
0280     d <span style="color:#898887">=</span> <span style="color:#b08000">0xFF</span> <span style="color:#898887"># type is int</span>
0281     c<span style="font-weight:bold">:</span> <span style="color:#0057ae">uint8</span> <span style="color:#898887">=</span> <span style="color:#b08000">256</span> <span style="color:#898887"># Compile time error</span>
0282 <span style="font-weight:bold">let</span>
0283     a<span style="font-weight:bold">:</span> <span style="color:#0057ae">int</span> <span style="color:#898887">=</span> <span style="color:#b08000">2</span>
0284     b<span style="font-weight:bold">:</span> <span style="color:#0057ae">int</span> <span style="color:#898887">=</span> <span style="color:#b08000">4</span>
0285 <span style="font-weight:bold">echo</span> <span style="color:#b08000">4</span><span style="color:#898887">/</span><span style="color:#b08000">2</span>
0286 
0287 <span style="color:#898887"># Types Aliases</span>
0288 <span style="font-weight:bold">type</span>
0289     <span style="color:#0057ae">MyInteger</span><span style="color:#898887">*</span> <span style="color:#898887">=</span> <span style="color:#0057ae">int</span>
0290 
0291 <span style="font-weight:bold">let</span> a<span style="font-weight:bold">:</span> <span style="color:#0057ae">int</span> <span style="color:#898887">=</span> <span style="color:#b08000">2</span>
0292 <span style="font-weight:bold">discard</span> a <span style="color:#898887">+</span> <span style="color:#0057ae">MyInteger</span><span style="font-weight:bold">(</span><span style="color:#b08000">4</span><span style="font-weight:bold">)</span>
0293 
0294 <span style="color:#898887"># Objects</span>
0295 <span style="font-weight:bold">type</span>
0296     <span style="color:#0057ae">Animal</span><span style="color:#898887">*</span> <span style="color:#898887">=</span> <span style="font-weight:bold">object</span>
0297         name<span style="color:#898887">*</span><span style="font-weight:bold">,</span> species<span style="color:#898887">*</span><span style="font-weight:bold">:</span> <span style="color:#0057ae">string</span>
0298         age<span style="font-weight:bold">:</span> <span style="color:#0057ae">int</span>
0299 
0300 <span style="font-weight:bold">proc</span> <span style="color:#bf0303;font-weight:bold">sleep</span><span style="color:#898887">*</span><span style="font-weight:bold">(</span>a<span style="font-weight:bold">:</span> <span style="font-weight:bold">var</span> <span style="color:#0057ae">Animal</span><span style="font-weight:bold">)</span> <span style="color:#898887">=</span>
0301     a<span style="font-weight:bold">.</span><span style="color:#0057ae">age</span> <span style="color:#898887">+=</span> <span style="color:#b08000">1</span>
0302 
0303 <span style="font-weight:bold">proc</span> <span style="color:#bf0303;font-weight:bold">dead</span><span style="color:#898887">*</span><span style="font-weight:bold">(</span>a<span style="font-weight:bold">:</span> <span style="color:#0057ae">Animal</span><span style="font-weight:bold">):</span> <span style="color:#0057ae">bool</span> <span style="color:#898887">=</span>
0304     <span style="color:#006e28">result</span> <span style="color:#898887">=</span> a<span style="font-weight:bold">.</span><span style="color:#0057ae">age</span> <span style="color:#898887">></span> <span style="color:#b08000">20</span>
0305 
0306 <span style="font-weight:bold">var</span> carl<span style="font-weight:bold">:</span> <span style="color:#0057ae">Animal</span>
0307 carl <span style="color:#898887">=</span> <span style="color:#0057ae">Animal</span><span style="font-weight:bold">(</span><span style="color:#644a9b">name</span> <span style="font-weight:bold">:</span> <span style="color:#bf0303">"Carl"</span><span style="font-weight:bold">,</span>
0308               <span style="color:#644a9b">species</span> <span style="font-weight:bold">:</span> <span style="color:#bf0303">"L. glama"</span><span style="font-weight:bold">,</span>
0309               <span style="color:#644a9b">age</span> <span style="font-weight:bold">:</span> <span style="color:#b08000">12</span><span style="font-weight:bold">)</span>
0310 
0311 <span style="font-weight:bold">let</span> joe <span style="color:#898887">=</span> <span style="color:#0057ae">Animal</span><span style="font-weight:bold">(</span><span style="color:#644a9b">name</span> <span style="font-weight:bold">:</span> <span style="color:#bf0303">"Joe"</span><span style="font-weight:bold">,</span>
0312                  <span style="color:#644a9b">species</span> <span style="font-weight:bold">:</span> <span style="color:#bf0303">"H. sapiens"</span><span style="font-weight:bold">,</span>
0313                  <span style="color:#644a9b">age</span> <span style="font-weight:bold">:</span> <span style="color:#b08000">23</span><span style="font-weight:bold">)</span>
0314 
0315 <span style="font-weight:bold">assert</span><span style="font-weight:bold">(</span><span style="color:#898887;font-weight:bold">not</span> carl<span style="font-weight:bold">.</span><span style="color:#0057ae">dead</span><span style="font-weight:bold">)</span>
0316 <span style="font-weight:bold">for</span> i <span style="color:#898887;font-weight:bold">in</span> <span style="color:#b08000">0</span><span style="font-weight:bold">..</span><span style="color:#b08000">10</span><span style="font-weight:bold">:</span>
0317     carl<span style="font-weight:bold">.</span><span style="color:#644a9b">sleep</span><span style="font-weight:bold">()</span>
0318 <span style="font-weight:bold">assert</span> carl<span style="font-weight:bold">.</span><span style="color:#0057ae">dead</span>
0319 
0320 <span style="color:#898887"># Enums</span>
0321 <span style="font-weight:bold">type</span>
0322     <span style="color:#0057ae">CompassDirections</span> <span style="color:#898887">=</span> <span style="font-weight:bold">enum</span>
0323         cdNorth<span style="font-weight:bold">,</span> cdEast<span style="font-weight:bold">,</span> cdSouth<span style="font-weight:bold">,</span> cdWest
0324 
0325     <span style="color:#0057ae">Colors</span> <span style="color:#0057ae">{.pure.}</span> <span style="color:#898887">=</span> <span style="font-weight:bold">enum</span>
0326         <span style="color:#0057ae">Red</span> <span style="color:#898887">=</span> <span style="color:#bf0303">"FF0000"</span><span style="font-weight:bold">,</span> <span style="color:#0057ae">Green</span> <span style="color:#898887">=</span> <span style="font-weight:bold">(</span><span style="color:#b08000">1</span><span style="font-weight:bold">,</span> <span style="color:#bf0303">"00FF00"</span><span style="font-weight:bold">),</span> <span style="color:#0057ae">Blue</span> <span style="color:#898887">=</span> <span style="color:#bf0303">"0000FF"</span>
0327 
0328     <span style="color:#0057ae">Signals</span> <span style="color:#898887">=</span> <span style="font-weight:bold">enum</span>
0329         sigQuit <span style="color:#898887">=</span> <span style="color:#b08000">3</span><span style="font-weight:bold">,</span> sigAbort <span style="color:#898887">=</span> <span style="color:#b08000">6</span><span style="font-weight:bold">,</span> sigKill <span style="color:#898887">=</span> <span style="color:#b08000">9</span>
0330 
0331 <span style="color:#898887"># Distinct Types</span>
0332 <span style="font-weight:bold">type</span>
0333     <span style="color:#0057ae">Dollars</span><span style="color:#898887">*</span> <span style="color:#898887">=</span> <span style="color:#0057ae">distinct</span> <span style="color:#0057ae">float</span>
0334 
0335 <span style="font-weight:bold">var</span> a <span style="color:#898887">=</span> <span style="color:#b08000">20.</span><span style="color:#0057ae">Dollars</span>
0336 a <span style="color:#898887">=</span> <span style="color:#b08000">25</span>  <span style="color:#898887"># Doesn't compile</span>
0337 a <span style="color:#898887">=</span> <span style="color:#b08000">25.</span><span style="color:#0057ae">Dollars</span>  <span style="color:#898887"># Works fine</span>
0338 
0339 <span style="color:#898887"># Strings</span>
0340 <span style="font-weight:bold">echo</span> <span style="color:#bf0303">"words words words âš‘"</span>
0341 <span style="font-weight:bold">echo</span> <span style="color:#bf0303">"""</span>
0342 <span style="color:#bf0303">&lt;html></span>
0343 <span style="color:#bf0303">  &lt;head></span>
0344 <span style="color:#bf0303">  &lt;/head>\n\n</span>
0345 
0346 <span style="color:#bf0303">  &lt;body></span>
0347 <span style="color:#bf0303">  &lt;/body></span>
0348 <span style="color:#bf0303">&lt;/html> """</span>
0349 
0350 <span style="font-weight:bold">proc</span> <span style="color:#bf0303;font-weight:bold">re</span><span style="font-weight:bold">(</span>s<span style="font-weight:bold">:</span> <span style="color:#0057ae">string</span><span style="font-weight:bold">):</span> <span style="color:#0057ae">string</span> <span style="color:#898887">=</span> s
0351 
0352 <span style="font-weight:bold">echo</span> <span style="color:#bf0303">r".</span><span style="color:#3daee9">""</span><span style="color:#bf0303">.\s\"</span>      <span style="color:#898887"># Raw string</span>
0353 <span style="font-weight:bold">echo</span> <span style="color:#bf0303">re"</span><span style="color:#3daee9">\b</span><span style="color:#3daee9">[a-z]</span><span style="color:#3daee9">++\b</span><span style="color:#bf0303">"</span> <span style="color:#898887"># Regular expression</span>
0354 <span style="font-weight:bold">echo</span> <span style="color:#644a9b">function</span><span style="color:#bf0303">"text"</span>  <span style="color:#898887"># Tagged string</span>
0355 
0356 <span style="color:#898887"># Arrays</span>
0357 <span style="font-weight:bold">type</span>
0358     <span style="color:#0057ae">ThreeStringAddress</span> <span style="color:#898887">=</span> <span style="color:#0057ae">array</span><span style="font-weight:bold">[</span><span style="color:#b08000">3</span><span style="font-weight:bold">,</span> <span style="color:#0057ae">string</span><span style="font-weight:bold">]</span>
0359 <span style="font-weight:bold">let</span> names<span style="font-weight:bold">:</span> <span style="color:#0057ae">ThreeStringAddress</span> <span style="color:#898887">=</span> <span style="font-weight:bold">[</span><span style="color:#bf0303">"Jasmine"</span><span style="font-weight:bold">,</span> <span style="color:#bf0303">"Ktisztina"</span><span style="font-weight:bold">,</span> <span style="color:#bf0303">"Kristof"</span><span style="font-weight:bold">]</span>
0360 <span style="font-weight:bold">let</span> addresses<span style="font-weight:bold">:</span> <span style="color:#0057ae">ThreeStringAddress</span> <span style="color:#898887">=</span> <span style="font-weight:bold">[</span><span style="color:#bf0303">"101 Betburweg"</span><span style="font-weight:bold">,</span> <span style="color:#bf0303">"66 Bellion Drive"</span><span style="font-weight:bold">,</span> <span style="color:#bf0303">"194 Laarderweg"</span><span style="font-weight:bold">]</span>
0361 
0362 <span style="font-weight:bold">type</span>
0363     <span style="color:#0057ae">Matrix</span><span style="font-weight:bold">[</span><span style="color:#0057ae">W</span><span style="font-weight:bold">,</span> <span style="color:#0057ae">H</span><span style="font-weight:bold">:</span> <span style="color:#0057ae">static</span><span style="font-weight:bold">[</span><span style="color:#0057ae">int</span><span style="font-weight:bold">]]</span> <span style="color:#898887">=</span>
0364         <span style="color:#0057ae">array</span><span style="font-weight:bold">[</span><span style="color:#b08000">1</span><span style="font-weight:bold">..</span><span style="color:#0057ae">W</span><span style="font-weight:bold">,</span> <span style="color:#0057ae">array</span><span style="font-weight:bold">[</span><span style="color:#b08000">1</span><span style="font-weight:bold">..</span><span style="color:#0057ae">H</span><span style="font-weight:bold">,</span> <span style="color:#0057ae">int</span><span style="font-weight:bold">]]</span>
0365 
0366 <span style="font-weight:bold">let</span> mat1<span style="font-weight:bold">:</span> <span style="color:#0057ae">Matrix</span><span style="font-weight:bold">[</span><span style="color:#b08000">2</span><span style="font-weight:bold">,</span> <span style="color:#b08000">2</span><span style="font-weight:bold">]</span> <span style="color:#898887">=</span> <span style="font-weight:bold">[[</span><span style="color:#b08000">1</span><span style="font-weight:bold">,</span> <span style="color:#b08000">0</span><span style="font-weight:bold">],</span>
0367                           <span style="font-weight:bold">[</span><span style="color:#b08000">0</span><span style="font-weight:bold">,</span> <span style="color:#b08000">1</span><span style="font-weight:bold">]]</span>
0368 <span style="font-weight:bold">let</span> mat2<span style="font-weight:bold">:</span> <span style="color:#0057ae">Matrix</span><span style="font-weight:bold">[</span><span style="color:#b08000">2</span><span style="font-weight:bold">,</span> <span style="color:#b08000">2</span><span style="font-weight:bold">]</span> <span style="color:#898887">=</span> <span style="font-weight:bold">[[</span><span style="color:#b08000">0</span><span style="font-weight:bold">,</span> <span style="color:#b08000">1</span><span style="font-weight:bold">],</span>
0369                           <span style="font-weight:bold">[</span><span style="color:#b08000">1</span><span style="font-weight:bold">,</span> <span style="color:#b08000">0</span><span style="font-weight:bold">]]</span>
0370 
0371 <span style="font-weight:bold">proc</span> <span style="color:#bf0303;font-weight:bold">`+`</span><span style="font-weight:bold">[</span><span style="color:#0057ae">W</span><span style="font-weight:bold">,</span> <span style="color:#0057ae">H</span><span style="font-weight:bold">](</span>a<span style="font-weight:bold">,</span> b<span style="font-weight:bold">:</span> <span style="color:#0057ae">Matrix</span><span style="font-weight:bold">[</span><span style="color:#0057ae">W</span><span style="font-weight:bold">,</span> <span style="color:#0057ae">H</span><span style="font-weight:bold">]):</span>
0372     <span style="color:#0057ae">Matrix</span><span style="font-weight:bold">[</span><span style="color:#0057ae">W</span><span style="font-weight:bold">,</span> <span style="color:#0057ae">H</span><span style="font-weight:bold">]</span> <span style="color:#898887">=</span>
0373         <span style="font-weight:bold">for</span> i <span style="color:#898887;font-weight:bold">in</span> <span style="color:#b08000">1</span><span style="font-weight:bold">..</span><span style="color:#644a9b">high</span><span style="font-weight:bold">(</span>a<span style="font-weight:bold">):</span>
0374             <span style="font-weight:bold">for</span> j <span style="color:#898887;font-weight:bold">in</span> <span style="color:#b08000">1</span><span style="font-weight:bold">..</span><span style="color:#644a9b">high</span><span style="font-weight:bold">(</span>a<span style="font-weight:bold">[</span><span style="color:#b08000">0</span><span style="font-weight:bold">]):</span>
0375                 <span style="color:#006e28">result</span><span style="font-weight:bold">[</span>i<span style="font-weight:bold">][</span>j<span style="font-weight:bold">]</span> <span style="color:#898887">=</span> a<span style="font-weight:bold">[</span>i<span style="font-weight:bold">][</span>j<span style="font-weight:bold">]</span> <span style="color:#898887">+</span> b<span style="font-weight:bold">[</span>i<span style="font-weight:bold">][</span>j<span style="font-weight:bold">]</span>
0376 
0377 <span style="color:#898887"># Seqs</span>
0378 <span style="font-weight:bold">var</span>
0379     a <span style="color:#898887">=</span> <span style="color:#898887">@</span><span style="font-weight:bold">[</span><span style="color:#b08000">1</span><span style="font-weight:bold">,</span> <span style="color:#b08000">2</span><span style="font-weight:bold">,</span> <span style="color:#b08000">3</span><span style="font-weight:bold">]</span>
0380     b <span style="color:#898887">=</span> <span style="color:#644a9b">newSeq</span><span style="font-weight:bold">[</span><span style="color:#0057ae">int</span><span style="font-weight:bold">](</span><span style="color:#b08000">3</span><span style="font-weight:bold">)</span>
0381 
0382 <span style="font-weight:bold">for</span> i<span style="font-weight:bold">,</span> v <span style="color:#898887;font-weight:bold">in</span> a<span style="font-weight:bold">:</span>
0383     b<span style="font-weight:bold">[</span>i<span style="font-weight:bold">]</span> <span style="color:#898887">=</span> v<span style="color:#898887">*</span>v
0384 
0385 <span style="font-weight:bold">for</span> i <span style="color:#898887;font-weight:bold">in</span> <span style="color:#b08000">4</span><span style="font-weight:bold">..</span><span style="color:#b08000">100</span><span style="font-weight:bold">:</span>
0386     b<span style="font-weight:bold">.</span><span style="color:#644a9b">add</span><span style="font-weight:bold">(</span>i <span style="color:#898887">*</span> i<span style="font-weight:bold">)</span>
0387 
0388 b<span style="font-weight:bold">.</span><span style="color:#644a9b">delete</span><span style="font-weight:bold">(</span><span style="color:#b08000">0</span><span style="font-weight:bold">)</span>  <span style="color:#898887"># takes O(n) time</span>
0389 b <span style="color:#898887">=</span> a<span style="font-weight:bold">[</span><span style="color:#b08000">0</span><span style="font-weight:bold">]</span> <span style="color:#898887">&amp;</span> <span style="color:#644a9b">b </span> <span style="color:#898887"># Same as original b</span>
0390 
0391 <span style="color:#898887"># JSON</span>
0392 <span style="font-weight:bold">import</span> json
0393 
0394 <span style="font-weight:bold">let</span> element <span style="color:#898887">=</span> <span style="color:#bf0303">"Hydrogen"</span>
0395 <span style="font-weight:bold">let</span> atomicNumber <span style="color:#898887">=</span> <span style="color:#b08000">1</span>
0396 
0397 <span style="font-weight:bold">let</span> jsonObject <span style="color:#898887">=</span> <span style="color:#898887">%*</span> <span style="font-weight:bold">{</span><span style="color:#bf0303">"element"</span><span style="font-weight:bold">:</span> element<span style="font-weight:bold">,</span> <span style="color:#bf0303">"atomicNumber"</span><span style="font-weight:bold">:</span> atomicNumber<span style="font-weight:bold">}</span>
0398 <span style="color:#898887"># This will print {"element":"Hydrogen", "atomicNumber": 1}</span>
0399 <span style="font-weight:bold">echo</span> <span style="color:#898887">$</span>jsonObject
0400 
0401 <span style="color:#898887"># We start with a string representation of a JSON object</span>
0402 <span style="font-weight:bold">let</span> jsonObject <span style="color:#898887">=</span> <span style="color:#bf0303">"""{"name": "Sky", "age": 32}"""</span>
0403 <span style="font-weight:bold">let</span> jsonArray <span style="color:#898887">=</span> <span style="color:#bf0303">"""[7, 8, 9]"""</span>
0404 
0405 <span style="font-weight:bold">let</span> parsedObject <span style="color:#898887">=</span> <span style="color:#644a9b">parseJson</span><span style="font-weight:bold">(</span>jsonObject<span style="font-weight:bold">)</span>
0406 <span style="font-weight:bold">let</span> name <span style="color:#898887">=</span> parsedObject<span style="font-weight:bold">[</span><span style="color:#bf0303">"name"</span><span style="font-weight:bold">].</span><span style="color:#644a9b">getStr</span><span style="font-weight:bold">()</span>
0407 <span style="color:#898887"># This will print Sky</span>
0408 <span style="font-weight:bold">echo</span> name
0409 
0410 <span style="font-weight:bold">let</span> parsedArray <span style="color:#898887">=</span> <span style="color:#644a9b">parseJson</span><span style="font-weight:bold">(</span>jsonArray<span style="font-weight:bold">)</span>
0411 <span style="font-weight:bold">let</span> eight <span style="color:#898887">=</span> parsedArray<span style="font-weight:bold">[</span><span style="color:#b08000">1</span><span style="font-weight:bold">].</span><span style="color:#644a9b">getInt</span><span style="font-weight:bold">()</span>
0412 <span style="color:#898887"># This will print 8</span>
0413 <span style="font-weight:bold">echo</span> eight
0414 
0415 <span style="color:#898887"># First we'll define our types</span>
0416 <span style="font-weight:bold">type</span>
0417     <span style="color:#0057ae">Element</span> <span style="color:#898887">=</span> <span style="font-weight:bold">object</span>
0418         name<span style="font-weight:bold">:</span> <span style="color:#0057ae">string</span>
0419         atomicNumber<span style="font-weight:bold">:</span> <span style="color:#0057ae">int</span>
0420 
0421 <span style="color:#898887"># Let's say this is the JSON we want to convert</span>
0422 <span style="font-weight:bold">let</span> jsonObject <span style="color:#898887">=</span> <span style="color:#644a9b">parseJson</span><span style="font-weight:bold">(</span><span style="color:#bf0303">"""{"name": "Carbon", "atomicNumber": 6}"""</span><span style="font-weight:bold">)</span>
0423 
0424 <span style="font-weight:bold">let</span> element <span style="color:#898887">=</span> <span style="color:#644a9b">to</span><span style="font-weight:bold">(</span>jsonObject<span style="font-weight:bold">,</span> <span style="color:#0057ae">Element</span><span style="font-weight:bold">)</span>
0425 <span style="color:#898887"># This will print Carbon</span>
0426 <span style="font-weight:bold">echo</span> element<span style="font-weight:bold">.</span><span style="color:#0057ae">name</span>
0427 <span style="color:#898887"># This will print 6</span>
0428 <span style="font-weight:bold">echo</span> element<span style="font-weight:bold">.</span><span style="color:#0057ae">atomicNumber</span>
0429 
0430 <span style="color:#898887"># Object Oriented Programming</span>
0431 <span style="font-weight:bold">type</span> <span style="color:#0057ae;font-weight:bold">Animal</span> <span style="color:#898887">=</span> <span style="color:#0057ae">ref</span> <span style="font-weight:bold">object</span> <span style="color:#898887;font-weight:bold">of</span> <span style="color:#0057ae">RootObj</span>
0432     name<span style="font-weight:bold">:</span> <span style="color:#0057ae">string</span>
0433     age<span style="font-weight:bold">:</span> <span style="color:#0057ae">int</span>
0434 <span style="font-weight:bold">method</span> <span style="color:#bf0303;font-weight:bold">vocalize</span><span style="font-weight:bold">(</span>this<span style="font-weight:bold">:</span> <span style="color:#0057ae">Animal</span><span style="font-weight:bold">):</span> <span style="color:#0057ae">string</span> <span style="color:#0057ae">{.base.}</span> <span style="color:#898887">=</span> <span style="color:#bf0303">"..."</span>
0435 <span style="font-weight:bold">method</span> <span style="color:#bf0303;font-weight:bold">ageHumanYrs</span><span style="font-weight:bold">(</span>this<span style="font-weight:bold">:</span> <span style="color:#0057ae">Animal</span><span style="font-weight:bold">):</span> <span style="color:#0057ae">int</span> <span style="color:#0057ae">{.base.}</span> <span style="color:#898887">=</span> this<span style="font-weight:bold">.</span><span style="color:#0057ae">age</span>
0436 
0437 <span style="font-weight:bold">type</span> <span style="color:#0057ae;font-weight:bold">Dog</span> <span style="color:#898887">=</span> <span style="color:#0057ae">ref</span> <span style="font-weight:bold">object</span> <span style="color:#898887;font-weight:bold">of</span> <span style="color:#0057ae">Animal</span>
0438 <span style="font-weight:bold">method</span> <span style="color:#bf0303;font-weight:bold">vocalize</span><span style="font-weight:bold">(</span>this<span style="font-weight:bold">:</span> <span style="color:#0057ae">Dog</span><span style="font-weight:bold">):</span> <span style="color:#0057ae">string</span> <span style="color:#898887">=</span> <span style="color:#bf0303">"woof"</span>
0439 <span style="font-weight:bold">method</span> <span style="color:#bf0303;font-weight:bold">ageHumanYrs</span><span style="font-weight:bold">(</span>this<span style="font-weight:bold">:</span> <span style="color:#0057ae">Dog</span><span style="font-weight:bold">):</span> <span style="color:#0057ae">int</span> <span style="color:#898887">=</span> this<span style="font-weight:bold">.</span><span style="color:#0057ae">age</span> <span style="color:#898887">*</span> <span style="color:#b08000">7</span>
0440 
0441 <span style="font-weight:bold">type</span> <span style="color:#0057ae;font-weight:bold">Cat</span> <span style="color:#898887">=</span> <span style="color:#0057ae">ref</span> <span style="font-weight:bold">object</span> <span style="color:#898887;font-weight:bold">of</span> <span style="color:#0057ae">Animal</span>
0442 <span style="font-weight:bold">method</span> <span style="color:#bf0303;font-weight:bold">vocalize</span><span style="font-weight:bold">(</span>this<span style="font-weight:bold">:</span> <span style="color:#0057ae">Cat</span><span style="font-weight:bold">):</span> <span style="color:#0057ae">string</span> <span style="color:#898887">=</span> <span style="color:#bf0303">"meow"</span>
0443 
0444 <span style="font-weight:bold">var</span> animals<span style="font-weight:bold">:</span> <span style="color:#0057ae">seq</span><span style="font-weight:bold">[</span><span style="color:#0057ae">Animal</span><span style="font-weight:bold">]</span> <span style="color:#898887">=</span> <span style="color:#898887">@</span><span style="font-weight:bold">[]</span>
0445 animals<span style="font-weight:bold">.</span><span style="color:#644a9b">add</span><span style="font-weight:bold">(</span><span style="color:#0057ae">Dog</span><span style="font-weight:bold">(</span>name<span style="font-weight:bold">:</span> <span style="color:#bf0303">"Sparky"</span><span style="font-weight:bold">,</span> age<span style="font-weight:bold">:</span> <span style="color:#b08000">10</span><span style="font-weight:bold">))</span>
0446 animals<span style="font-weight:bold">.</span><span style="color:#644a9b">add</span><span style="font-weight:bold">(</span><span style="color:#0057ae">Cat</span><span style="font-weight:bold">(</span>name<span style="font-weight:bold">:</span> <span style="color:#bf0303">"Mitten"</span><span style="font-weight:bold">,</span> age<span style="font-weight:bold">:</span> <span style="color:#b08000">10</span><span style="font-weight:bold">))</span>
0447 
0448 <span style="font-weight:bold">for</span> a <span style="color:#898887;font-weight:bold">in</span> animals<span style="font-weight:bold">:</span>
0449     <span style="font-weight:bold">echo</span> a<span style="font-weight:bold">.</span><span style="color:#644a9b">vocalize</span><span style="font-weight:bold">()</span>
0450     <span style="font-weight:bold">echo</span> a<span style="font-weight:bold">.</span><span style="color:#644a9b">ageHumanYrs</span><span style="font-weight:bold">()</span>
0451 
0452 <span style="font-weight:bold">let</span> slash <span style="color:#898887">=</span> <span style="color:#bf0303">"</span><span style="color:#3daee9">\\</span><span style="color:#bf0303">"</span>
0453 </pre></body></html>