問題タブ [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.

0 投票する
1 に答える
457 参照

macros - Chicken Scheme マクロから他のマクロを呼び出すには?

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

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

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

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

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

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

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

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

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

0 投票する
2 に答える
342 参照

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?

0 投票する
1 に答える
31 参照

macros - Schemeマクロでパターンシーケンスを転置する方法は?

次のSchemeマクロを書きました。

やってみると

次の結果を返します。

しかし、私の意図は、次の結果を返すマクロを作成することでした。

パターンマッチャーがvar変数をアイテム化する方法をどのように転置しますか?


更新:join R7RS 4.3.2 によれば、この質問のマクロは違法であると言われました。

識別子 ⟨ellipsis⟩ の 1 つ以上のインスタンスが続くサブパターンで発生するパターン変数は、⟨ellipsis⟩ のインスタンスが続くサブテンプレートでのみ許可されます。

0 投票する
1 に答える
162 参照

racket - 構文規則 Racket を提供する

ラケットで構文規則を提供するにはどうすればよいですか?

次のようなコードがあります。

FROM WHERE とスターを提供するために提供ステートメントを使用するにはどうすればよいですか?

これが私がSELECTを提供する方法です: