Concurrent Clean : 8queen
そういえば、8queenって、まともに解いたことがなかったのではないかと思った。
で、解いてみた。
Start = show $ queens 8 show (n,as) = (show as,as) where show [] = "\n" show [a:ar] = "\n" +++ fill n a +++ show ar where fill n 0 = "*" +++ fill (n-1) -1 fill 0 _ = "" fill n a = " " +++ fill (n-1) (a-1) queens n = (n, hd $ next n []) where alive _ [] _ = True alive d [q:qr] p | p == q || abs(p-q) == d = False = alive (d+1) qr p next 0 qs = [qs] next m qs = foldr (++) [] $ map (next (m-1)) $ map (\x = [x:qs]) $ filter (alive 1 qs) [0..n-1]
途中、mとnを取り違えてはまった。