RosettaCodeData/Task/Display-a-linear-combination/Refal/display-a-linear-combination.refal
2026-04-30 12:34:36 -04:00

56 lines
960 B
Text

$ENTRY Go {
= <Each Show <Tests>>;
};
Tests {
= ((1) (2) (3))
((0) (1) (2) (3))
((1) (0) (3) (4))
((1) (2) (0))
((0) (0) (0))
((0))
((1) (1) (1))
(('-'1) ('-'1) ('-'1))
(('-'1) ('-'2) (0) (3))
(('-'1));
};
Each {
s.F = ;
s.F (e.X) e.Y = <Mu s.F e.X> <Each s.F e.Y>;
};
Show {
e.X = <Prout <LinearCombination e.X>>;
};
LinearCombination {
e.X, <LC1 T 1 e.X>: {
= '0';
e.Y = e.Y;
};
};
LC1 {
s.F s.N = ;
s.F s.N (e.X) e.Y, <LCTerm s.F s.N e.X>: {
= <LC1 s.F <Add 1 s.N> e.Y>;
e.Z = e.Z <LC1 F <Add 1 s.N> e.Y>;
};
};
LCTerm {
s.F s.N 0 = ;
s.F s.N e.M = <LCMult s.F e.M> '(' <Symb s.N> ')';
};
LCMult {
T '-' 1 = '-e';
T '-' s.M = '-' <Symb s.M> '*e';
T 1 = 'e';
T s.M = <Symb s.M> '*e';
F '-' 1 = ' - e';
F '-' s.M = ' - ' <Symb s.M> '*e';
F 1 = ' + e';
F s.M = ' + ' <Symb s.M> '*e';
};