2017-02-06 3 views
3

Я пытаюсь реализовать функциюErlang, Функция, которая возвращает длины списков?

llen(ListOfLists) 

, который возвращает список, содержащий длины списков в ListOfLists. Функция должна использовать списки: map/2.

Пример:

1> funs:llen([[1, 2, 3], [], [4, 5]]). 
[3, 0, 2] 

Я знаю, как вычислить длину для одного списка:

list([]) -> 0; 
list([_|T]) -> 1+list(T). 

, но я не знаю, как сделать это для нескольких списков с помощью потех и списков.

+5

'списки: map (fun erlang: length/1, [[1, 2, 3], [], [4, 5]])'? – Dogbert

+0

@ Dogbert да, ty много :) – mrjoe

ответ

5

lists:map/2 - функция более высокого порядка, которая применяет функцию для каждого элемента списка. erlang:length/1 - это функция, которая возвращает длину списка.

Применение erlang:length/1 на каждом элементе вашего списка с помощью lists:map/2:

lists:map(fun erlang:length/1, [[1, 2, 3], [], [4, 5]]) 
3

И когда вы получите списковых:

53> L = [[1, 2, 3], [], [4, 5]]. 
[[1,2,3],[],[4,5]] 

54> [length(X) || X <- L]. 
[3,0,2] 

список понимание, как для цикла на других языках, и это выглядит следующим образом:

length(X) for X in L 
length(X) || X <- L 

Внешний [ ] служит для сбора всех результатов в списке.

+0

Оба решения хороши, но ty для объяснения списка понятий. Это полезно. – mrjoe

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