問題タブ [define-syntax]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
macros - Chicken Scheme マクロから他のマクロを呼び出すには?
Common Lisp からChicken Schemeに移行しようとしていますが、多くの問題があります。
define-syntax
私の現在の問題は次のとおりです:他のマクロを呼び出すマクロ (おそらく ? を使用) を作成するにはどうすればよいですか?
たとえば、Common Lisp では、次のようなことができます。
一方、Scheme では、同等のコードは機能しません。
マクロからマクロを呼び出すことはappend-to
できませんsomething-else
。append-to
「変数」が未定義であるというエラーが表示されます。
私が Google や他の情報源から収集したすべての情報によると、マクロは他のコードにアクセスすることなく、閉じた環境で評価されます。基本的に、組み込みの Scheme 関数とマクロを除いて、マクロが評価されるときは何も存在しません。er-macro-transformer
、syntax-case
(とにかくChickenでは非推奨になっています)、さらにはprocedural-macros
モジュールを使用してみました。
確かに、マクロの全体的な目的は、コードの繰り返しを避けるために、他のマクロの上に構築されることです。マクロを単独で作成する必要がある場合、それらはほとんど役に立たない、と私は考えています。
私は他のスキームの実装を調査しましたが、もう運がありませんでした。それは単にできないようです。
誰かがこれを手伝ってくれますか?
macros - Racket macro that defines multiple top-level forms?
I found myself defining syntax parameters with identical definitions except for their name so I decided to write a macro to make this simpler:
However instead of having to repeat the macro name I would like to be able to just write:
But I don't see how to do this using the normal ellipses syntax, because I would need to wrap everything in a begin
which would create a new scope, and I want all of the syntax parameters as if I had written them each of the top level. What's the right way to accomplish this?
macros - Schemeマクロでパターンシーケンスを転置する方法は?
次のSchemeマクロを書きました。
やってみると
次の結果を返します。
しかし、私の意図は、次の結果を返すマクロを作成することでした。
パターンマッチャーがvar
変数をアイテム化する方法をどのように転置しますか?
更新:join
R7RS 4.3.2 によれば、この質問のマクロは違法であると言われました。
識別子 ⟨ellipsis⟩ の 1 つ以上のインスタンスが続くサブパターンで発生するパターン変数は、⟨ellipsis⟩ のインスタンスが続くサブテンプレートでのみ許可されます。
racket - 構文規則 Racket を提供する
ラケットで構文規則を提供するにはどうすればよいですか?
次のようなコードがあります。
FROM WHERE とスターを提供するために提供ステートメントを使用するにはどうすればよいですか?
これが私がSELECTを提供する方法です: