#### Aroj

1. Aroperacioj
2. Genera programpeco en Ada

##### Aroperacioj

Estu VAR A,B,C: ARO EL entjera; n,x: entjera; tiam oni povas fari jenan tabelon:

Nocio | Paskale | en C vakuo | `A := []` | `a = 0`
unuelementa aro | `A := [x + 5]` | `a = (1 >> x+5)`
arkonstruilo | `B := [1..n, 15, x-4]` |
membrorilato | `x+5 EN A` | `a & (1 ›› x+5)`
rigora subaro | `A < B` | `(a!=b) && (a&b)==a`
nerigora subaro | `A <= C` | `(a & b) == a`
rigora superaro | `B > A` | `(a!=b) && (a&b)==b`
superaro | `C >= A` | `(a & b) == b`
komunaĵo | `C := A * B` | `c = a & b`
kunaĵo | `C := A + B` | `c = a | b`
ardiferenco | `C := A - B` | `c = a & ~(a & b)`
simetria diferenco |  | `c = a ^ b`

##### Genera programpeco en Ada

    GENERIC --komenciĝas la interfaca peco
       TYPE universo IS (<>);--formala parametro: numerebla tipo

    PACKAGE aroj IS -- sekvas specifoj de la eksportataj objektoj

       TYPE ara IS PRIVATE; -- la uzulo ne atentu la realigon
       vakuo: CONSTANT ara; -- eksporto de kostanto artipa

       FUNCTION anas(x: universo; a: ara) RETURN BOOLEAN; -- x EN a
       FUNCTION "<="(a,b: ara) RETURN BOOLEAN; -- a partas en b
       FUNCTION "<"(a,b: ara) RETURN BOOLEAN;  -- a rigore partas en b
       FUNCTION "+"(a,b: ara) RETURN ara; -- kunaĵo de 2 aroj
       FUNCTION "-"(a,b: ara) RETURN ara; -- komplemento
       FUNCTION "+"(a: ara; x: universo) RETURN ara; -- anigo, arkremento
       FUNCTION "-"(a: ara; x: universo) RETURN ara; -- eksigu anon
       FUNCTION "*"(a,b: ara) RETURN ara; -- komunaĵo de 2 aroj

       ---- kaj tiel plu ...

    PRIVATE        -- sufloro por la tradukilo: --

       TYPE ara IS ARRAY (universo) OF BOOLEAN;  -- bitvektoro
       vakuo: CONSTANT ara := ara'(OTHERS =› FALSE);  -- plena nulo

    END aroj; ----------- finiĝis la interfaco

    PACKAGE aroj IS -- makroa skemo pri realigo de la funkcioj:

       FUNCTION anas(x: universo; a: ara) RETURN BOOLEAN IS
          BEGIN RETURN a(x);
          END anas;

       FUNCTION "+"(a,b: ara) RETURN ara IS
          BEGIN RETURN a OR b;
          END "+";

       FUNCTION "+"(a: ara; x: universo) RETURN ara IS
             lab: ara := a; -- loka labora variablo, komencvalorizo
          BEGIN lab(x):=TRUE; RETURN lab;
          END "+";

       FUNCTION "-"(a,b: ara) RETURN ara IS
          BEGIN RETURN a AND (NOT b);
          END "-";

       FUNCTION "-"(a: ara; x: universo) RETURN ara IS
             lab: ara := a;
          BEGIN a(x):=FALSE; RETURN lab;
          END "-";

       FUNCTION "*"(a,b: ara) RETURN ara IS
          BEGIN RETURN a AND b;
          END "*";

       FUNCTION "<="(a,b: ara) RETURN BOLEAN IS
          BEGIN RETURN (a AND b)=a;      -- a<=b SSE a+b=a
          END "<=";

       FUNCTION "<"(a,b: ara) RETURN BOOLEAN IS
             lab: ara := (a AND b);      --  a<b SSE (a+b=a)&a≠b):
          BEGIN RETURN (lab = a) AND (lab /= b);
          END "<";

       ---- kaj tiel plu ...

    END aroj;   --  finiĝis la realigo