問題タブ [syntax-rules]

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 に答える
162 参照

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

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

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

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

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

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

macros - スキームマクロペアワイズ処理問題

(今のところ、私が求めているのは非スキームであることを無視してください。これは非プログラマー向けの DSL のためです)

これと同等のことをしたい:

mこれは、私が定義した別のマクロであり、これに拡張されます (したがって、単純に可変長スタイル関数を使用することはできません)。

私はこれを試しました:

しかし、私が推測したように、次のように拡張されました。

ユーザーが内側のブラケットを追加する必要なく、これらの要素をペアで処理する方法に少しこだわっています。

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

macros - スキーム: 括弧なしの構文規則で複数の変数を持つパターンを展開する方法

私は、Scheme で Picolisp スタイルのlet式用のマクロを作成しようとしています。このマクロを と呼びましょうlet-slim。(Picolisp のように) より簡潔にするために、変数を 1 つだけ宣言するときに、その使用法を次のようにしたいと考えています。

または、任意の数の変数を宣言するためのこのようなもの (これは疑似コードであり、実際には省略記号を含めないことに注意してください)

syntax-rules最初のユースケースは、一致するパターンを書くのはかなり簡単ですが、後者は苦労しています。

init繰り返されるだけなので、これは機能しません

間違った場所にある省略記号と見なされるため、これは機能しません

参照ポイントで括弧を使用する必要があるため、これは機能しません(つまり、組み込みと比較してまったく何も変更されませんlet

では、2 つの変数を括弧で囲むことなく繰り返す方法はありますか、それとも別のマクロ システム (または)syntax-rulesを使用する必要がありますか?syntax-casedefmacro

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

macros - スキームの構文規則 -- `...` で異なる構文の選択肢を混在させる

(define/custom (name (arg type) ...) body ...)とりわけ に展開されるマクロがあるとしましょう(define (name arg ...) body ...)。簡単だ。

ここで、(arg type)パラメーターとして渡すだけでなく、単にarg. よし、2 番目の句を書きます。ここで、(define/custom (name arg ...) body ...)は に展開され(define (name arg ...) body ...)ます。また、簡単です。

しかし、そのような解決策では、すべての引数が型を持つか、どれも型を持たないかのどちらかです。同じ構文リスト (または呼び出されたもの) で 2 つのオプションを混在させるにはどうすればよい...ですか? どうすれば作れますか??(define/custom (name arg1 (arg2 type2)) #f)に適切に展開されます。(define (name arg1 arg2) #f)直観的には、ヘルパー マクロを使用して、およびに展開し(helper a)、に展開しますが、展開が展開の前に行われるため、これは機能しません。a(helper (a b))a(define/custom (name arg_or_arg+type ...) body ...)(define (name (helper arg_or_arg+type) ...) body ...)definehelper