Например, если у меня есть аргумент функции findProduct ([[1,2,3], [1,5,6]]), как я могу вычислить произведение двух подписок, а затем добавить их в новый список с результатом [6,30]?Elixir: Как я могу найти продукт подписок в списке?
0
A
ответ
0
Вы можете использовать Enum.reduce/2, чтобы уменьшить каждый список с аккумулятором, а затем вернуть новый список с этими двумя элементами:
defmodule MyProduct do
def findProduct(list_of_lists) do
Enum.map(list_of_lists, fn(list) -> Enum.reduce(list, fn(x, acc) -> x * acc end) end)
end
end
2
productFn = fn(list) -> Enum.reduce(list, &*/2) end
my_list = [[1, 2, 3], [1, 5, 6]]
Enum.map(my_list, productFn) # => [6, 30]
Если вы не знакомы с &
оператора (more info here):
productFn = fn(list) -> Enum.reduce(list, &*/2) end
#is equivalent to:
productFn = fn(list) -> Enum.reduce(list, fn(item, acc) -> item * acc end) end
И
Enum.map(list, productFn)
is equivalent to:
Enum.map(list, fn(item) -> productFn.(item) end)
+2
Или просто 'Enum.map (my_list, productFn)' с ' & (productFn. (& 1)) 'такой же, как' productFn'. – Dogbert
Это не то, о чем попросил ОП. Они хотят знать, как это сделать, учитывая список списков. –
@JustinWood Вы правы, я неправильно читаю внешний набор скобок (и, в частности, «произведение двух подписок»). Пересмотренный, чтобы отобразить список списков. –