厳密さについていくつか質問してきましたが、以前は的を射ていなかったと思います。うまくいけば、これはより正確です。
私たちが持っているとしましょう:
n = 1000000
f z = foldl' (\(x1, x2) y -> (x1 + y, y - x2)) z [1..n]
を変更せずにf
、何を設定すればよいですか
z = ...
それf z
はスタックをオーバーフローしませんか?(つまり、n のサイズに関係なく、一定の空間で実行されます)
答えが GHC 拡張機能を必要とする場合は問題ありません。
私の最初の考えは、次のように定義することです。
g (a1, a2) = (!a1, !a2)
その後
z = g (0, 0)
g
しかし、有効な Haskell だとは思いません。