ブロック構造

前節のプログラムでは、関数 sum-of-squares が、その内部で関数 squareを使用している。

ここでsquare を、sum-of-squares の中でのみ使用したいとする。そのようなときは関数sum-of-squares の定義内で、最後以外の<body> の場所で square を定義すればよい。

(define (sum-of-squares x y)
  (define (square z) (* z z))
  (+ (square x) (square y)))

このように定義すれば、他の場所でこのsquareを使用することはできなくなる。

プログラムが大規模になってくると、関数の名前が他のところで使われていたりする可能性があるので、補助関数を外から見える形で定義するのは好ましくない。

逆にいうと、補助関数は使われるところのみで局所的に定義されていることが望ましい。

また、この例ではしていないことだが、内部で定義された square のような関数は、包んでいる関数定義の引数(ここでは xy)を直接参照できる。


一覧 前へ 次へ