2010-06-02 3 views
3

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

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

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

Apply[Product, list] 

Однако, это ISN» t достаточно для меня (например, если я не просто хочу продукт или сумму чисел). Какой ближайший эквивалент inject?

ответ

7

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

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

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

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

Fold[Times, 1, list] 

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

Apply[Times, list] 

Или, короче:

Times @@ list 

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

+0

Да, извините, я писал из памяти, и я хотел сказать «Таймс». –

+1

«Я думаю, что это более типично называется« уменьшить ». Я бы сказал, что сглаживание имени по крайней мере так же часто встречается, как сокращение. Страница wikipedia для функции fold имеет список 10 языков, которые называют ее fold и 8, которые называют ее уменьшенной. Также обратите внимание, что «Уменьшить (функция более высокого порядка)» перенаправляется на «Fold (функция более высокого порядка)». – sepp2k

Смежные вопросы