diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2016-09-27 09:24:36 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2016-09-27 09:24:36 -0700 |
commit | 5cf4bb1d95e22a46ded620e6d40cdbb14bfb1a28 (patch) | |
tree | 8861878ddbb40b0ad7b5b647291a7d4aae4386d1 /html/063array.mu.html | |
parent | e5f9c6aed046e278f3072fcfe94485ad314d58c2 (diff) | |
download | mu-5cf4bb1d95e22a46ded620e6d40cdbb14bfb1a28.tar.gz |
3420
Diffstat (limited to 'html/063array.mu.html')
-rw-r--r-- | html/063array.mu.html | 155 |
1 files changed, 148 insertions, 7 deletions
diff --git a/html/063array.mu.html b/html/063array.mu.html index 9b32f88d..48d3301a 100644 --- a/html/063array.mu.html +++ b/html/063array.mu.html @@ -34,8 +34,8 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color <span class="muScenario">scenario</span> array-from-args [ run [ <span class="Constant">local-scope</span> - x:text<span class="Special"> <- </span>new-array <span class="Constant">0</span>, <span class="Constant">1</span>, <span class="Constant">2</span> - <span class="Constant">10</span>:@:char/<span class="Special">raw <- </span>copy *x + x:&:@:num<span class="Special"> <- </span>new-array <span class="Constant">0</span>, <span class="Constant">1</span>, <span class="Constant">2</span> + <span class="Constant">10</span>:@:num/<span class="Special">raw <- </span>copy *x ] memory-should-contain [ <span class="Constant">10</span><span class="Special"> <- </span><span class="Constant">3</span> <span class="Comment"># array length</span> @@ -45,25 +45,25 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color ] ] -<span class="Comment"># create an array out of a list of scalar args</span> -<span class="muRecipe">def</span> new-array<span class="muRecipe"> -> </span>result:text [ +<span class="Comment"># create an array out of a list of args</span> +<span class="muRecipe">def</span> new-array<span class="muRecipe"> -> </span>result:&:@:_elem [ <span class="Constant">local-scope</span> capacity:num<span class="Special"> <- </span>copy <span class="Constant">0</span> <span class="Delimiter">{</span> <span class="Comment"># while read curr-value</span> - curr-value:char, exists?:bool<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + curr-value:_elem, exists?:bool<span class="Special"> <- </span><span class="Constant">next-ingredient</span> <span class="muControl">break-unless</span> exists? capacity<span class="Special"> <- </span>add capacity, <span class="Constant">1</span> <span class="muControl">loop</span> <span class="Delimiter">}</span> - result<span class="Special"> <- </span>new <span class="Constant">character:type</span>, capacity + result<span class="Special"> <- </span>new <span class="Constant">_elem:type</span>, capacity <span class="Constant">rewind-ingredients</span> i:num<span class="Special"> <- </span>copy <span class="Constant">0</span> <span class="Delimiter">{</span> <span class="Comment"># while read curr-value</span> done?:bool<span class="Special"> <- </span>greater-or-equal i, capacity <span class="muControl">break-if</span> done? - curr-value:char, exists?:bool<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + curr-value:_elem, exists?:bool<span class="Special"> <- </span><span class="Constant">next-ingredient</span> assert exists?, <span class="Constant">[error in rewinding ingredients to new-array]</span> *result<span class="Special"> <- </span>put-index *result, i, curr-value i<span class="Special"> <- </span>add i, <span class="Constant">1</span> @@ -71,6 +71,147 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color <span class="Delimiter">}</span> <span class="muControl">return</span> result ] + +<span class="Comment"># fill an existing array with a set of numbers</span> +<span class="Comment"># (contributed by Caleb Couch)</span> +<span class="muRecipe">recipe</span> fill array:&:@:num<span class="muRecipe"> -> </span>array:&:@:num [ + <span class="Constant">local-scope</span> + <span class="Constant">load-ingredients</span> + loopn:num<span class="Special"> <- </span>copy <span class="Constant">0</span> + length:num<span class="Special"> <- </span>length *array + <span class="Delimiter">{</span> + length?:bool<span class="Special"> <- </span>equal loopn, length + <span class="muControl">break-if</span> length? + object:num, arg-received?:bool<span class="Special"> <- </span><span class="Constant">next-ingredient</span> + <span class="muControl">break-unless</span> arg-received? + *array<span class="Special"> <- </span>put-index *array, loopn, object + loopn<span class="Special"> <- </span>add loopn, <span class="Constant">1</span> + <span class="muControl">loop</span> + <span class="Delimiter">}</span> +] + +<span class="muScenario">scenario</span> fill-on-an-empty-array [ + run [ + <span class="Constant">local-scope</span> + array:&:@:num<span class="Special"> <- </span>new <span class="Constant">number:type</span>, <span class="Constant">3</span> + array<span class="Special"> <- </span>fill array, <span class="Constant">1</span> <span class="Constant">2</span> <span class="Constant">3</span> + <span class="Constant">10</span>:@:num/<span class="Special">raw <- </span>copy *array + ] + memory-should-contain [ + <span class="Constant">10</span><span class="Special"> <- </span><span class="Constant">3</span> + <span class="Constant">11</span><span class="Special"> <- </span><span class="Constant">1</span> + <span class="Constant">12</span><span class="Special"> <- </span><span class="Constant">2</span> + <span class="Constant">13</span><span class="Special"> <- </span><span class="Constant">3</span> + ] +] + +<span class="muScenario">scenario</span> fill-overwrites-existing-values [ + run [ + <span class="Constant">local-scope</span> + array:&:@:num<span class="Special"> <- </span>new <span class="Constant">number:type</span>, <span class="Constant">3</span> + *array<span class="Special"> <- </span>put-index *array, <span class="Constant">0</span>, <span class="Constant">4</span> + array<span class="Special"> <- </span>fill array, <span class="Constant">1</span> <span class="Constant">2</span> <span class="Constant">3</span> + <span class="Constant">10</span>:@:num/<span class="Special">raw <- </span>copy *array + ] + memory-should-contain [ + <span class="Constant">10</span><span class="Special"> <- </span><span class="Constant">3</span> + <span class="Constant">11</span><span class="Special"> <- </span><span class="Constant">1</span> + <span class="Constant">12</span><span class="Special"> <- </span><span class="Constant">2</span> + <span class="Constant">13</span><span class="Special"> <- </span><span class="Constant">3</span> + ] +] + +<span class="muScenario">scenario</span> fill-exits-gracefully-when-given-no-ingredients [ + run [ + <span class="Constant">local-scope</span> + array:&:@:num<span class="Special"> <- </span>new <span class="Constant">number:type</span>, <span class="Constant">3</span> + array<span class="Special"> <- </span>fill array + <span class="Constant">10</span>:@:num/<span class="Special">raw <- </span>copy *array + ] + memory-should-contain [ + <span class="Constant">10</span><span class="Special"> <- </span><span class="Constant">3</span> + <span class="Constant">11</span><span class="Special"> <- </span><span class="Constant">0</span> + <span class="Constant">12</span><span class="Special"> <- </span><span class="Constant">0</span> + <span class="Constant">13</span><span class="Special"> <- </span><span class="Constant">0</span> + ] +] + +<span class="Comment"># swap two elements of an array</span> +<span class="Comment"># (contributed by Caleb Couch)</span> +<span class="muRecipe">recipe</span> swap array:&:@:num, index1:num, index2:num<span class="muRecipe"> -> </span>array:&:@:num [ + <span class="Constant">local-scope</span> + <span class="Constant">load-ingredients</span> + object1:num<span class="Special"> <- </span>index *array, index1 + object2:num<span class="Special"> <- </span>index *array, index2 + *array<span class="Special"> <- </span>put-index *array, index1, object2 + *array<span class="Special"> <- </span>put-index *array, index2, object1 +] + +<span class="muScenario">scenario</span> swap-works [ + run [ + <span class="Constant">local-scope</span> + array:&:@:num<span class="Special"> <- </span>new <span class="Constant">number:type</span>, <span class="Constant">4</span> + array<span class="Special"> <- </span>fill array, <span class="Constant">4</span> <span class="Constant">3</span> <span class="Constant">2</span> <span class="Constant">1</span> + array<span class="Special"> <- </span>swap array, <span class="Constant">0</span>, <span class="Constant">2</span> + <span class="Constant">10</span>:num/<span class="Special">raw <- </span>index *array, <span class="Constant">0</span> + <span class="Constant">11</span>:num/<span class="Special">raw <- </span>index *array, <span class="Constant">2</span> + ] + memory-should-contain [ + <span class="Constant">10</span><span class="Special"> <- </span><span class="Constant">2</span> + <span class="Constant">11</span><span class="Special"> <- </span><span class="Constant">4</span> + ] +] + +<span class="Comment"># reverse the elements of an array</span> +<span class="Comment"># (contributed by Caleb Couch)</span> +<span class="muRecipe">def</span> reverse array:&:@:_elem<span class="muRecipe"> -> </span>array:&:@:_elem [ + <span class="Constant">local-scope</span> + <span class="Constant">load-ingredients</span> + start:num<span class="Special"> <- </span>copy <span class="Constant">0</span> + length:num<span class="Special"> <- </span>length *array + end:num<span class="Special"> <- </span>subtract length, <span class="Constant">1</span> + <span class="Delimiter">{</span> + done?:bool<span class="Special"> <- </span>greater-or-equal start, end + <span class="muControl">break-if</span> done? + array<span class="Special"> <- </span>swap array, start, end + start<span class="Special"> <- </span>add start, <span class="Constant">1</span> + end<span class="Special"> <- </span>subtract end, <span class="Constant">1</span> + <span class="muControl">loop</span> + <span class="Delimiter">}</span> +] + +<span class="muScenario">scenario</span> reverse-array-odd-length [ + run [ + <span class="Constant">local-scope</span> + array:&:@:num<span class="Special"> <- </span>new <span class="Constant">number:type</span>, <span class="Constant">3</span> + array<span class="Special"> <- </span>fill array, <span class="Constant">3</span> <span class="Constant">2</span> <span class="Constant">1</span> + array<span class="Special"> <- </span>reverse array + <span class="Constant">10</span>:@:num/<span class="Special">raw <- </span>copy *array + ] + memory-should-contain [ + <span class="Constant">10</span><span class="Special"> <- </span><span class="Constant">3</span> + <span class="Constant">11</span><span class="Special"> <- </span><span class="Constant">1</span> + <span class="Constant">12</span><span class="Special"> <- </span><span class="Constant">2</span> + <span class="Constant">13</span><span class="Special"> <- </span><span class="Constant">3</span> + ] +] + +<span class="muScenario">scenario</span> reverse-array-even-length [ + run [ + <span class="Constant">local-scope</span> + array:&:@:num<span class="Special"> <- </span>new <span class="Constant">number:type</span>, <span class="Constant">4</span> + array<span class="Special"> <- </span>fill array, <span class="Constant">4</span> <span class="Constant">3</span> <span class="Constant">2</span> <span class="Constant">1</span> + array<span class="Special"> <- </span>reverse array + <span class="Constant">10</span>:@:num/<span class="Special">raw <- </span>copy *array + ] + memory-should-contain [ + <span class="Constant">10</span><span class="Special"> <- </span><span class="Constant">4</span> + <span class="Constant">11</span><span class="Special"> <- </span><span class="Constant">1</span> + <span class="Constant">12</span><span class="Special"> <- </span><span class="Constant">2</span> + <span class="Constant">13</span><span class="Special"> <- </span><span class="Constant">3</span> + <span class="Constant">14</span><span class="Special"> <- </span><span class="Constant">4</span> + ] +] </pre> </body> </html> |