shen/release/benchmarks/N_queens.shen in shen-ruby-0.10.0 vs shen/release/benchmarks/N_queens.shen in shen-ruby-0.11.0
- old
+ new
@@ -1,45 +1,45 @@
-(define n-queens
- {number --> symbol}
- N -> (do (map (/. X (output "~A~%" X)) (n-queens-loop N (initialise N))) ok))
-
-(define initialise
- {number --> (list number)}
- 0 -> []
- N -> [1 | (initialise (- N 1))])
-
-(define n-queens-loop
- {number --> (list number) --> [(list number)]}
- N Config -> [] where (all_Ns? N Config)
- N Config -> [Config | (n-queens-loop N (next_n N Config))]
- where (and (ok_row? Config) (ok_diag? Config))
- N Config -> (n-queens-loop N (next_n N Config)))
-
-(define all_Ns?
- {number --> (list number) --> boolean}
- _ [] -> true
- N [N | Ns] -> (all_Ns? N Ns)
- _ _ -> false)
-
-(define next_n
- {number --> (list number) --> (list number)}
- N [N | Ns] -> [1 | (next_n N Ns)]
- _ [N | Ns] -> [(+ 1 N) | Ns])
-
-(define ok_row?
- {(list number) --> boolean}
- [] -> true
- [N | Ns] -> false where (element? N Ns)
- [_ | Ns] -> (ok_row? Ns))
-
-(define ok_diag?
- {(list number) --> boolean}
- [] -> true
- [N | Ns] -> (and (ok_diag_N? (+ N 1) (- N 1) Ns)
- (ok_diag? Ns)))
-
-(define ok_diag_N?
- {number --> number --> (list number) --> boolean}
- _ _ [] -> true
- Up Down [Up | _] -> false
- Up Down [Down | _] -> false
- Up Down [_ | Ns] -> (ok_diag_N? (+ 1 Up) (- Down 1) Ns))
+(define n-queens
+ {number --> symbol}
+ N -> (do (map (/. X (output "~A~%" X)) (n-queens-loop N (initialise N))) ok))
+
+(define initialise
+ {number --> (list number)}
+ 0 -> []
+ N -> [1 | (initialise (- N 1))])
+
+(define n-queens-loop
+ {number --> (list number) --> [(list number)]}
+ N Config -> [] where (all_Ns? N Config)
+ N Config -> [Config | (n-queens-loop N (next_n N Config))]
+ where (and (ok_row? Config) (ok_diag? Config))
+ N Config -> (n-queens-loop N (next_n N Config)))
+
+(define all_Ns?
+ {number --> (list number) --> boolean}
+ _ [] -> true
+ N [N | Ns] -> (all_Ns? N Ns)
+ _ _ -> false)
+
+(define next_n
+ {number --> (list number) --> (list number)}
+ N [N | Ns] -> [1 | (next_n N Ns)]
+ _ [N | Ns] -> [(+ 1 N) | Ns])
+
+(define ok_row?
+ {(list number) --> boolean}
+ [] -> true
+ [N | Ns] -> false where (element? N Ns)
+ [_ | Ns] -> (ok_row? Ns))
+
+(define ok_diag?
+ {(list number) --> boolean}
+ [] -> true
+ [N | Ns] -> (and (ok_diag_N? (+ N 1) (- N 1) Ns)
+ (ok_diag? Ns)))
+
+(define ok_diag_N?
+ {number --> number --> (list number) --> boolean}
+ _ _ [] -> true
+ Up Down [Up | _] -> false
+ Up Down [Down | _] -> false
+ Up Down [_ | Ns] -> (ok_diag_N? (+ 1 Up) (- Down 1) Ns))