Sophie Alpert
Sophie Alpert

Reputation: 143124

Mathematica equivalent of Ruby's inject

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

Answers (1)

dreeves
dreeves

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

Related Questions