最近は余暇のプログラミングに Haskell を使用しています。命令型言語のプログラマーとして 8 年以上働いているので、いくつかの関数構造 (特に折り畳み) に頭を悩ませるのは難しいことです。プロジェクト Euler の問題を解決していたところ、たまたま次のコードが生成されました。
f (num, den) s | num*10 < den = s
| otherwise = f (ratio (num, den) s') s'
where s' = (s+2)
この明示的な再帰は、フォールドまたはその他の関数構造を使用して書き直すことができますか? 折り畳みを使用する際の主なハードルは、ステップ関数を考え出すことでした。最終的に私はあきらめ、再帰に頼りました。
編集:また、関数内の別の関数によって返された出力を、明示的な再帰なしで呼び出し元の関数への入力として作成するにはどうすればよいですか?