Advertisement
Guest User

Untitled

a guest
Apr 17th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 2.05 KB | None | 0 0
  1. (define (solve-8-queens)
  2.  
  3.   (define (num-range start end)
  4.   (map num (range start (+ end 1))))
  5.  
  6.   (define (1-to-8o sequence x)
  7.     (fresh (head tail)
  8.          (== sequence (cons head tail))
  9.          (conde [(== x head)]
  10.                 [(1-to-8o tail x)])))
  11.  
  12.   (define (safeo sequence x index result)
  13.     (conde [(== sequence empty) (== result #t)]
  14.            [(fresh (head tail head-x x-head index2)
  15.                    (== sequence (cons head tail))
  16.                    (conde [(== x head) (== result #f)]
  17.                           (conde
  18.                             [(<=o x head) (minuso head x head-x) (== head-x index) (== result #f)]
  19.                             [(<=o head x) (minuso x head x-head) (== x-head index) (== result #f)])
  20.                           [(minuso index (num 1) index2) (safeo tail x index2 result)]))]))
  21.  
  22.   (pretty-print (run* (q) (fresh (a b c d e f g h)
  23.                                  [1-to-8o (num-range 1 8) a]
  24.                                  
  25.                                  [1-to-8o (num-range 1 8) b]
  26.                                  [safeo (list a) b (num 1) #t]
  27.                                  
  28.                                  [1-to-8o (num-range 1 8) c]
  29.                                  [safeo (list a b) c (num 2) #t]
  30.  
  31.                                  [1-to-8o (num-range 1 8) d]
  32.                                  [safeo (list a b c) d (num 3) #t]
  33.  
  34.                                  [1-to-8o (num-range 1 8) e]
  35.                                  [safeo (list a b c d) e (num 4) #t]
  36.  
  37.                                  [1-to-8o (num-range 1 8) f]
  38.                                  [safeo (list a b c d e) f (num 5) #t]
  39.  
  40.                                  [1-to-8o (num-range 1 8) g]
  41.                                  [safeo (list a b c d e f) g (num 6) #t]
  42.  
  43.                                  [1-to-8o (num-range 1 8) h]
  44.                                  [safeo (list a b c d e f g) h (num 7) #t]
  45.                                  
  46.                                  [== (list a b c d e f g h) q]))))
  47.  
  48. (solve-8-queens)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement