about summary refs log tree commit diff stats
path: root/html/088file.mu.html
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2016-09-24 20:07:42 -0700
committerKartik K. Agaram <vc@akkartik.com>2016-09-24 20:07:42 -0700
commit2d05f43cf15554adaea725d7a4547b6030458de8 (patch)
tree4c6b8dc4f01a46690c6feb36d2acd87d4c06d924 /html/088file.mu.html
parentae08e30e8d57a1f1bbc0ba8a346a0aa6bcb512e9 (diff)
downloadmu-2d05f43cf15554adaea725d7a4547b6030458de8.tar.gz
3414
Diffstat (limited to 'html/088file.mu.html')
0 files changed, 0 insertions, 0 deletions
#n106'>106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Mu - nqueens.mu</title>
<meta name="Generator" content="Vim/7.4">
<meta name="plugin-version" content="vim7.4_v2">
<meta name="syntax" content="none">
<meta name="settings" content="number_lines,use_css,pre_wrap,no_foldcolumn,expand_tabs,line_ids,prevent_copy=">
<meta name="colorscheme" content="minimal">
<style type="text/css">
<!--
pre { white-space: pre-wrap; font-family: monospace; color: #aaaaaa; background-color: #080808; }
body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color: #080808; }
a { color:#eeeeee; text-decoration: none; }
a:hover { text-decoration: underline; }
* { font-size: 12pt; font-size: 1em; }
.muRecipe { color: #ff8700; }
.Special { color: #c00000; }
.Conceal { color: #4e4e4e; }
.Delimiter { color: #800080; }
.Comment { color: #9090ff; }
.Comment a { color:#0000ee; text-decoration:underline; }
.Constant { color: #00a0a0; }
.LineNr { color: #444444; }
.muControl { color: #c0a020; }
.muData { color: #ffff00; }
-->
</style>

<script type='text/javascript'>
<!--

/* function to open any folds containing a jumped-to line before jumping to it */
function JumpToLine()
{
  var lineNum;
  lineNum = window.location.hash;
  lineNum = lineNum.substr(1); /* strip off '#' */

  if (lineNum.indexOf('L') == -1) {
    lineNum = 'L'+lineNum;
  }
  lineElem = document.getElementById(lineNum);
  /* Always jump to new location even if the line was hidden inside a fold, or
   * we corrected the raw number to a line ID.
   */
  if (lineElem) {
    lineElem.scrollIntoView(true);
  }
  return true;
}
if ('onhashchange' in window) {
  window.onhashchange = JumpToLine;
}

-->
</script>
</head>
<body onload='JumpToLine();'>
<pre id='vimCodeElement'>
<span id="L1" class="LineNr"> 1 </span><span class="Comment"># <a href="http://rosettacode.org/wiki/N-queens_problem">http://rosettacode.org/wiki/N-queens_problem</a></span>
<span id="L2" class="LineNr"> 2 </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 id="L3" class="LineNr"> 3 </span><span class="Comment"># run with tracing turned on:</span>
<span id="L4" class="LineNr"> 4 </span><span class="Comment">#   ./mu --trace nqueens.mu</span>
<span id="L5" class="LineNr"> 5 </span>
<span id="L6" class="LineNr"> 6 </span><span class="muData">container</span> <a href='nqueens.mu.html#L6'>square</a> [
<span id="L7" class="LineNr"> 7 </span>  rank:num
<span id="L8" class="LineNr"> 8 </span>  file:num
<span id="L9" class="LineNr"> 9 </span>]
<span id="L10" class="LineNr">10 </span>
<span id="L11" class="LineNr">11 </span><span class="muRecipe">def</span> <a href='nqueens.mu.html#L11'>nqueens</a> n:num, queens:&amp;:<a href='064list.mu.html#L6'>list</a>:<a href='nqueens.mu.html#L6'>square</a><span class="muRecipe"> -&gt; </span>result:num, queens:&amp;:<a href='064list.mu.html#L6'>list</a>:<a href='nqueens.mu.html#L6'>square</a> [
<span id="L12" class="LineNr">12 </span>  <span class="Constant">local-scope</span>
<span id="L13" class="LineNr">13 </span>  <span class="Constant">load-ingredients</span>
<span id="L14" class="LineNr">14 </span>  <span class="Comment"># if 'queens' is already long enough, print it and return</span>
<span id="L15" class="LineNr">15 </span>  added-so-far:num <span class="Special">&lt;-</span> length queens
<span id="L16" class="LineNr">16 </span>  <span class="Delimiter">{</span>
<span id="L17" class="LineNr">17 </span>  <span class="Conceal">¦</span> done?:bool <span class="Special">&lt;-</span> greater-or-equal added-so-far, n
<span id="L18" class="LineNr">18 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> done?
<span id="L19" class="LineNr">19 </span>  <span class="Conceal">¦</span> stash queens
<span id="L20" class="LineNr">20 </span>  <span class="Conceal">¦</span> <span class="muControl">return</span><span class="Constant"> 1</span>
<span id="L21" class="LineNr">21 </span>  <span class="Delimiter">}</span>
<span id="L22" class="LineNr">22 </span>  <span class="Comment"># still work to do</span>
<span id="L23" class="LineNr">23 </span>  next-rank:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
<span id="L24" class="LineNr">24 </span>  <span class="Delimiter">{</span>
<span id="L25" class="LineNr">25 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> queens
<span id="L26" class="LineNr">26 </span>  <span class="Conceal">¦</span> first:<a href='nqueens.mu.html#L6'>square</a> <span class="Special">&lt;-</span> first queens
<span id="L27" class="LineNr">27 </span>  <span class="Conceal">¦</span> existing-rank:num <span class="Special">&lt;-</span> get first, <span class="Constant">rank:offset</span>
<span id="L28" class="LineNr">28 </span>  <span class="Conceal">¦</span> next-rank <span class="Special">&lt;-</span> add existing-rank,<span class="Constant"> 1</span>
<span id="L29" class="LineNr">29 </span>  <span class="Delimiter">}</span>
<span id="L30" class="LineNr">30 </span>  result <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
<span id="L31" class="LineNr">31 </span>  next-file:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
<span id="L32" class="LineNr">32 </span>  <span class="Delimiter">{</span>
<span id="L33" class="LineNr">33 </span>  <span class="Conceal">¦</span> done?:bool <span class="Special">&lt;-</span> greater-or-equal next-file, n
<span id="L34" class="LineNr">34 </span>  <span class="Conceal">¦</span> <span class="muControl">break-if</span> done?
<span id="L35" class="LineNr">35 </span>  <span class="Conceal">¦</span> curr:<a href='nqueens.mu.html#L6'>square</a> <span class="Special">&lt;-</span> merge next-rank, next-file
<span id="L36" class="LineNr">36 </span>  <span class="Conceal">¦</span> <span class="Delimiter">{</span>
<span id="L37" class="LineNr">37 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> curr-conflicts?:bool <span class="Special">&lt;-</span> <a href='nqueens.mu.html#L49'>conflict?</a> curr, queens
<span id="L38" class="LineNr">38 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> <span class="muControl">break-if</span> curr-conflicts?
<span id="L39" class="LineNr">39 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> queens:&amp;:<a href='064list.mu.html#L6'>list</a>:<a href='nqueens.mu.html#L6'>square</a> <span class="Special">&lt;-</span> push curr, queens
<span id="L40" class="LineNr">40 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> sub-result:num <span class="Special">&lt;-</span> <a href='nqueens.mu.html#L11'>nqueens</a> n, queens
<span id="L41" class="LineNr">41 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> result <span class="Special">&lt;-</span> add result, sub-result
<span id="L42" class="LineNr">42 </span>  <span class="Conceal">¦</span> <span class="Conceal">¦</span> queens <span class="Special">&lt;-</span> <a href='064list.mu.html#L25'>rest</a> queens
<span id="L43" class="LineNr">43 </span>  <span class="Conceal">¦</span> <span class="Delimiter">}</span>
<span id="L44" class="LineNr">44 </span>  <span class="Conceal">¦</span> next-file <span class="Special">&lt;-</span> add next-file,<span class="Constant"> 1</span>
<span id="L45" class="LineNr">45 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span>
<span id="L46" class="LineNr">46 </span>  <span class="Delimiter">}</span>
<span id="L47" class="LineNr">47 </span>]
<span id="L48" class="LineNr">48 </span>
<span id="L49" class="LineNr">49 </span><span class="muRecipe">def</span> <a href='nqueens.mu.html#L49'>conflict?</a> curr:<a href='nqueens.mu.html#L6'>square</a>, queens:&amp;:<a href='064list.mu.html#L6'>list</a>:<a href='nqueens.mu.html#L6'>square</a><span class="muRecipe"> -&gt; </span>result:bool [
<span id="L50" class="LineNr">50 </span>  <span class="Constant">local-scope</span>
<span id="L51" class="LineNr">51 </span>  <span class="Constant">load-ingredients</span>
<span id="L52" class="LineNr">52 </span>  result1:bool <span class="Special">&lt;-</span> <a href='nqueens.mu.html#L58'>conflicting-file?</a> curr, queens
<span id="L53" class="LineNr">53 </span>  <span class="muControl">return-if</span> result1, result1
<span id="L54" class="LineNr">54 </span>  result2:bool <span class="Special">&lt;-</span> <a href='nqueens.mu.html#L74'>conflicting-diagonal?</a> curr, queens
<span id="L55" class="LineNr">55 </span>  <span class="muControl">return</span> result2
<span id="L56" class="LineNr">56 </span>]
<span id="L57" class="LineNr">57 </span>
<span id="L58" class="LineNr">58 </span><span class="muRecipe">def</span> <a href='nqueens.mu.html#L58'>conflicting-file?</a> curr:<a href='nqueens.mu.html#L6'>square</a>, queens:&amp;:<a href='064list.mu.html#L6'>list</a>:<a href='nqueens.mu.html#L6'>square</a><span class="muRecipe"> -&gt; </span>result:bool [
<span id="L59" class="LineNr">59 </span>  <span class="Constant">local-scope</span>
<span id="L60" class="LineNr">60 </span>  <span class="Constant">load-ingredients</span>
<span id="L61" class="LineNr">61 </span>  curr-file:num <span class="Special">&lt;-</span> get curr, <span class="Constant">file:offset</span>
<span id="L62" class="LineNr">62 </span>  <span class="Delimiter">{</span>
<span id="L63" class="LineNr">63 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> queens
<span id="L64" class="LineNr">64 </span>  <span class="Conceal">¦</span> q:<a href='nqueens.mu.html#L6'>square</a> <span class="Special">&lt;-</span> first queens
<span id="L65" class="LineNr">65 </span>  <span class="Conceal">¦</span> qfile:num <span class="Special">&lt;-</span> get q, <span class="Constant">file:offset</span>
<span id="L66" class="LineNr">66 </span>  <span class="Conceal">¦</span> file-match?:bool <span class="Special">&lt;-</span> equal curr-file, qfile
<span id="L67" class="LineNr">67 </span>  <span class="Conceal">¦</span> <span class="muControl">return-if</span> file-match?, <span class="Constant">1/conflict-found</span>
<span id="L68" class="LineNr">68 </span>  <span class="Conceal">¦</span> queens <span class="Special">&lt;-</span> <a href='064list.mu.html#L25'>rest</a> queens
<span id="L69" class="LineNr">69 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span>
<span id="L70" class="LineNr">70 </span>  <span class="Delimiter">}</span>
<span id="L71" class="LineNr">71 </span>  <span class="muControl">return</span> <span class="Constant">0/no-conflict-found</span>
<span id="L72" class="LineNr">72 </span>]
<span id="L73" class="LineNr">73 </span>
<span id="L74" class="LineNr">74 </span><span class="muRecipe">def</span> <a href='nqueens.mu.html#L74'>conflicting-diagonal?</a> curr:<a href='nqueens.mu.html#L6'>square</a>, queens:&amp;:<a href='064list.mu.html#L6'>list</a>:<a href='nqueens.mu.html#L6'>square</a><span class="muRecipe"> -&gt; </span>result:bool [
<span id="L75" class="LineNr">75 </span>  <span class="Constant">local-scope</span>
<span id="L76" class="LineNr">76 </span>  <span class="Constant">load-ingredients</span>
<span id="L77" class="LineNr">77 </span>  curr-rank:num <span class="Special">&lt;-</span> get curr, <span class="Constant">rank:offset</span>
<span id="L78" class="LineNr">78 </span>  curr-file:num <span class="Special">&lt;-</span> get curr, <span class="Constant">file:offset</span>
<span id="L79" class="LineNr">79 </span>  <span class="Delimiter">{</span>
<span id="L80" class="LineNr">80 </span>  <span class="Conceal">¦</span> <span class="muControl">break-unless</span> queens
<span id="L81" class="LineNr">81 </span>  <span class="Conceal">¦</span> q:<a href='nqueens.mu.html#L6'>square</a> <span class="Special">&lt;-</span> first queens
<span id="L82" class="LineNr">82 </span>  <span class="Conceal">¦</span> qrank:num <span class="Special">&lt;-</span> get q, <span class="Constant">rank:offset</span>
<span id="L83" class="LineNr">83 </span>  <span class="Conceal">¦</span> qfile:num <span class="Special">&lt;-</span> get q, <span class="Constant">file:offset</span>
<span id="L84" class="LineNr">84 </span>  <span class="Conceal">¦</span> rank-delta:num <span class="Special">&lt;-</span> subtract qrank, curr-rank
<span id="L85" class="LineNr">85 </span>  <span class="Conceal">¦</span> file-delta:num <span class="Special">&lt;-</span> subtract qfile, curr-file
<span id="L86" class="LineNr">86 </span>  <span class="Conceal">¦</span> rank-delta <span class="Special">&lt;-</span> <a href='070table.mu.html#L103'>abs</a> rank-delta
<span id="L87" class="LineNr">87 </span>  <span class="Conceal">¦</span> file-delta <span class="Special">&lt;-</span> <a href='070table.mu.html#L103'>abs</a> file-delta
<span id="L88" class="LineNr">88 </span>  <span class="Conceal">¦</span> diagonal-match?:bool <span class="Special">&lt;-</span> equal rank-delta, file-delta
<span id="L89" class="LineNr">89 </span>  <span class="Conceal">¦</span> <span class="muControl">return-if</span> diagonal-match?, <span class="Constant">1/conflict-found</span>
<span id="L90" class="LineNr">90 </span>  <span class="Conceal">¦</span> queens <span class="Special">&lt;-</span> <a href='064list.mu.html#L25'>rest</a> queens
<span id="L91" class="LineNr">91 </span>  <span class="Conceal">¦</span> <span class="muControl">loop</span>
<span id="L92" class="LineNr">92 </span>  <span class="Delimiter">}</span>
<span id="L93" class="LineNr">93 </span>  <span class="muControl">return</span> <span class="Constant">0/no-conflict-found</span>
<span id="L94" class="LineNr">94 </span>]
<span id="L95" class="LineNr">95 </span>
<span id="L96" class="LineNr">96 </span><span class="muRecipe">def</span> <a href='nqueens.mu.html#L96'>main</a> [
<span id="L97" class="LineNr">97 </span>  <a href='nqueens.mu.html#L11'>nqueens</a><span class="Constant"> 4</span>
<span id="L98" class="LineNr">98 </span>  $dump-trace <span class="Constant">[app]</span>
<span id="L99" class="LineNr">99 </span>]
</pre>
</body>
</html>
<!-- vim: set foldmethod=manual : -->