Вычисление максимального произведения результатов вызова многих функций с одним и тем же аргументом

#function #functional-programming #j

#функция #функциональное программирование #j

Вопрос:

У меня есть этот код:

 f1 =: some function that returns list of numbers
f2 =: some function that returns list of numbers
f3 =: some function that returns list of numbers
f4 =: some function that returns list of numbers
max_mult_all =: (*/f1) >. (*/f2) >. (*/f3) >. (*/f4)
  

Есть ли лучший способ инициализации max_mult_all ? Что, если у меня есть сотни этих функций? Возможно ли использовать стиль Insert( / )?

Спасибо!

Ответ №1:

Да, если вы сначала выделите каждую функцию, вы можете */ каждый список, а затем >./ результаты:

 >./ ; */ each (f1;f2;f3;f4) y
  

Более того, если функции имеют одинаковую форму и размер, вы можете поместить их в герундий

 F =: f1`f2`f3`f4
  

из которого вы строите матрицу результатов

 M =: F `:0 ] y
  

а затем выполните свои вычисления над матрицей

 >./*/"1 M
  

Комментарии:

1. использование every вместо each then означает, что вам не нужно использовать ; . т.е. >./ */ every (f1;f2;f3;f4) y

2. @Tikkanz, действительно, использование every здесь более уместно.