関数が一級市民

(define (sigma start end general-form)
        (letrec *1
                        (iter (+ i 1) end
                              (+ product (general-form i)))))))
          (iter start end 0)))

Σをこういう風に定義しておくと,例えばNapier数を求めたいとき,そのマクローリン展開\sum_{n=0}^{100} 1/n!はこういうふうに書ける.

(sigma 0 100 (lambda (n) (/ 1 (factorial n))))

lambda式で一般形を書けばいい. 関数が一級市民(関数の引数にも返値にも使え,代入もできるようなオブジェクト:Cの変数など)であるということはこういった一般的な状況を関数へと渡すのに都合がいいのである.

*1:iter (lambda (i end product) (if (= i end) (+ product (general-form i