Exercise 4.44. Exercise 2.42 described the ``eight-queens puzzle'' of placing queens on a chessboard so that no two attack each other. Write a nondeterministic program to solve this puzzle. ———————————————————————————————————————————————————————————————————————— (define (eight-queens) (define (add-queens position n) (if (= n 0) position (let ((new-queen (list n (amb 1 2 3 4 5 6 7 8)))) (require (all (map (lambda (queen) (not-checking new-queen queen)) position))) (add-queens (cons new-queen position) (- n 1))))) (add-queens '() 8)) (define (all items) (cond ((null? items) #t) ((false? (car items)) #f) (else (all (cdr items))))) (define (not-checking q1 q2) (not (checking q1 q2))) (define (checking q1 q2) (or (= (car q1) (car q2)) // same column (= (cadr q1) (cadr q2)) // same row (= (abs (- (car q1) (car q2))) (abs (- (cadr q1) (cadr q2)))))) // same diagonal