Reputation: 143124
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
?
Upvotes: 3
Views: 451
Reputation: 26932
The equivalent is Fold. I think this is more typically called "reduce" -- that's the Python name anyway.
Translating your example:
Fold[#1*#2&, 1, list]
That #1*#2&
is a binary lambda function that multiplies its arguments.
In this case you could just use Times
instead:
Fold[Times, 1, list]
Or of course just apply Times
to the list:
Apply[Times, list]
Or, for short:
Times @@ list
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.
Upvotes: 7