erlang の学習を始めたばかりで、Tail 再帰がゆっくりと私を殺していきます。私はそれを理解することができません。リスト内の他のすべての数値を 2 倍にするプログラムを作成しようとしていますが、末尾再帰を使用してこれを実行しようとしています。
これまでの私のコードは次のとおりです
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倍になります。
インデックスは現在の要素の位置を保持するためのものであり、2 ずつインクリメントされるため、1 つおきの整数を取得して 2 倍にします。私の現在の解決策には、頭を抽出して2倍にし、リストに追加してから、空のリストを取得するまで何度もテールをプロセスに渡す必要があり、この時点でリストFを取得することになっています。たとえば、[1,2,3,4,5] と入力すると、[2,6,,10] のリストが表示されます。