問題タブ [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.
racket - 構文規則 Racket を提供する
ラケットで構文規則を提供するにはどうすればよいですか?
次のようなコードがあります。
FROM WHERE とスターを提供するために提供ステートメントを使用するにはどうすればよいですか?
これが私がSELECTを提供する方法です:
macros - スキームマクロペアワイズ処理問題
(今のところ、私が求めているのは非スキームであることを無視してください。これは非プログラマー向けの DSL のためです)
これと同等のことをしたい:
m
これは、私が定義した別のマクロであり、これに拡張されます (したがって、単純に可変長スタイル関数を使用することはできません)。
私はこれを試しました:
しかし、私が推測したように、次のように拡張されました。
ユーザーが内側のブラケットを追加する必要なく、これらの要素をペアで処理する方法に少しこだわっています。
macros - スキーム: 括弧なしの構文規則で複数の変数を持つパターンを展開する方法
私は、Scheme で Picolisp スタイルのlet
式用のマクロを作成しようとしています。このマクロを と呼びましょうlet-slim
。(Picolisp のように) より簡潔にするために、変数を 1 つだけ宣言するときに、その使用法を次のようにしたいと考えています。
または、任意の数の変数を宣言するためのこのようなもの (これは疑似コードであり、実際には省略記号を含めないことに注意してください)
syntax-rules
最初のユースケースは、一致するパターンを書くのはかなり簡単ですが、後者は苦労しています。
init
繰り返されるだけなので、これは機能しません
間違った場所にある省略記号と見なされるため、これは機能しません
参照ポイントで括弧を使用する必要があるため、これは機能しません(つまり、組み込みと比較してまったく何も変更されませんlet
)
では、2 つの変数を括弧で囲むことなく繰り返す方法はありますか、それとも別のマクロ システム (または)syntax-rules
を使用する必要がありますか?syntax-case
defmacro
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 ...)
define
helper