Математический эквивалент инъекции Руби - PullRequest
3 голосов
/ 03 июня 2010

Есть ли в Ruby функция Mathematica, такая как inject? Например, если я хочу произведение элементов в списке, в Ruby я могу написать:

list.inject(1) { |prod,el| prod * el }

Я обнаружил, что могу просто использовать Product в Mathematica:

Apply[Product, list]

Тем не менее, это не достаточно общий для меня (например, если я не просто хочу продукт или сумму чисел). Какой самый близкий эквивалент inject?

1 Ответ

7 голосов
/ 03 июня 2010

Эквивалент Fold . Я думаю, что это, как правило, называется «уменьшить» - в любом случае это имя Python.

Перевод вашего примера:

Fold[#1*#2&, 1, list]

То, что #1*#2& - это двоичная лямбда-функция, которая умножает свои аргументы. В этом случае вы можете просто использовать Times вместо:

Fold[Times, 1, list]

Или, конечно, просто применить Times к списку:

Apply[Times, list]

Или, если коротко:

Times @@ list

ПРИМЕЧАНИЕ. Версия в вашем вопросе, где вы используете продукт вместо Times, не будет работать. Товар предназначен для чего-то другого, а именно аналога Сумма .

...