我刚刚开始学习二郎,尾递归正在慢慢杀死我;我无法理解它。我正在尝试制作一个将列表中所有其他数字翻倍的程序,并且我正在尝试使用尾递归来做到这一点。
到目前为止,这是我的代码
stripAndDoubleOdds([H|T]) -> stripAndDoubleOdds([H|T],1,[H|T]).
stripAndDoubleOdds(F, _, []) -> F;
stripAndDoubleOdds(_,Index,[H1|T1]) ->
F = [] ++ 2*lists:nth(Index, [H1|T1]),
stripAndDoubleOdds(F, Index +2, T1).
当我给它一个数字列表时,我根本没有输出,但如果我给它一个数字,它可以毫无问题地翻倍。
索引是为了保持当前元素的位置,它增加了 2,这样我就得到了其他整数并将它加倍。我当前的解决方案包括提取头部,将其加倍,将其添加到列表中,然后一遍又一遍地将尾部传递给该过程,直到我得到一个空列表,此时我应该得到我的列表 F 回来。例如,如果我输入 [1,2,3,4,5],我只想让它给我一个包含 [2,6,,10] 的列表。