我在读Learn You Some Erlang,我在Recursion一章中找到了这个例子。是++操作符比|更昂贵Erlang的运算符?
tail_sublist(_, 0, SubList) -> SubList;
tail_sublist([], _, SubList) -> SubList;
tail_sublist([H|T], N, SubList) when N > 0 ->
tail_sublist(T, N-1, [H|SubList]).
由于笔者接着解释,有我们的代码致命缺陷。因为这样产生的子列表将是相反的,我们将不得不重新反转它们以获得正确的输出。相比之下,我所做的就是使用++
运算符来避免稍后反转列表。
sublist_tail([],_,Acc) -> Acc;
sublist_tail(_,0,Acc) -> Acc;
sublist_tail([H|T],N,Acc) -> sublist_tail(T,N-1,Acc++[H]).
我的问题是,是++
运营商比|
运营商更贵?如果是这样,我的解决方案(使用++
运算符)仍然比作者的解决方案慢(包括反转列表以获得正确的输出)?
运算符++代价高昂的操作,为了获得需要运行左边参数的结果。 –