egison-3.3.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))