next up previous
Next: 4.3.3 関数の戻り値としての手続きの場合 Up: 4.3 高階手続きによる抽象化 Previous: 4.3.1 引数として手続きを用いる場合

4.3.2 汎用手続きとして用いる場合

sumは手続きを引数とする手続きでしたが, 任意の関数を引数にとって,その積分を求めるといった 汎用の手続きを作ることで抽象化が可能です.

==> (define (integral f a b dx)
        (define (add-dx x) (+ x dx))
        (* (sum f (+ a (/ dx 2)) add-dx b)
           dx))

INTEGRAL 
==> (integral cube 0 1 0.1)
0.24875008 
==> (integral cube 0 1 0.01)
0.24998708 
==> pi
3.141592653589793d0 
==> (sin pi)
1.2246063538223773d-16
integralは,cubeやsquareという名前を付けない一般的な関数も使えるため非 常に汎用です.

==> (integral (lambda (x) x) 0 10 1)
50 
==> (integral (lambda (x) x) 0 10 0.1)
49.99998 
==> (integral (lambda (x) (* 2 x)) 0 10 1)
100


generated through LaTeX2HTML. M.Inaba 平成18年5月6日