packages feed

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))