191 :
184:
とりあえず手変換ですがなんとか出来ました。
やっぱりclosureを引数に取る方法でいけました。
(1)、(2)でclosureを呼出してると同時に、自分自身の束縛も引数に入れてるのが肝です。
これを形式変換するには、(1)はテンプレート変換で良いとして、
(2)は、named-let中に置かれた(loop ...)呼出しを探して、
(loop loop ...)形式に置き換えないといけないから、環境生成の監視
を伴うので結構面倒そうです。(シンボルがバッティングしない様にしたり)
(loop ...)形式のままで変換できれば一番良いんですが・・。
(let loop ((a b) (c d)) (loop e f) )
↓
((lambda (a c)
((lambda (loop) ; …(1)
(loop loop a c))
(lambda (loop a c) ; …(2)
(loop loop e f)
)))
b d)