egison-3.7.14: sample/n-queen.egi
(define $eight-queen
(match-all {1 2 3 4 5 6 7 8} (multiset integer)
[<cons $a_1
<cons (& !,(- a_1 1) !,(+ a_1 1)
$a_2)
<cons (& !,(- a_1 2) !,(+ a_1 2)
!,(- a_2 1) !,(+ a_2 1)
$a_3)
<cons (& !,(- a_1 3) !,(+ a_1 3)
!,(- a_2 2) !,(+ a_2 2)
!,(- a_3 1) !,(+ a_3 1)
$a_4)
<cons (& !,(- a_1 4) !,(+ a_1 4)
!,(- a_2 3) !,(+ a_2 3)
!,(- a_3 2) !,(+ a_3 2)
!,(- a_4 1) !,(+ a_4 1)
$a_5)
<cons (& !,(- a_1 5) !,(+ a_1 5)
!,(- a_2 4) !,(+ a_2 4)
!,(- a_3 3) !,(+ a_3 3)
!,(- a_4 2) !,(+ a_4 2)
!,(- a_5 1) !,(+ a_5 1)
$a_6)
<cons (& !,(- a_1 6) !,(+ a_1 6)
!,(- a_2 5) !,(+ a_2 5)
!,(- a_3 4) !,(+ a_3 4)
!,(- a_4 3) !,(+ a_4 3)
!,(- a_5 2) !,(+ a_5 2)
!,(- a_6 1) !,(+ a_6 1)
$a_7)
<cons (& !,(- a_1 7) !,(+ a_1 7)
!,(- a_2 6) !,(+ a_2 6)
!,(- a_3 5) !,(+ a_3 5)
!,(- a_4 4) !,(+ a_4 4)
!,(- a_5 3) !,(+ a_5 3)
!,(- a_6 2) !,(+ a_6 2)
!,(- a_7 1) !,(+ a_7 1)
$a_8)
<nil>>>>>>>>>
a]))
;(test eight-queen)
(define $n-queen
(lambda [$n]
(match-all (between 1 n) (multiset integer)
[<cons $a_1
(loop $i [2 n]
<cons (loop $i1 [1 (- i 1)]
(& !,(- a_i1 (- i i1))
!,(+ a_i1 (- i i1))
...)
$a_i)
...>
<nil>)>
a])))
(test (n-queen 4))
(test (n-queen 5))
(test (n-queen 6))
(test (n-queen 7))
(test (n-queen 8))
(test (n-queen 9))
(test (n-queen 10))
(test (n-queen 11))