Difference between revisions of "SCL Examples"

From Developer Documents
Jump to navigation Jump to search
 
Line 11: Line 11:
 
       lq = [l!i - (m-i) | i <- [0..m-1]]
 
       lq = [l!i - (m-i) | i <- [0..m-1]]
 
       uq = [l!i + (m-i) | i <- [0..m-1]]
 
       uq = [l!i + (m-i) | i <- [0..m-1]]
> expandSolution l =
+
> expandSolution l = do
 
       x <- possibleNextPositions l
 
       x <- possibleNextPositions l
 
       return (l + [x])
 
       return (l + [x])
Line 21: Line 21:
 
> repeatString k (s :: String) = sum [s | x <- [1..k]]
 
> repeatString k (s :: String) = sum [s | x <- [1..k]]
 
> rowText k = repeatString k "." + "X" + repeatString (n-k-1) "."
 
> rowText k = repeatString k "." + "X" + repeatString (n-k-1) "."
> printSolution (l :: [Integer]) =  
+
> printSolution (l :: [Integer]) = do
 
       printString (repeatString n "-")
 
       printString (repeatString n "-")
 
       mapM (printString . rowText) l
 
       mapM (printString . rowText) l
 
> mapM printSolution solutions
 
> mapM printSolution solutions
 
</pre>
 
</pre>

Latest revision as of 14:34, 22 August 2012

Eight queens puzzle

Copy the following commands to the SCL console:

> n = 8
> allPositions = [0..n-1]
> possibleNextPositions l = allPositions \\ (l + lq + uq)
    where
      m = length l
      lq = [l!i - (m-i) | i <- [0..m-1]]
      uq = [l!i + (m-i) | i <- [0..m-1]]
> expandSolution l = do
      x <- possibleNextPositions l
      return (l + [x])
> solve k cur = if k == n
                then return cur
                else expandSolution cur >>= solve (k+1)
> solutions = solve 0 []
> length solutions
> repeatString k (s :: String) = sum [s | x <- [1..k]]
> rowText k = repeatString k "." + "X" + repeatString (n-k-1) "."
> printSolution (l :: [Integer]) = do
      printString (repeatString n "-")
      mapM (printString . rowText) l
> mapM printSolution solutions