【问题标题】:A function that takes a number and a list and output a list with all the positions of that number in Erlang一个函数,它接受一个数字和一个列表,并输出一个包含该数字在 Erlang 中所有位置的列表
【发布时间】:2017-05-30 22:00:48
【问题描述】:

我如何在 Erlang 中构造一个函数,该函数接受一个列表和一个数字 X 作为输入,然后返回列表中所有具有该数字 X 的元素的位置?

我是函数式编程的新手。

【问题讨论】:

    标签: erlang


    【解决方案1】:

    又酷又花哨:

    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).
    

    【讨论】:

      【解决方案2】:
      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.
      

      【讨论】:

        猜你喜欢
        • 2021-03-19
        • 2019-07-20
        • 2020-03-27
        • 1970-01-01
        • 1970-01-01
        • 2020-07-24
        • 1970-01-01
        • 2016-06-21
        • 1970-01-01
        相关资源
        最近更新 更多