RosettaCodeData/Task/Arithmetic-derivative/Refal/arithmetic-derivative.refal

33 lines
1.0 KiB
Plaintext

$ENTRY Go {
= <Table 10 7 <Each (Lagarias) <Iota ('-'99) 100>>>
};
Lagarias {
'-' e.N = '-' <Lagarias e.N>;
0 = 0;
1 = 0;
e.N, <Fac e.N>: {
e.N = 1;
e.F, <Div (e.N) e.F>: e.R =
<Add <Mul (e.R) <Lagarias e.F>>
<Mul (e.F) <Lagarias e.R>>>;
};
};
Fac {
(e.F) e.N, <Mul (e.N) e.N>: e.N2,
<Compare (e.F) e.N2>: '+' = e.N;
(e.F) e.N, <Mod (e.N) e.F>: 0 = e.F;
(e.F) e.N = <Fac (<Add (1) e.F>) e.N>;
e.N = <Fac (2) e.N>;
};
Table { s.C s.W e.L = <Each (Prout) <Each (Line s.W) <Group s.C e.L>>>; };
Line { s.W e.X = <Join <Each (Fmt s.W) e.X>>; };
Fmt { s.W e.X, <Last s.W <Rep s.W ' '> <Symb e.X>>: (e.Z) e.C = e.C; };
Rep { 0 s.C = ; s.N s.C = s.C <Rep <Sub s.N 1> s.C>; };
Join { = ; (e.X) e.Y = e.X <Join e.Y>; };
Group { s.N = ; s.N e.X, <First s.N e.X>: (e.G) e.R = (e.G) <Group s.N e.R>; };
Each { (e.F) = ; (e.F) (e.X) e.XS = (<Mu e.F e.X>) <Each (e.F) e.XS>; };
Iota { (e.E) e.E = (e.E); (e.S) e.E = (e.S) <Iota (<Add (1) e.S>) e.E>; };