変数名の有効範囲 (2/3)


let の仲間: let*

let の仲間には、 let*, letrec があります。 ここでは、 let* についてのみ説明します( letrec の説明は こちら )。 表記の仕方は、 let の代りに let* と書くだけなのですが、 scope が異なります。 let* においては、 let 節の実行は逐次的に行われ、 加えて、ある let 節で行った束縛関係が次の節で すぐに有効になります。つまり、 var-kの変数名が有効なのは、 以下の範囲になります。
	(let* ((var-1  expr-1)
               ....
               (var-k expr-k)
               (var-k+1 expr-k+1)
                ....
               (var-n  expr-n))
            body)
実は、 let* let を用いて作ることができます。 つまり、下の二つの式は同値だからです。

(let* ((var-1 expr-1) 
       (var-2 expr-2)
       (var-3 expr-3))
    body)                 

(let ((var-1 expr-1))
    (let ((var-2 expr-2))
        (let ((var-3 expr-3))
            body)))

99.10.6/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp