Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 501
Sophie Alpert Avatar asked Dec 04 '25 17:12

Sophie Alpert


1 Answers

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.

like image 161
dreeves Avatar answered Dec 06 '25 10:12

dreeves



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!