n
以下は、数値を受け取り、n 番目のフィボナッチ数を返すHaskell 関数です。(0 番目の数字が 0、1 番目の数字が 1、2 番目の数字が 1、3 番目の数字が 2 などのインデックス スキームを使用しました。)
fib :: (Integral a) => a -> a
fib 0 = 0
fib n = fibhelper n 0 1
fibhelper :: (Integral a) => a -> a -> a -> a
fibhelper 1 x y = y
fibhelper n x y = fibhelper (n-1) y (x+y)
さて、効率のために、Haskell の遅延評価をバイパスし、更新された引数の評価を強制したいとします ($!
たとえば、演算子を使用しますか?) これを行う最もエレガントで慣用的な方法は何でしょうか?