1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
<span class="hljs-comment">(* Real-world example from StackExchange *)</span>
<span class="hljs-variable">xkcdStyle</span> <span class="hljs-operator">=</span> <span class="hljs-punctuation">{</span><span class="hljs-built_in">FontFamily</span> <span class="hljs-operator">-></span> <span class="hljs-string">"Comic Sans MS"</span><span class="hljs-operator">,</span> <span class="hljs-number">16</span><span class="hljs-punctuation">}</span><span class="hljs-operator">;</span>
<span class="hljs-variable">xkcdLabel</span><span class="hljs-punctuation">[</span><span class="hljs-punctuation">{</span><span class="hljs-type">str_String</span><span class="hljs-operator">,</span> <span class="hljs-punctuation">{</span><span class="hljs-type">x1_</span><span class="hljs-operator">,</span> <span class="hljs-type">y1_</span><span class="hljs-punctuation">}</span><span class="hljs-operator">,</span> <span class="hljs-punctuation">{</span><span class="hljs-type">xo_</span><span class="hljs-operator">,</span> <span class="hljs-type">yo_</span><span class="hljs-punctuation">}</span><span class="hljs-punctuation">}</span><span class="hljs-punctuation">]</span> <span class="hljs-operator">:=</span> <span class="hljs-built_in">Module</span><span class="hljs-punctuation">[</span><span class="hljs-punctuation">{</span><span class="hljs-variable">x2</span><span class="hljs-operator">,</span> <span class="hljs-variable">y2</span><span class="hljs-punctuation">}</span><span class="hljs-operator">,</span>
<span class="hljs-variable">x2</span> <span class="hljs-operator">=</span> <span class="hljs-variable">x1</span> <span class="hljs-operator">+</span> <span class="hljs-variable">xo</span><span class="hljs-operator">;</span> <span class="hljs-variable">y2</span> <span class="hljs-operator">=</span> <span class="hljs-variable">y1</span> <span class="hljs-operator">+</span> <span class="hljs-variable">yo</span><span class="hljs-operator">;</span>
<span class="hljs-punctuation">{</span>
<span class="hljs-built_in">Inset</span><span class="hljs-punctuation">[</span>
<span class="hljs-built_in">Style</span><span class="hljs-punctuation">[</span><span class="hljs-variable">str</span><span class="hljs-operator">,</span> <span class="hljs-variable">xkcdStyle</span><span class="hljs-punctuation">]</span><span class="hljs-operator">,</span>
<span class="hljs-punctuation">{</span><span class="hljs-variable">x2</span><span class="hljs-operator">,</span> <span class="hljs-variable">y2</span><span class="hljs-punctuation">}</span><span class="hljs-operator">,</span>
<span class="hljs-punctuation">{</span><span class="hljs-number">1.2</span><span class="hljs-operator">*</span><span class="hljs-built_in">Sign</span><span class="hljs-punctuation">[</span><span class="hljs-variable">x1</span> <span class="hljs-operator">-</span> <span class="hljs-variable">x2</span><span class="hljs-punctuation">]</span><span class="hljs-operator">,</span> <span class="hljs-built_in">Sign</span><span class="hljs-punctuation">[</span><span class="hljs-variable">y1</span> <span class="hljs-operator">-</span> <span class="hljs-variable">y2</span><span class="hljs-punctuation">]</span> <span class="hljs-built_in">Boole</span><span class="hljs-punctuation">[</span><span class="hljs-variable">x1</span> <span class="hljs-operator">==</span> <span class="hljs-variable">x2</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">}</span>
<span class="hljs-punctuation">]</span><span class="hljs-operator">,</span>
<span class="hljs-built_in">Thick</span><span class="hljs-operator">,</span>
<span class="hljs-built_in">BezierCurve</span><span class="hljs-punctuation">[</span><span class="hljs-punctuation">{</span><span class="hljs-punctuation">{</span><span class="hljs-number">0.9</span><span class="hljs-operator">*</span><span class="hljs-variable">x1</span> <span class="hljs-operator">+</span> <span class="hljs-number">0.1</span><span class="hljs-operator">*</span><span class="hljs-variable">x2</span><span class="hljs-operator">,</span> <span class="hljs-number">0.9</span><span class="hljs-operator">*</span><span class="hljs-variable">y1</span> <span class="hljs-operator">+</span> <span class="hljs-number">0.1</span><span class="hljs-operator">*</span><span class="hljs-variable">y2</span><span class="hljs-punctuation">}</span><span class="hljs-operator">,</span> <span class="hljs-punctuation">{</span><span class="hljs-variable">x1</span><span class="hljs-operator">,</span> <span class="hljs-variable">y2</span><span class="hljs-punctuation">}</span><span class="hljs-operator">,</span> <span class="hljs-punctuation">{</span><span class="hljs-variable">x2</span><span class="hljs-operator">,</span> <span class="hljs-variable">y2</span><span class="hljs-punctuation">}</span><span class="hljs-punctuation">}</span><span class="hljs-punctuation">]</span>
<span class="hljs-punctuation">}</span>
<span class="hljs-punctuation">]</span><span class="hljs-operator">;</span>
<span class="hljs-variable">xkcdRules</span> <span class="hljs-operator">=</span> <span class="hljs-punctuation">{</span>
<span class="hljs-built_in">EdgeForm</span><span class="hljs-punctuation">[</span><span class="hljs-variable">ef</span> <span class="hljs-operator">:</span> <span class="hljs-built_in">Except</span><span class="hljs-punctuation">[</span><span class="hljs-built_in">None</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">]</span> <span class="hljs-operator">:></span> <span class="hljs-built_in">EdgeForm</span><span class="hljs-punctuation">[</span><span class="hljs-built_in">Flatten</span><span class="hljs-operator">@</span><span class="hljs-punctuation">{</span><span class="hljs-variable">ef</span><span class="hljs-operator">,</span> <span class="hljs-built_in">Thick</span><span class="hljs-operator">,</span> <span class="hljs-built_in">Black</span><span class="hljs-punctuation">}</span><span class="hljs-punctuation">]</span><span class="hljs-operator">,</span>
<span class="hljs-built_in">Style</span><span class="hljs-punctuation">[</span><span class="hljs-type">x_</span><span class="hljs-operator">,</span> <span class="hljs-type">st_</span><span class="hljs-punctuation">]</span> <span class="hljs-operator">:></span> <span class="hljs-built_in">Style</span><span class="hljs-punctuation">[</span><span class="hljs-variable">x</span><span class="hljs-operator">,</span> <span class="hljs-variable">xkcdStyle</span><span class="hljs-punctuation">]</span><span class="hljs-operator">,</span>
<span class="hljs-built_in">Pane</span><span class="hljs-punctuation">[</span><span class="hljs-type">s_String</span><span class="hljs-punctuation">]</span> <span class="hljs-operator">:></span> <span class="hljs-built_in">Pane</span><span class="hljs-punctuation">[</span><span class="hljs-built_in">Style</span><span class="hljs-punctuation">[</span><span class="hljs-variable">s</span><span class="hljs-operator">,</span> <span class="hljs-variable">xkcdStyle</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">]</span><span class="hljs-operator">,</span>
<span class="hljs-punctuation">{</span><span class="hljs-type">h_Hue</span><span class="hljs-operator">,</span> <span class="hljs-type">l_Line</span><span class="hljs-punctuation">}</span> <span class="hljs-operator">:></span> <span class="hljs-punctuation">{</span><span class="hljs-built_in">Thickness</span><span class="hljs-punctuation">[</span><span class="hljs-number">0.02</span><span class="hljs-punctuation">]</span><span class="hljs-operator">,</span> <span class="hljs-built_in">White</span><span class="hljs-operator">,</span> <span class="hljs-variable">l</span><span class="hljs-operator">,</span> <span class="hljs-built_in">Thick</span><span class="hljs-operator">,</span> <span class="hljs-variable">h</span><span class="hljs-operator">,</span> <span class="hljs-variable">l</span><span class="hljs-punctuation">}</span><span class="hljs-operator">,</span>
<span class="hljs-built_in">Grid</span><span class="hljs-punctuation">[</span><span class="hljs-punctuation">{</span><span class="hljs-punctuation">{</span><span class="hljs-type">g_Graphics</span><span class="hljs-operator">,</span> <span class="hljs-type">s_String</span><span class="hljs-punctuation">}</span><span class="hljs-punctuation">}</span><span class="hljs-punctuation">]</span> <span class="hljs-operator">:></span> <span class="hljs-built_in">Grid</span><span class="hljs-punctuation">[</span><span class="hljs-punctuation">{</span><span class="hljs-punctuation">{</span><span class="hljs-variable">g</span><span class="hljs-operator">,</span> <span class="hljs-built_in">Style</span><span class="hljs-punctuation">[</span><span class="hljs-variable">s</span><span class="hljs-operator">,</span> <span class="hljs-variable">xkcdStyle</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">}</span><span class="hljs-punctuation">}</span><span class="hljs-punctuation">]</span><span class="hljs-operator">,</span>
<span class="hljs-built_in">Rule</span><span class="hljs-punctuation">[</span><span class="hljs-built_in">PlotLabel</span><span class="hljs-operator">,</span> <span class="hljs-type">lab_</span><span class="hljs-punctuation">]</span> <span class="hljs-operator">:></span> <span class="hljs-built_in">Rule</span><span class="hljs-punctuation">[</span><span class="hljs-built_in">PlotLabel</span><span class="hljs-operator">,</span> <span class="hljs-built_in">Style</span><span class="hljs-punctuation">[</span><span class="hljs-variable">lab</span><span class="hljs-operator">,</span> <span class="hljs-variable">xkcdStyle</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">]</span>
<span class="hljs-punctuation">}</span><span class="hljs-operator">;</span>
<span class="hljs-variable">xkcdShow</span><span class="hljs-punctuation">[</span><span class="hljs-type">plot_</span><span class="hljs-punctuation">]</span> <span class="hljs-operator">:=</span> <span class="hljs-built_in">Show</span><span class="hljs-punctuation">[</span><span class="hljs-variable">plot</span><span class="hljs-operator">,</span> <span class="hljs-built_in">AxesStyle</span> <span class="hljs-operator">-></span> <span class="hljs-built_in">Thick</span><span class="hljs-operator">,</span> <span class="hljs-built_in">LabelStyle</span> <span class="hljs-operator">-></span> <span class="hljs-variable">xkcdStyle</span><span class="hljs-punctuation">]</span> <span class="hljs-operator">/.</span> <span class="hljs-variable">xkcdRules</span><span class="hljs-operator">;</span>
<span class="hljs-variable">xkcdShow</span><span class="hljs-punctuation">[</span><span class="hljs-built_in">Labeled</span><span class="hljs-punctuation">[</span><span class="hljs-type">plot_</span><span class="hljs-operator">,</span> <span class="hljs-type">rest__</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">]</span> <span class="hljs-operator">:=</span> <span class="hljs-built_in">Labeled</span><span class="hljs-punctuation">[</span>
<span class="hljs-built_in">Show</span><span class="hljs-punctuation">[</span><span class="hljs-variable">plot</span><span class="hljs-operator">,</span> <span class="hljs-built_in">AxesStyle</span> <span class="hljs-operator">-></span> <span class="hljs-built_in">Thick</span><span class="hljs-operator">,</span> <span class="hljs-built_in">LabelStyle</span> <span class="hljs-operator">-></span> <span class="hljs-variable">xkcdStyle</span><span class="hljs-punctuation">]</span><span class="hljs-operator">,</span> <span class="hljs-variable">rest</span> <span class="hljs-punctuation">]</span> <span class="hljs-operator">/.</span> <span class="hljs-variable">xkcdRules</span><span class="hljs-operator">;</span>
<span class="hljs-variable">xkcdDistort</span><span class="hljs-punctuation">[</span><span class="hljs-type">plot_</span><span class="hljs-punctuation">]</span> <span class="hljs-operator">:=</span> <span class="hljs-built_in">Module</span><span class="hljs-punctuation">[</span><span class="hljs-punctuation">{</span><span class="hljs-variable">r</span><span class="hljs-operator">,</span> <span class="hljs-variable">ix</span><span class="hljs-operator">,</span> <span class="hljs-variable">iy</span><span class="hljs-punctuation">}</span><span class="hljs-operator">,</span>
<span class="hljs-variable">r</span> <span class="hljs-operator">=</span> <span class="hljs-built_in">ImagePad</span><span class="hljs-punctuation">[</span><span class="hljs-built_in">Rasterize</span><span class="hljs-operator">@</span><span class="hljs-variable">plot</span><span class="hljs-operator">,</span> <span class="hljs-number">10</span><span class="hljs-operator">,</span> <span class="hljs-built_in">Padding</span> <span class="hljs-operator">-></span> <span class="hljs-built_in">White</span><span class="hljs-punctuation">]</span><span class="hljs-operator">;</span>
<span class="hljs-punctuation">{</span><span class="hljs-variable">ix</span><span class="hljs-operator">,</span> <span class="hljs-variable">iy</span><span class="hljs-punctuation">}</span> <span class="hljs-operator">=</span> <span class="hljs-built_in">Table</span><span class="hljs-punctuation">[</span>
<span class="hljs-built_in">RandomImage</span><span class="hljs-punctuation">[</span><span class="hljs-punctuation">{</span><span class="hljs-operator">-</span><span class="hljs-number">1</span><span class="hljs-operator">,</span> <span class="hljs-number">1</span><span class="hljs-punctuation">}</span><span class="hljs-operator">,</span> <span class="hljs-built_in">ImageDimensions</span><span class="hljs-operator">@</span><span class="hljs-variable">r</span><span class="hljs-punctuation">]</span> <span class="hljs-operator">~</span> <span class="hljs-built_in">ImageConvolve</span> <span class="hljs-operator">~</span> <span class="hljs-built_in">GaussianMatrix</span><span class="hljs-punctuation">[</span><span class="hljs-number">10</span><span class="hljs-punctuation">]</span><span class="hljs-operator">,</span>
<span class="hljs-punctuation">{</span><span class="hljs-number">2</span><span class="hljs-punctuation">}</span>
<span class="hljs-punctuation">]</span><span class="hljs-operator">;</span>
<span class="hljs-built_in">ImagePad</span><span class="hljs-punctuation">[</span>
<span class="hljs-built_in">ImageTransformation</span><span class="hljs-punctuation">[</span><span class="hljs-variable">r</span><span class="hljs-operator">,</span> <span class="hljs-type">#</span> <span class="hljs-operator">+</span> <span class="hljs-number">15</span> <span class="hljs-punctuation">{</span><span class="hljs-built_in">ImageValue</span><span class="hljs-punctuation">[</span><span class="hljs-variable">ix</span><span class="hljs-operator">,</span> <span class="hljs-type">#</span><span class="hljs-punctuation">]</span><span class="hljs-operator">,</span> <span class="hljs-built_in">ImageValue</span><span class="hljs-punctuation">[</span><span class="hljs-variable">iy</span><span class="hljs-operator">,</span> <span class="hljs-type">#</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">}</span> <span class="hljs-operator">&,</span> <span class="hljs-built_in">DataRange</span> <span class="hljs-operator">-></span> <span class="hljs-built_in">Full</span><span class="hljs-punctuation">]</span><span class="hljs-operator">,</span>
<span class="hljs-operator">-</span><span class="hljs-number">5</span>
<span class="hljs-punctuation">]</span>
<span class="hljs-punctuation">]</span><span class="hljs-operator">;</span>
<span class="hljs-variable">xkcdConvert</span><span class="hljs-punctuation">[</span><span class="hljs-type">plot_</span><span class="hljs-punctuation">]</span> <span class="hljs-operator">:=</span> <span class="hljs-variable">xkcdDistort</span><span class="hljs-punctuation">[</span><span class="hljs-variable">xkcdShow</span><span class="hljs-punctuation">[</span><span class="hljs-variable">plot</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">]</span><span class="hljs-operator">;</span>
<span class="hljs-variable">xkcdConvert</span><span class="hljs-punctuation">[</span><span class="hljs-built_in">Plot</span><span class="hljs-punctuation">[</span><span class="hljs-built_in">Sin</span><span class="hljs-punctuation">[</span><span class="hljs-variable">x</span><span class="hljs-punctuation">]</span><span class="hljs-operator">,</span> <span class="hljs-punctuation">{</span><span class="hljs-variable">x</span><span class="hljs-operator">,</span> <span class="hljs-number">0</span><span class="hljs-operator">,</span> <span class="hljs-number">4</span> <span class="hljs-built_in">Pi</span><span class="hljs-punctuation">}</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">]</span>
<span class="hljs-comment">(* Features *)</span>
<span class="hljs-comment">(* The Wolfram Language supports a variety of different number input forms *)</span>
<span class="hljs-comment">(* All numbers below are correct numbers! *)</span>
<span class="hljs-variable">numbers</span> <span class="hljs-operator">=</span> <span class="hljs-punctuation">{</span>
<span class="hljs-number">123</span><span class="hljs-operator">,</span>
<span class="hljs-number">123.123</span><span class="hljs-operator">,</span>
<span class="hljs-number">2^^101.101</span><span class="hljs-operator">,</span>
<span class="hljs-number">35^^WolframLanguage</span><span class="hljs-operator">,</span>
<span class="hljs-number">16^^dead.Beef</span><span class="hljs-operator">,</span>
<span class="hljs-number">123`</span><span class="hljs-operator">,</span>
<span class="hljs-number">1.381`</span><span class="hljs-operator">,</span>
<span class="hljs-number">16^^9fe.c3`7</span><span class="hljs-operator">,</span>
<span class="hljs-number">3.0`+7</span><span class="hljs-operator">,</span>
<span class="hljs-number">3`7</span><span class="hljs-operator">,</span>
<span class="hljs-number">3.000000000000000000000`7</span><span class="hljs-operator">,</span>
<span class="hljs-number">3.000000000000000000`-7</span><span class="hljs-operator">,</span>
<span class="hljs-number">3.98`5*^3</span><span class="hljs-operator">,</span>
<span class="hljs-number">16^^dead.beef``+4*^-3</span><span class="hljs-operator">,</span>
<span class="hljs-number">0.0000000001*^10</span><span class="hljs-operator">,</span>
<span class="hljs-number">35^^small*^-10</span><span class="hljs-operator">,</span>
<span class="hljs-number">10000000000*^-10</span>
<span class="hljs-punctuation">}</span>
<span class="hljs-comment">(* Named Characters are matched as normal symbols *)</span>
<span class="hljs-punctuation">{</span> <span class="hljs-variable">\[Gamma]</span><span class="hljs-operator">,</span> <span class="hljs-variable">\[CapitalEAcute]</span><span class="hljs-operator">,</span> <span class="hljs-variable">\[DoubleLeftRightArrow]</span><span class="hljs-operator">,</span> <span class="hljs-variable">\[FormalEpsilon]</span><span class="hljs-operator">,</span> <span class="hljs-variable">my</span><span class="hljs-variable">\[CapitalEAcute]</span><span class="hljs-variable">Variable</span> <span class="hljs-punctuation">}</span>
<span class="hljs-comment">(* Patterns and Slots *)</span>
<span class="hljs-variable">xkcdLabel</span><span class="hljs-punctuation">[</span><span class="hljs-punctuation">{</span><span class="hljs-type">str_String</span><span class="hljs-operator">,</span> <span class="hljs-punctuation">{</span><span class="hljs-type">x1_Integer</span><span class="hljs-operator">,</span> <span class="hljs-type">y1_Real</span><span class="hljs-punctuation">}</span><span class="hljs-operator">,</span> <span class="hljs-punctuation">{</span><span class="hljs-type">_Real</span><span class="hljs-operator">,</span> <span class="hljs-type">_List</span><span class="hljs-punctuation">}</span><span class="hljs-punctuation">}</span><span class="hljs-punctuation">]</span>
<span class="hljs-built_in">If</span><span class="hljs-punctuation">[</span><span class="hljs-type">#</span> <span class="hljs-operator">></span> <span class="hljs-number">5</span><span class="hljs-operator">,</span> <span class="hljs-type">#</span><span class="hljs-operator">,</span> <span class="hljs-type">##</span> <span class="hljs-operator">&</span><span class="hljs-punctuation">[</span><span class="hljs-punctuation">]</span><span class="hljs-punctuation">]</span> <span class="hljs-operator">&</span> <span class="hljs-operator">/@</span> <span class="hljs-built_in">Range</span><span class="hljs-punctuation">[</span><span class="hljs-number">10</span><span class="hljs-punctuation">]</span>
<span class="hljs-comment">(* Usage and other messages, In/Out *)</span>
<span class="hljs-built_in">In</span><span class="hljs-punctuation">[</span><span class="hljs-number">1</span><span class="hljs-punctuation">]</span><span class="hljs-operator">:=</span> <span class="hljs-variable">func</span><span class="hljs-string">::usage</span> <span class="hljs-operator">=</span> <span class="hljs-string">"A Usage message"</span>
<span class="hljs-built_in">Out</span><span class="hljs-punctuation">[</span><span class="hljs-number">1</span><span class="hljs-punctuation">]</span><span class="hljs-operator">=</span> <span class="hljs-string">"A Usage message"</span>
|