私は新しい Haskell であり、まだいくつかの基本を理解しようとしています。再帰関数を書くとき、意識的にどちらかを選択することなく、自然に再帰的または末尾再帰的な方法でそれらを記述します。
私の質問は:
再帰関数が与えられた場合、それを末尾再帰に変換する簡単な方法はありますか?
末尾再帰関数が与えられた場合、それを再帰関数に変換する簡単な方法はありますか?
例の関数
addOne [] = []
addOne (x:xs) = (x+1):addOne xs
また、関数を書くとき、末尾再帰が別の方法よりも適切かどうかを判断する簡単な方法は何ですか?