gpt4 book ai didi

functional-programming - Erlang 将一个列表附加/连接到另一个列表

转载 作者:行者123 更新时间:2023-12-02 04:33:59 26 4
gpt4 key购买 nike

我知道还有其他方法可以避免使用累加器,内置的 ++ 会将一个列表附加到另一个列表。但是,如果我使用累加器构建自己的尾部递归追加函数,是否有任何方法可以在列表之一上使用 lists:reverse() ,如下面的代码片段?谢谢

joinWithAccumulator2(X,Y) ->
joinWithAccumulator2(lists:reverse(X), [], Y).

joinWithAccumulator2( [], [], A ) ->
A;

joinWithAccumulator2( [X | Xs], [], A ) ->
joinWithAccumulator2( Xs, [], [ X | A] ).

最佳答案

构建列表的最快方法是使用 [H|T] 前置元素。所以你这样做的方式是有效的。如果您的目的是避免使用 lib 库,并且为了使用累加器(请参阅@juan.facorro 评论),您可以先反转累加器中的第一个列表,然后将其添加到第二个列表中:

joinWithAccumulator2(LX, LY) ->
joinWithAccumulator2(LX, LY, []).

% first step reverse LX in LA
joinWithAccumulator2( [X | Xs], LY, LA ) ->
joinWithAccumulator2( Xs, LY, [X | LA] );
% second step, when LX is empty, prepend LA to LY (list accumulator2)
joinWithAccumulator2( [], LA2, [A | As] ) ->
joinWithAccumulator2( [], [A | LA2], As );
% operation done
joinWithAccumulator2( [], A, [] ) ->
A.

关于functional-programming - Erlang 将一个列表附加/连接到另一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45526557/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com