コストに敏感なフォールドの意味を例を挙げて説明しましょう。任意精度で円周率を計算します。ライプニッツの公式(あまり効率的ではありませんが、素晴らしくシンプルです)と次のような怠惰なリストを使用できます。
pi = foldr1 (+) [(fromIntegral $ 4*(-1)^i)/(fromIntegral $ 2*i+1) | i<-[0..]]
さて、無限リスト内のすべての値を計算する必要があるため、明らかにこの計算は完了しません。しかし実際には、円周率の正確な値は必要ありません。指定された小数点以下の桁数だけが必要です。私はこのように円周率を定義することができます:
pi' n = foldr1 (+) [(fromIntegral $ 4*(-1)^i)/(fromIntegral $ 2*i+1) | i<-[0..n]]
しかし、必要な精度を得るために渡す必要があるnの値はまったくわかりません。私が必要としているのは、必要な精度を達成するたびに折り畳みを停止する、ある種のコストに敏感な折り畳みです。そのような折り目は存在しますか?
(この場合、必要な精度が達成されたかどうかを簡単に確認できます。ライプニッツの式では、各項の符号が交互になるシーケンスが使用されるため、誤差は常に次の項の絶対値よりも小さくなります。順序。)
編集:計算時間/消費電力も考慮することができるコストに敏感なフォールドがあるのは本当にクールでしょう。たとえば、1時間の計算時間と10kW-hrsを費やすとすると、piの最も正確な値が必要です。しかし、これはもはや厳密には機能しないことを私は理解しています。