- fix hk-eval-let: multi-clause where/let now uses hk-bind-decls! grouping (enables go 0 / go k pattern) - add concatMap/concat/abs/negate to Prelude (list comprehension support) - cache init env in hk-env0 (eval-expr-source 5x faster)
19 lines
564 B
Haskell
19 lines
564 B
Haskell
-- nqueens.hs — n-queens backtracking solver.
|
|
--
|
|
-- `queens n` returns all solutions as lists of column positions,
|
|
-- one per row. Each call to `go k` extends all partial `(k-1)`-row
|
|
-- solutions by one safe queen, using a list comprehension whose guard
|
|
-- checks the new queen against all already-placed queens.
|
|
|
|
queens n = go n
|
|
where
|
|
go 0 = [[]]
|
|
go k = [q:qs | qs <- go (k - 1), q <- [1..n], safe q qs]
|
|
|
|
safe q qs = check q qs 1
|
|
|
|
check q [] _ = True
|
|
check q (c:cs) d = q /= c && abs (q - c) /= d && check q cs (d + 1)
|
|
|
|
result = length (queens 8)
|