I am very confused about how can i use currying to write a tail recursive function for summing factorials within a certain bound or summing the bounds i.e. given [1,5] i should be getting 1!+2!+3!+4!+5! and for summing bounds 1+2+3+4+5. How can i construct two elegant functions using currying.

My code currently looks like this:

    factorial[n_] := (loopfact[n, acc_] := If[n == 0, acc, loopfact[n - 1, acc*n]];
    Return@loopfact[n, 1]);

    sum[a_, b_, acc_] := Block[{x, ac}, x = a; ac = acc;
    loop[x_, ac_] := If[x > b, ac, loop[x + 1, ac + factorial[x]]];
    loop[x, ac]]

    sum[0, 5, 0] (* using the function above *)
    (* 154 *)

    sum[a_, b_, acc_] := Module[{x, ac}, x = a; ac = acc;
    loop[x_, ac_] := If[x > b, ac, loop[x + 1, ac + # &@x]];
    loop[x, ac]]

    sum[0, 50, 0] (* using the second function definition *)
    (* 1275 *)

Also could someone kindly explain to me how currying works in Mathematica. Thanks !