3
$\begingroup$

I'd like to know how, given symbols f and g, and a list {a,b,c,...}, to produce the expression:

f[f[f[g,a],b],c]

I can get the result if I do:

Apply[f,{{{g,a},b},c},{0,2}]

but then how do I manipulate the list {a,b,c} into {{{g,a},b},c}? Is there a better way of doing it?

$\endgroup$
1
  • $\begingroup$ Possible duplicates?: (7924), (25474). (Do we really have so simpler questions dealing with Fold?) $\endgroup$ – Mr.Wizard Jan 29 '16 at 22:12
6
$\begingroup$
lst = {a, b, c, d};
Fold[f, g, {a, b, c, d}]
(* f[f[f[f[g, a], b], c], d] *)
$\endgroup$
1
  • $\begingroup$ Fold. Thank you! $\endgroup$ – Zorawar Dec 8 '15 at 3:34
5
$\begingroup$

Don't do this at home; use bbgodfrey's solution. :-)

However, Fold is also the answer to your question on how to transform {a, b, c, d, e} into {{{{{g, a}, b}, c}, d}, e}. But you don't have follow with a fancy application of Apply; a simple substitution is all you need.

data = {a, b, c, d, e};
tmp = Fold[List, g, data]

{{{{{g, a}, b}, c}, d}, e}

tmp /. List -> f

f[f[f[f[f[g, a], b], c], d], e]

$\endgroup$
1
  • $\begingroup$ Oh nice. Thanks for the info! $\endgroup$ – Zorawar Dec 8 '15 at 16:20

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.