File indexing completed on 2024-05-19 15:23:16

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;">&quot;John&quot;</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;">&quot;Kate&quot;</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;">&quot;{person.name} is {person.age} years old&quot;</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;">&quot;mov;btc;cli;xor&quot;</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;">&quot;&quot;</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;">&quot;foo&quot;</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;">&quot;foo&quot;</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;">&quot;bar&quot;</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;">&quot;abc&quot;</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;">&quot;bar&quot;</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;">&quot;abcdefghijklmnopqrstuvwxyz&quot;</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;">&quot;I have a number from 1 to 10, what is it? &quot;</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;">&quot;Too low, try again&quot;</span>
0114     <span style="font-weight:bold;">elif</span> guess <span style="color:#898887;">&gt;</span> answer<span style="font-weight:bold;">:</span>
0115         <span style="font-weight:bold;">echo</span> <span style="color:#bf0303;">&quot;Too high, try again&quot;</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;">&quot;Correct!&quot;</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;">&quot;charlie&quot;</span><span style="font-weight:bold;">:</span>
0127     <span style="color:#898887;font-weight:bold;">of</span> <span style="color:#bf0303;">&quot;alfa&quot;</span><span style="font-weight:bold;">:</span>
0128         <span style="font-weight:bold;">echo</span> <span style="color:#bf0303;">&quot;A&quot;</span>
0129     <span style="color:#898887;font-weight:bold;">of</span> <span style="color:#bf0303;">&quot;bravo&quot;</span><span style="font-weight:bold;">:</span>
0130         <span style="font-weight:bold;">echo</span> <span style="color:#bf0303;">&quot;B&quot;</span>
0131     <span style="color:#898887;font-weight:bold;">of</span> <span style="color:#bf0303;">&quot;charlie&quot;</span><span style="font-weight:bold;">:</span>
0132         <span style="font-weight:bold;">echo</span> <span style="color:#bf0303;">&quot;C&quot;</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;">&quot;Unrecognized letter&quot;</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;">&quot;Vowel&quot;</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;">&quot;Unknown&quot;</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;">&quot;Consonant&quot;</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;">&quot;negative&quot;</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;">&quot;zero&quot;</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;">&quot;positive&quot;</span>
0152         <span style="font-weight:bold;">else</span><span style="font-weight:bold;">:</span>
0153             <span style="color:#bf0303;">&quot;impossible&quot;</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;">&quot;&quot;</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;">&quot; &quot;</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;">&quot;&quot;</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;">&quot;&quot;</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;">&quot;, &quot;</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;">&quot;</span><span style="color:#3daee9;">\n</span><span style="color:#bf0303;">&quot;</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;">&quot;foo&quot;</span> <span style="color:#898887;">^&amp;*^@%</span> <span style="color:#bf0303;">&quot;bar&quot;</span> <span style="color:#898887;">==</span> <span style="color:#bf0303;">&quot;fr&quot;</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;">&quot;&quot;</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;">&quot;a&quot;</span> <span style="color:#898887;">*</span> <span style="color:#b08000;">10</span> <span style="color:#898887;">==</span> <span style="color:#bf0303;">&quot;aaaaaaaaaa&quot;</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;">&quot;, &quot;</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;">&quot;3&quot;</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;">&gt;</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;">&quot;Carl&quot;</span><span style="font-weight:bold;">,</span>
0308               <span style="color:#644a9b;">species</span> <span style="font-weight:bold;">:</span> <span style="color:#bf0303;">&quot;L. glama&quot;</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;">&quot;Joe&quot;</span><span style="font-weight:bold;">,</span>
0312                  <span style="color:#644a9b;">species</span> <span style="font-weight:bold;">:</span> <span style="color:#bf0303;">&quot;H. sapiens&quot;</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;">&quot;FF0000&quot;</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;">&quot;00FF00&quot;</span><span style="font-weight:bold;">),</span> <span style="color:#0057ae;">Blue</span> <span style="color:#898887;">=</span> <span style="color:#bf0303;">&quot;0000FF&quot;</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;">&quot;words words words âš‘&quot;</span>
0341 <span style="font-weight:bold;">echo</span> <span style="color:#bf0303;">&quot;&quot;&quot;</span>
0342 <span style="color:#bf0303;">&lt;html&gt;</span>
0343 <span style="color:#bf0303;">  &lt;head&gt;</span>
0344 <span style="color:#bf0303;">  &lt;/head&gt;\n\n</span>
0345 
0346 <span style="color:#bf0303;">  &lt;body&gt;</span>
0347 <span style="color:#bf0303;">  &lt;/body&gt;</span>
0348 <span style="color:#bf0303;">&lt;/html&gt; &quot;&quot;&quot;</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&quot;.</span><span style="color:#3daee9;">&quot;&quot;</span><span style="color:#bf0303;">.\s\&quot;</span>      <span style="color:#898887;"># Raw string</span>
0353 <span style="font-weight:bold;">echo</span> <span style="color:#bf0303;">re&quot;</span><span style="color:#3daee9;">\b</span><span style="color:#3daee9;">[a-z]</span><span style="color:#3daee9;">++\b</span><span style="color:#bf0303;">&quot;</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;">&quot;text&quot;</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;">&quot;Jasmine&quot;</span><span style="font-weight:bold;">,</span> <span style="color:#bf0303;">&quot;Ktisztina&quot;</span><span style="font-weight:bold;">,</span> <span style="color:#bf0303;">&quot;Kristof&quot;</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;">&quot;101 Betburweg&quot;</span><span style="font-weight:bold;">,</span> <span style="color:#bf0303;">&quot;66 Bellion Drive&quot;</span><span style="font-weight:bold;">,</span> <span style="color:#bf0303;">&quot;194 Laarderweg&quot;</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;">&quot;Hydrogen&quot;</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;">&quot;element&quot;</span><span style="font-weight:bold;">:</span> element<span style="font-weight:bold;">,</span> <span style="color:#bf0303;">&quot;atomicNumber&quot;</span><span style="font-weight:bold;">:</span> atomicNumber<span style="font-weight:bold;">}</span>
0398 <span style="color:#898887;"># This will print {&quot;element&quot;:&quot;Hydrogen&quot;, &quot;atomicNumber&quot;: 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;">&quot;&quot;&quot;{&quot;name&quot;: &quot;Sky&quot;, &quot;age&quot;: 32}&quot;&quot;&quot;</span>
0403 <span style="font-weight:bold;">let</span> jsonArray <span style="color:#898887;">=</span> <span style="color:#bf0303;">&quot;&quot;&quot;[7, 8, 9]&quot;&quot;&quot;</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;">&quot;name&quot;</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;">&quot;&quot;&quot;{&quot;name&quot;: &quot;Carbon&quot;, &quot;atomicNumber&quot;: 6}&quot;&quot;&quot;</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;">&quot;...&quot;</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;">&quot;woof&quot;</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;">&quot;meow&quot;</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;">&quot;Sparky&quot;</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;">&quot;Mitten&quot;</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;">&quot;</span><span style="color:#3daee9;">\\</span><span style="color:#bf0303;">&quot;</span>
0453 </pre></body></html>