*$ENTRY Go {
*         = <A (  1 '/' 3 ) '-' 1 '/' 7 >;
*         }
*A  {
*       (e1) e2 = <Prout <Q_add (e1) e2 >>
*                 <Prout <Q_sub (e1) e2 >>
*                 <Prout <Q_mul (e1) e2 >>
*                 <Prout <Q_div (e1) e2 >>
*}

*                        Сложение
$ENTRY Q_add  {
      (0) 0  = ;
      (e1) 0 = e1;
      (0) e2 = e2;
      (e1)  = e1;
      () e2 = e2;
      (e1 '/' e2) e3 '/' e4 = <Q_st <Add (<Mul (e1) e4>)
                                          <Mul (e2) e3> >
                                      '/' <Mul (e2) e4> >;
      (e1 '/' e2) e3        = <Q_add (e1 '/' e2) e3 '/' 1 >;
      (e1)        e3 '/' e4 = <Q_add (e1 '/' 1 ) e3 '/' e4 >;
      (e1) e2 = <Q_st <Add (e1) e2>>;
              }
*                         Вычитание
$ENTRY Q_Sub  {
      (e1)        = e1;
      (e1) 0      = e1;
      (e1) '-' e2 = <Q_add (e1) e2>;
      (e1) e2     = <Q_add (e1) '-' e2 >;
              }
*                         Умножение
$ENTRY Q_mul  {
     (e1) 0 = 0;
     (0) e2 = 0;

     (e1)    = 0;
     ()   e2 = 0;
     (e1 '/' e2) e3 '/' e4 = <Q_st <Mul (e1) e3> '/' <Mul (e2) e4>>;
     (e1 '/' e2) e3        = <Q_mul (e1 '/' e2) e3 '/' 1 >;
     (e1) e3 '/' e4        = <Q_mul (e1 '/' 1 ) e3 '/' e4>;
     (e1) e2               = <Q_st <Mul (e1) e2> >;
              }
*                         Деление
$ENTRY Q_div  {
      (0)  e2 = ;
      ()   e2 = ;
      (e1) e2 = <Q_mul (e1) <Q_div1 e2>>;
              }

Q_div1  {
      '-'e1     = '-' <Q_div1 e1>;
      e1 '/' e2 = e2 '/' e1;
      e1        =  1 '/' e1;
        }
*                  Приведение рационального числа к стандартной форме
Q_st  {
                    = ;
       0            = ;
      '-' 0         = ;
       0 '/' e2     = ;
       '-' 0 '/' e2 = ;
       '-'e1        = '-' <Q_st e1>;
       e1 '/' e2 , <Nod (e1) (e2)>: e3 = <Q_st1 (<Div (e1) e3>)
                                                 <Div (e2) e3> > ;
       e1 = e1;
      }

Nod  {
        (e1) (0 0) = e1 ;
        (e1) (0 )  = e1 ;
        (e1) (e2)  = <Nod (e2) (<Mod (e1) e2>) >;
     }

Q_st1  {
     (e1) 1  = e1;
     (e1) e2 = e1 '/' e2;
      }
*