Czy powinienem unikać rekursji ogonowej w Prologu i ogólnie?

Pracuję nad książką online „Learn Prolog now” dla zabawy.

Próbuję napisać predykat, który przechodzi przez każdego członka listy i dodaje do niego jeden, używając akumulatorów. Zrobiłem to łatwo bez rekurencji ogonowej.

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

Ale przeczytałem, że lepiej jest unikać tego typu rekursji ze względu na wydajność. Czy to prawda? Czy uważa się za „dobrą praktykę” używanie rekurencji zawsze? Czy warto będzie korzystać z akumulatorów, aby uzyskać dobry nawyk?

Próbowałem zmienić ten przykład na używanie akumulatorów, ale odwraca listę. Jak mogę tego uniknąć?

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

questionAnswers(4)

yourAnswerToTheQuestion