diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2016-09-17 15:01:51 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2016-09-17 15:01:51 -0700 |
commit | f344b250f6f062a1a1902bf69b23ebf9b565de0e (patch) | |
tree | 199bd32a9aee198d5028b1c21b83d2cf0944b2b6 /html/nqueens.mu.html | |
parent | 897ae8c1855f830d8819759ea327d147f28a09bf (diff) | |
download | mu-f344b250f6f062a1a1902bf69b23ebf9b565de0e.tar.gz |
3395
Diffstat (limited to 'html/nqueens.mu.html')
-rw-r--r-- | html/nqueens.mu.html | 47 |
1 files changed, 27 insertions, 20 deletions
diff --git a/html/nqueens.mu.html b/html/nqueens.mu.html index fcc9c791..b05a8618 100644 --- a/html/nqueens.mu.html +++ b/html/nqueens.mu.html @@ -33,17 +33,19 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color <pre id='vimCodeElement'> <span class="Comment"># <a href="http://rosettacode.org/wiki/N-queens_problem">http://rosettacode.org/wiki/N-queens_problem</a></span> <span class="Comment"># port of the Arc solution at <a href="http://arclanguage.org/item?id=19743">http://arclanguage.org/item?id=19743</a></span> +<span class="Comment"># run with tracing turned on:</span> +<span class="Comment"># ./mu --trace nqueens.mu</span> <span class="muData">container</span> square [ - rank:number - file:number + rank:num + file:num ] -<span class="muRecipe">def</span> nqueens n:number, queens:address:list:square<span class="muRecipe"> -> </span>result:number [ +<span class="muRecipe">def</span> nqueens n:num, queens:&:list:square<span class="muRecipe"> -> </span>result:num [ <span class="Constant">local-scope</span> <span class="Constant">load-ingredients</span> <span class="Comment"># if 'queens' is already long enough, print it and return</span> - added-so-far:number<span class="Special"> <- </span>length queens + added-so-far:num<span class="Special"> <- </span>length queens <span class="Delimiter">{</span> done?:boolean<span class="Special"> <- </span>greater-or-equal added-so-far, n <span class="muControl">break-unless</span> done? @@ -51,15 +53,15 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color <span class="muControl">return</span> <span class="Constant">1</span> <span class="Delimiter">}</span> <span class="Comment"># still work to do</span> - next-rank:number<span class="Special"> <- </span>copy <span class="Constant">0</span> + next-rank:num<span class="Special"> <- </span>copy <span class="Constant">0</span> <span class="Delimiter">{</span> <span class="muControl">break-unless</span> queens first:square<span class="Special"> <- </span>first queens - existing-rank:number<span class="Special"> <- </span>get first, <span class="Constant">rank:offset</span> + existing-rank:num<span class="Special"> <- </span>get first, <span class="Constant">rank:offset</span> next-rank<span class="Special"> <- </span>add existing-rank, <span class="Constant">1</span> <span class="Delimiter">}</span> result<span class="Special"> <- </span>copy <span class="Constant">0</span> - next-file:number<span class="Special"> <- </span>copy <span class="Constant">0</span> + next-file:num<span class="Special"> <- </span>copy <span class="Constant">0</span> <span class="Delimiter">{</span> done?:boolean<span class="Special"> <- </span>greater-or-equal next-file, n <span class="muControl">break-if</span> done? @@ -67,8 +69,8 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color <span class="Delimiter">{</span> curr-conflicts?:boolean<span class="Special"> <- </span>conflict? curr, queens <span class="muControl">break-if</span> curr-conflicts? - new-queens:address:list:square<span class="Special"> <- </span>push curr, queens - sub-result:number<span class="Special"> <- </span>nqueens n, new-queens + new-queens:&:list:square<span class="Special"> <- </span>push curr, queens + sub-result:num<span class="Special"> <- </span>nqueens n, new-queens result<span class="Special"> <- </span>add result, sub-result <span class="Delimiter">}</span> next-file<span class="Special"> <- </span>add next-file, <span class="Constant">1</span> @@ -76,7 +78,7 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color <span class="Delimiter">}</span> ] -<span class="muRecipe">def</span> conflict? curr:square, queens:address:list:square<span class="muRecipe"> -> </span>result:boolean [ +<span class="muRecipe">def</span> conflict? curr:square, queens:&:list:square<span class="muRecipe"> -> </span>result:boolean [ <span class="Constant">local-scope</span> <span class="Constant">load-ingredients</span> result1:boolean<span class="Special"> <- </span>conflicting-file? curr, queens @@ -85,14 +87,14 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color <span class="muControl">reply</span> result2 ] -<span class="muRecipe">def</span> conflicting-file? curr:square, queens:address:list:square<span class="muRecipe"> -> </span>result:boolean [ +<span class="muRecipe">def</span> conflicting-file? curr:square, queens:&:list:square<span class="muRecipe"> -> </span>result:boolean [ <span class="Constant">local-scope</span> <span class="Constant">load-ingredients</span> - curr-file:number<span class="Special"> <- </span>get curr, <span class="Constant">file:offset</span> + curr-file:num<span class="Special"> <- </span>get curr, <span class="Constant">file:offset</span> <span class="Delimiter">{</span> <span class="muControl">break-unless</span> queens q:square<span class="Special"> <- </span>first queens - qfile:number<span class="Special"> <- </span>get q, <span class="Constant">file:offset</span> + qfile:num<span class="Special"> <- </span>get q, <span class="Constant">file:offset</span> file-match?:boolean<span class="Special"> <- </span>equal curr-file, qfile <span class="muControl">reply-if</span> file-match?, <span class="Constant">1/conflict-found</span> queens<span class="Special"> <- </span>rest queens @@ -101,18 +103,18 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color <span class="muControl">reply</span> <span class="Constant">0/no-conflict-found</span> ] -<span class="muRecipe">def</span> conflicting-diagonal? curr:square, queens:address:list:square<span class="muRecipe"> -> </span>result:boolean [ +<span class="muRecipe">def</span> conflicting-diagonal? curr:square, queens:&:list:square<span class="muRecipe"> -> </span>result:boolean [ <span class="Constant">local-scope</span> <span class="Constant">load-ingredients</span> - curr-rank:number<span class="Special"> <- </span>get curr, <span class="Constant">rank:offset</span> - curr-file:number<span class="Special"> <- </span>get curr, <span class="Constant">file:offset</span> + curr-rank:num<span class="Special"> <- </span>get curr, <span class="Constant">rank:offset</span> + curr-file:num<span class="Special"> <- </span>get curr, <span class="Constant">file:offset</span> <span class="Delimiter">{</span> <span class="muControl">break-unless</span> queens q:square<span class="Special"> <- </span>first queens - qrank:number<span class="Special"> <- </span>get q, <span class="Constant">rank:offset</span> - qfile:number<span class="Special"> <- </span>get q, <span class="Constant">file:offset</span> - rank-delta:number<span class="Special"> <- </span>subtract qrank, curr-rank - file-delta:number<span class="Special"> <- </span>subtract qfile, curr-file + qrank:num<span class="Special"> <- </span>get q, <span class="Constant">rank:offset</span> + qfile:num<span class="Special"> <- </span>get q, <span class="Constant">file:offset</span> + rank-delta:num<span class="Special"> <- </span>subtract qrank, curr-rank + file-delta:num<span class="Special"> <- </span>subtract qfile, curr-file rank-delta<span class="Special"> <- </span>abs rank-delta file-delta<span class="Special"> <- </span>abs file-delta diagonal-match?:boolean<span class="Special"> <- </span>equal rank-delta, file-delta @@ -122,6 +124,11 @@ body { font-size: 12pt; font-family: monospace; color: #eeeeee; background-color <span class="Delimiter">}</span> <span class="muControl">reply</span> <span class="Constant">0/no-conflict-found</span> ] + +<span class="muRecipe">def</span> main [ + nqueens <span class="Constant">4</span> + $dump-trace <span class="Constant">[app]</span> +] </pre> </body> </html> |