2

Common Lisp からChicken Schemeに移行しようとしていますが、多くの問題があります。

define-syntax私の現在の問題は次のとおりです:他のマクロを呼び出すマクロ (おそらく ? を使用) を作成するにはどうすればよいですか?

たとえば、Common Lisp では、次のようなことができます。

(defmacro append-to (var value)
 `(setf ,var (append ,var ,value)))

(defmacro something-else ()
 (let ((values (list))
  (append-to values '(1)))))

一方、Scheme では、同等のコードは機能しません。

(define-syntax append-to
 (syntax-rules ()
  ((_ var value)
   (set! var (append var value)))))

(define-syntax something-else
 (syntax-rules ()
  ((_)
   (let ((values (list)))
    (append-to values '(1))))))

マクロからマクロを呼び出すことはappend-toできませんsomething-elseappend-to「変数」が未定義であるというエラーが表示されます。

私が Google や他の情報源から収集したすべての情報によると、マクロは他のコードにアクセスすることなく、閉じた環境で評価されます。基本的に、組み込みの Scheme 関数とマクロを除いて、マクロが評価されるときは何も存在しません。er-macro-transformersyntax-case(とにかくChickenでは非推奨になっています)、さらにはprocedural-macrosモジュールを使用してみました。

確かに、マクロの全体的な目的は、コードの繰り返しを避けるために、他のマクロの上に構築されることです。マクロを単独で作成する必要がある場合、それらはほとんど役に立たない、と私は考えています。

私は他のスキームの実装を調査しましたが、もう運がありませんでした。それは単にできないようです。

誰かがこれを手伝ってくれますか?

4

1 に答える 1