Sollte ich eine Schwanzrekursion in Prolog und allgemein vermeiden?

Ich arbeite gerade aus Spaß am Online-Buch "Learn Prolog now".

Ich versuche, ein Prädikat zu schreiben, das jedes Mitglied einer Liste durchläuft und mit Hilfe von Akkumulatoren ein Prädikat hinzufügt. Ich habe es ohne Schwanzrekursion schon problemlos geschafft.

addone([],[]).
addone([X|Xs],[Y|Ys]) :- Y is X+1, addone(Xs,Ys).

Ich habe aber gelesen, dass es aus Performancegründen besser ist, diese Art der Rekursion zu vermeiden. Ist das wahr? Wird es als "gute Praxis" angesehen, die Schwanzrekursion immer zu verwenden? Lohnt es sich, mit Akkus gute Gewohnheiten zu machen?

Ich habe versucht, dieses Beispiel in Akkumulatoren umzuwandeln, aber es kehrt die Liste um. Wie kann ich das vermeiden?

accAddOne([X|Xs],Acc,Result) :- Xnew is X+1, accAddOne(Xs,[Xnew|Acc],Result).
accAddOne([],A,A).
addone(List,Result) :- accAddOne(List,[],Result).

Antworten auf die Frage(4)

Ihre Antwort auf die Frage