diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2016-09-17 12:55:10 -0700 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2016-09-17 12:55:10 -0700 |
commit | 760f683f2755038a1b0c16522f5001b889096aa5 (patch) | |
tree | e07afd384d45be93d81fb4c1788b332fe05799a0 /nqueens.mu | |
parent | 80df524b566a708551f752ce8b82e21738591651 (diff) | |
download | mu-760f683f2755038a1b0c16522f5001b889096aa5.tar.gz |
3389
Diffstat (limited to 'nqueens.mu')
-rw-r--r-- | nqueens.mu | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/nqueens.mu b/nqueens.mu index f23d7799..94631e09 100644 --- a/nqueens.mu +++ b/nqueens.mu @@ -1,12 +1,14 @@ # http://rosettacode.org/wiki/N-queens_problem # port of the Arc solution at http://arclanguage.org/item?id=19743 +# run with tracing turned on: +# ./mu --trace nqueens.mu container square [ rank:num file:num ] -def nqueens n:num, queens:address:list:square -> result:num [ +def nqueens n:num, queens:&:list:square -> result:num [ local-scope load-ingredients # if 'queens' is already long enough, print it and return @@ -34,7 +36,7 @@ def nqueens n:num, queens:address:list:square -> result:num [ { curr-conflicts?:boolean <- conflict? curr, queens break-if curr-conflicts? - new-queens:address:list:square <- push curr, queens + new-queens:&:list:square <- push curr, queens sub-result:num <- nqueens n, new-queens result <- add result, sub-result } @@ -43,7 +45,7 @@ def nqueens n:num, queens:address:list:square -> result:num [ } ] -def conflict? curr:square, queens:address:list:square -> result:boolean [ +def conflict? curr:square, queens:&:list:square -> result:boolean [ local-scope load-ingredients result1:boolean <- conflicting-file? curr, queens @@ -52,7 +54,7 @@ def conflict? curr:square, queens:address:list:square -> result:boolean [ reply result2 ] -def conflicting-file? curr:square, queens:address:list:square -> result:boolean [ +def conflicting-file? curr:square, queens:&:list:square -> result:boolean [ local-scope load-ingredients curr-file:num <- get curr, file:offset @@ -68,7 +70,7 @@ def conflicting-file? curr:square, queens:address:list:square -> result:boolean reply 0/no-conflict-found ] -def conflicting-diagonal? curr:square, queens:address:list:square -> result:boolean [ +def conflicting-diagonal? curr:square, queens:&:list:square -> result:boolean [ local-scope load-ingredients curr-rank:num <- get curr, rank:offset @@ -89,3 +91,8 @@ def conflicting-diagonal? curr:square, queens:address:list:square -> result:bool } reply 0/no-conflict-found ] + +def main [ + nqueens 4 + $dump-trace [app] +] |