diff options
-rw-r--r-- | html/063array.mu.html | 155 | ||||
-rw-r--r-- | html/064list.mu.html | 28 |
2 files changed, 176 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> diff --git a/html/064list.mu.html b/html/064list.mu.html index b9e0e18d..236bf533 100644 --- a/html/064list.mu.html +++ b/html/064list.mu.html @@ -292,6 +292,34 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color ] ] +<span class="Comment"># reverse the elements of a list</span> +<span class="Comment"># (contributed by Caleb Couch)</span> +<span class="muRecipe">def</span> reverse list:&:list:_elem temp:&:list:_elem<span class="muRecipe"> -> </span>result:&:list:_elem [ + <span class="Constant">local-scope</span> + <span class="Constant">load-ingredients</span> + <span class="muControl">reply-unless</span> list, temp + object:_elem<span class="Special"> <- </span>first, list + list<span class="Special"> <- </span>rest list + temp<span class="Special"> <- </span>push object, temp + result<span class="Special"> <- </span>reverse list, temp +] + +<span class="muScenario">scenario</span> reverse-list [ + run [ + <span class="Constant">local-scope</span> + list:&:list:number<span class="Special"> <- </span>push <span class="Constant">1</span>, <span class="Constant">0</span> + list<span class="Special"> <- </span>push <span class="Constant">2</span>, list + list<span class="Special"> <- </span>push <span class="Constant">3</span>, list + stash <span class="Constant">[list:]</span>, list + list<span class="Special"> <- </span>reverse list, <span class="Constant">0</span> + stash <span class="Constant">[reversed:]</span>, list + ] + trace-should-contain [ + app: list: <span class="Constant">3</span><span class="muRecipe"> -> </span><span class="Constant">2</span><span class="muRecipe"> -> </span><span class="Constant">1</span> + app: reversed: <span class="Constant">1</span><span class="muRecipe"> -> </span><span class="Constant">2</span><span class="muRecipe"> -> </span><span class="Constant">3</span> + ] +] + <span class="muRecipe">def</span> to-text in:&:list:_elem<span class="muRecipe"> -> </span>result:text [ <span class="Constant">local-scope</span> <span class="Constant">load-ingredients</span> |