LISP Scheme

このエントリーをはてなブックマークに追加
191184
とりあえず手変換ですがなんとか出来ました。
やっぱり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)