// vim: set et ts=2 sw=2 : $use Access; $use Arithm; $use Convert; $use Compare; $func QSimplify s s = t; $func QConvert t = s s; QAdd tX tY, :: sX1 sX2, :: sY1 sY2, > >; QSub tX tY, :: sX1 sX2, :: sY1 sY2, > >; QMul tX tY, :: sX1 sX2, :: sY1 sY2, >; QDiv tX tY, :: sX1 sX2, :: sY1 sY2, { : '<', ; sY1 sY2; } :: sY1 sY2, >; QCompare tX tY, :: sX1 sX2, :: sY1 sY2, ) ()>; QToInt tX, > :: sQ sR, sQ; QToString sN tX, :: s1 s2, :: sQ sR, { :'<', { sQ : 0, '-'; /*empty*/;} :: eSing, eSing sQ ; sQ sR; } :: eOut sR, sN sR /*empty*/ $iter { s2> :: sQ sR, sR eOut2 sQ; } :: sN sR eOut2, sN : 0 = 'T' eOut2 $iter { eOut2 : eOut3 0, 'T' eOut3; 'F' eOut2; } :: sP eOut2, sP : 'F' = { eOut2 : /*empty*/, eOut; eOut '.' eOut2; } :: eOut, ; QFromString \{ eIn1 '.' eIn2 = {eIn1 : /*empty*/, '0'; eIn1;} :: eIn1, 1 $iter :: sN sM, sN : 0 = \{ eIn1 : e '-' e = sM>>; sM>>; }; eIn1 = ( 1); }; QSimplify s1 s2, :: s3, (
); QConvert { (s1 s2) = s1 s2; s1 = s1 1; };