Warning, file /frameworks/syntax-highlighting/autotests/html/test.nim.dark.html was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
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>