egison-3.6.0: 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))