構文木を上から調べていって,変数が導入されていたら グローバルなカウンタか何かを使ってとにかく一意な名前に変えてしまう( x → x1, y → y2 etc. ) そしてハッシュでその対応を覚えておく. ネストした変数束縛で同じ "x" が再び現れたら, そこから下の部分木では対応は x → x1 でなく x → x3 (例えば)であるとハッシュを更新.
例.構文木のうち見終わった部分を [] で書くと... (lambda (x) (lambda (y) (lambda (x) (list x y x)))) → [lambda [x1] (lambda (y) (lambda (x) (list x y x)))] with {x → x1} → [lambda [x1] [lambda [y2] (lambda (x) (list x y x))]] with {x → x1, y → y2} → [lambda [x1] [lambda [y2] [lambda [x3] (list x y x)]]] with {x → x3, y → y2} → [lambda [x1] [lambda [y2] [lambda [x3] [list x3 y2 x3]]]] with {x → x3, y → y2}