3
再帰呼び出しチェーンで情報を後方に伝播する方法はありますか。例えば再帰呼び出しで情報を後方に伝播する
:
f :: [Int] -> [Int]
f (x:xs)
| x `mod` 17 = ...
| otherwise = (x + 1) : f xs
f [] = []
私は...での評価を停止したい、と私はまた戻って、発信者(それが停止したという事実)にその情報を伝播します。私はMaybeのような戻り値型を使用しようとしましたが、再帰呼び出しのパターンマッチングを行う必要があったため、呼び出し後に評価しなければならなかったので、テールコール最適化が失われました(注: TR形式ですが、わかりやすいようにこのように残しました)。
さらに優れたソリューションを試しても、TCOのメリットはありますか?
これはもう問題ではないので、この質問を議論の対象にしないように投票しています(OPはそれを理解しました) – luqui
ハスケルでの保護された再帰よりもテールの再帰はあまり重要ではありません。 https://wiki.haskell.org/Tail_recursion – chepner
関連項目:* Haskellにテール再帰的な最適化がありますか?*](http://stackoverflow.com/q/13042353/2751851) – duplode