Is there a Mathematica function like inject in Ruby? For example, if I want the product of the elements in a list, in Ruby I can write:
list.inject(1) { |prod,el| prod * el }
I found I can just use Product in Mathematica:
Apply[Product, list]
However, this isn’t general enough for me (like, if I don’t just want the product or sum of the numbers). What’s the closest equivalent to inject?
The equivalent is Fold.
I think this is more typically called “reduce” — that’s the Python name anyway.
Translating your example:
That
#1*#2&is a binary lambda function that multiplies its arguments.In this case you could just use
Timesinstead:Or of course just apply
Timesto the list:Or, for short:
NOTE: The version in your question where you use Product instead of Times will not work.
Product is for something else, namely the analog of Sum.