[BACK]Return to permutations.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Root_Counts / Symmetry

Annotation of OpenXM_contrib/PHC/Ada/Root_Counts/Symmetry/permutations.adb, Revision 1.1.1.1

1.1       maekawa     1: package body Permutations is
                      2:
                      3:   function Is_Permutation ( p : Permutation ) return boolean is
                      4:   begin
                      5:     for i in p'range loop
                      6:       if ((p(i) = 0) or else (p(i) < -p'last) or else (p(i) > p'last))
                      7:        then return false;
                      8:        else for j in p'first..(i-1) loop
                      9:               if ((p(i) = p(j)) or else (p(i) = -p(j)))
                     10:                then return false;
                     11:               end if;
                     12:             end loop;
                     13:       end if;
                     14:     end loop;
                     15:     return true;
                     16:   end Is_Permutation;
                     17:
                     18:   function Equal ( p1,p2 : Permutation ) return boolean is
                     19:   begin
                     20:     if (p1'first /= p2'first) or else (p1'last /= p2'last)
                     21:      then return false;
                     22:      else for i in p1'range loop
                     23:             if p1(i) /= p2(i)
                     24:              then return false;
                     25:             end if;
                     26:           end loop;
                     27:           return true;
                     28:     end if;
                     29:   end Equal;
                     30:
                     31:   function "*" ( p1,p2 : Permutation ) return Permutation is
                     32:
                     33:     r : Permutation(p1'range);
                     34:
                     35:   begin
                     36:     for i in r'range loop
                     37:       if p2(i) >= 0
                     38:        then r(i) := p1(p2(i));
                     39:        else r(i) := -p1(-p2(i));
                     40:       end if;
                     41:     end loop;
                     42:     return r;
                     43:   end "*";
                     44:
                     45:   function inv ( p : Permutation ) return Permutation is
                     46:
                     47:     r : Permutation(p'range);
                     48:
                     49:   begin
                     50:     for i in r'range loop
                     51:       if p(i) >= 0
                     52:        then r(p(i)) := i;
                     53:        else r(-p(i)) := -i;
                     54:       end if;
                     55:     end loop;
                     56:     return r;
                     57:   end inv;
                     58:
                     59: end Permutations;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>