[BACK]Return to ts_brackets.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Schubert

Annotation of OpenXM_contrib/PHC/Ada/Schubert/ts_brackets.adb, Revision 1.1.1.1

1.1       maekawa     1: with text_io,integer_io;           use text_io,integer_io;
                      2: with Brackets,Brackets_io;         use Brackets,Brackets_io;
                      3:
                      4: procedure ts_brackets is
                      5:
                      6: -- DESCRIPTION :
                      7: --   Enumerates all brackets in the Pluecker embedding.
                      8:
                      9:   procedure Enumerate ( n,d,k,start : in natural; accu : in out Bracket;
                     10:                         cnt : in out natural ) is
                     11:
                     12:   -- DESCRIPTION :
                     13:   --   Lexicographic enumeration of all brackets.
                     14:
                     15:   begin
                     16:     if k > d
                     17:      then -- put(accu); new_line;
                     18:           cnt := cnt + 1;
                     19:      else for l in start..n loop
                     20:             accu(k) := l;
                     21:             Enumerate(n,d,k+1,l+1,accu,cnt);
                     22:           end loop;
                     23:     end if;
                     24:   end Enumerate;
                     25:
                     26:   procedure Enumerate2 ( n,d,k,start : in natural; b,accu : in out Bracket;
                     27:                          cntstd,cntnonstd : in out natural ) is
                     28:
                     29:   -- DESCRIPTION :
                     30:   --   Lexicographic enumeration of all brackets, with b < accu and with
                     31:   --   a test whether the pair b*accu forms a Standard monomial.
                     32:
                     33:     s : natural;
                     34:
                     35:   begin
                     36:     if k > d
                     37:      then if b < accu
                     38:            then -- put(b); put(accu);
                     39:                 s := Brackets.Is_Standard(b,accu);
                     40:                 if s = 0
                     41:                  then -- put_line(" is a Standard monomial.");
                     42:                       cntstd := cntstd + 1;
                     43:                  else -- put(" is not a Standard monomial with s = ");
                     44:                       -- put(s,1); new_line;
                     45:                       cntnonstd := cntnonstd + 1;
                     46:                 end if;
                     47:           end if;
                     48:      else for l in start..n loop
                     49:             accu(k) := l;
                     50:             Enumerate2(n,d,k+1,l+1,b,accu,cntstd,cntnonstd);
                     51:           end loop;
                     52:     end if;
                     53:   end Enumerate2;
                     54:
                     55:   procedure Enumerate1 ( n,d,k,start : natural; acc1,acc2 : in out Bracket;
                     56:                          cntstd,cntnonstd : in out natural ) is
                     57:
                     58:   -- DESCRIPTION :
                     59:   --   Lexicographic enumeration of all brackets, with acc1 < acc2 and with
                     60:   --   a test whether the pair acc1*acc2 forms a Standard monomial.
                     61:   --   Counts the standard and nonstandard monomials.
                     62:
                     63:   begin
                     64:     if k > d
                     65:      then Enumerate2(n,d,1,acc1(1),acc1,acc2,cntstd,cntnonstd);
                     66:      else for l in start..n loop
                     67:             acc1(k) := l;
                     68:             Enumerate1(n,d,k+1,l+1,acc1,acc2,cntstd,cntnonstd);
                     69:           end loop;
                     70:     end if;
                     71:   end Enumerate1;
                     72:
                     73:   procedure Enumerate_Pairs ( n,d : in natural ) is
                     74:
                     75:   -- DESCRIPTION :
                     76:   --   Enumerates all pairs (b1,b2), with b1 < b2 and checks whether
                     77:   --   the corresponding bracket monomial b1*b2 is standard or not.
                     78:
                     79:     b1,b2 : Bracket(1..d);
                     80:     cntstd,cntnonstd : natural := 0;
                     81:
                     82:   begin
                     83:     Enumerate1(n,d,1,1,b1,b2,cntstd,cntnonstd);
                     84:     put("#Standard bi-monomials    : "); put(cntstd,1);    new_line;
                     85:     put("#nonStandard bi-monomials : "); put(cntnonstd,1); new_line;
                     86:   end Enumerate_Pairs;
                     87:
                     88:   procedure Read_Bracket ( b : in out Bracket ) is
                     89:
                     90:     d : constant natural := b'last;
                     91:     sig : integer;
                     92:
                     93:   begin
                     94:     put("Give "); put(d,1); put(" row indices : "); get(b,sig);
                     95:     put("The sorted bracket : ");
                     96:     if sig > 0
                     97:      then put("+");
                     98:      else put("-");
                     99:     end if;
                    100:     put(b);
                    101:     if Is_Zero(b)
                    102:      then put_line(" is zero.");
                    103:      else put_line(" is different from zero.");
                    104:     end if;
                    105:   end Read_Bracket;
                    106:
                    107:   procedure Test_Sort ( n,d : in natural ) is
                    108:
                    109:     b,bb : Bracket(1..d);
                    110:     s : natural;
                    111:     ans : character;
                    112:
                    113:   begin
                    114:     loop
                    115:       Read_Bracket(b);
                    116:       put("Do you want more tests ? (y/n) "); get(ans);
                    117:       exit when ans /= 'y';
                    118:       Read_Bracket(bb);
                    119:       if Is_Equal(b,bb)
                    120:        then put_line("Both brackets are equal.");
                    121:       end if;
                    122:       if b < bb
                    123:        then put(b); put(" < "); put(bb);
                    124:             s := Brackets.Is_Standard(b,bb);
                    125:             put(" and "); put(b); put(bb);
                    126:        else put(b); put(" >= "); put(bb);
                    127:             s := Brackets.Is_Standard(bb,b);
                    128:             put(" and "); put(bb); put(b);
                    129:       end if;
                    130:       if s = 0
                    131:        then put_line(" is a Standard monomial.");
                    132:        else put(" is not a Standard monomial, with s = "); put(s,1); new_line;
                    133:       end if;
                    134:       put("Do you want more tests ? (y/n) "); get(ans);
                    135:       exit when ans /= 'y';
                    136:     end loop;
                    137:   end Test_Sort;
                    138:
                    139:   procedure Main is
                    140:
                    141:     n,d : natural;
                    142:     ans : character;
                    143:
                    144:   begin
                    145:     loop
                    146:       put("Give the number of entries in bracket : "); get(d);
                    147:       put("Give the number of elements to choose from : "); get(n);
                    148:       declare
                    149:         acc : Bracket(1..d);
                    150:         cnt : natural := 0;
                    151:       begin
                    152:         Enumerate(n,d,1,1,acc,cnt);
                    153:         put("#brackets : "); put(cnt,1); new_line;
                    154:       end;
                    155:       Enumerate_Pairs(n,d);
                    156:       put("Do you want more tests ? (y/n) "); get(ans);
                    157:       exit when ans /= 'y';
                    158:     end loop;
                    159:     Test_Sort(n,d);
                    160:   end Main;
                    161:
                    162: begin
                    163:   Main;
                    164: end ts_brackets;

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