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