我刚开始学习编写Haskell代码,所以如果我提出了一个愚蠢的问题,请原谅。我正在尝试通过使用[]
单子来重新解决八皇后问题。下面是代码:
import Control.Monad
addqueen :: [Int] -> [[Int]]
addqueen xs = [ x:xs | x <- [1,2..8],
not $ x `elem` xs
|| (any (\ (index,q) -> abs (x-q) == index) $ zip [1..] xs) ]
当我尝试
[[]] >>= replicateM 8 addqueen
它无法工作,但会产生以下错误:
Couldn't match expected type `t0 -> t1' with actual type `[[a0]]'
The first argument of ($) takes one argument,
but its type `[[a0]]' has none
In the expression: [[]] >>= replicateM 8 $ addqueen
In an equation for `it': it = [[]] >>= replicateM 8 $ addqueen
那么我该如何实现我想要做的事情呢?
iterate (>>= addqueen) [[]] !! 8
。 - Sjoerd Visscherfoldl (>>=) [[]] $ replicate 8 addqueen
- Sassa NF