【发布时间】:2017-05-30 22:00:48
【问题描述】:
我如何在 Erlang 中构造一个函数,该函数接受一个列表和一个数字 X 作为输入,然后返回列表中所有具有该数字 X 的元素的位置?
我是函数式编程的新手。
【问题讨论】:
标签: erlang
我如何在 Erlang 中构造一个函数,该函数接受一个列表和一个数字 X 作为输入,然后返回列表中所有具有该数字 X 的元素的位置?
我是函数式编程的新手。
【问题讨论】:
标签: erlang
又酷又花哨:
get_pos(L, E) ->
[ P ||
{X, P} <- lists:zip(L, lists:seq(1, length(L))),
X =:= E ].
又老又无聊:
get_pos(L, E) ->
F = fun(X, {Acc, Pos}) ->
A = if X =:= E -> [Pos|Acc]; true -> Acc end,
{A, Pos+1}
end,
{R, _} = lists:foldl(F, {[], 1}, L),
R.
快速高效:
get_pos(L, E) -> get_pos(L, E, 1).
get_pos([], _, _) -> [];
get_pos([H|T], H, Pos) ->
[Pos | get_pos(T, H, Pos+1)];
get_pos([_|T], E, Pos) ->
get_pos(T, E, Pos+1).
【讨论】:
get_pos(L,E) ->
{R,_} = lists:foldl(fun(X,{Acc,Pos}) when X == E -> {[Pos|Acc],Pos+1}; (_,{Acc,Pos}) -> {Acc,Pos+1} end, {[],1},L),
R.
【讨论】: