2017-02-17 18 views

ответ

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 
+0

Это не то, о чем попросил ОП. Они хотят знать, как это сделать, учитывая список списков. –

+0

@JustinWood Вы правы, я неправильно читаю внешний набор скобок (и, в частности, «произведение двух подписок»). Пересмотренный, чтобы отобразить список списков. –

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