;;; NQUEENS -- Compute number of solutions to 8-queens problem. (import (rnrs base) (rnrs io simple)) (define trace? #f) (define (nqueens n) (define (iota1 n) (let loop ((i n) (l '())) (if (= i 0) l (loop (- i 1) (cons i l))))) (define (my-try x y z) (if (null? x) (if (null? y) (begin (if trace? (begin (write z) (newline))) 1) 0) (+ (if (ok? (car x) 1 z) (my-try (append (cdr x) y) '() (cons (car x) z)) 0) (my-try (cdr x) (cons (car x) y) z)))) (define (ok? row dist placed) (if (null? placed) #t (and (not (= (car placed) (+ row dist))) (not (= (car placed) (- row dist))) (ok? row (+ dist 1) (cdr placed))))) (my-try (iota1 n) '() '())) (define (main) (let* ((count (read)) (input1 (read)) (output (read)) (s2 (number->string count)) (s1 (number->string input1)) (name "nqueens")) (run-r6rs-benchmark (string-append name ":" s1 ":" s2) count (lambda () (nqueens (hide count input1))) (lambda (result) (= result output)))))