問題タブ [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.
macros - スキーム マクロについて学習するためのソース: define-syntax および syntax-rules
私はJRM の Syntax-rules Primer for the Merely Eccentric を読み、構文規則とそれが common-lisp の define-macro とどのように異なるかを理解するのに役立ちました。syntax-rules は、define-syntax 内で構文トランスフォーマーを実装する唯一の方法です。
私は 2 つのことを探しています。1 つ目は構文規則の例と説明であり、2 つ目は定義構文を使用する他の方法を学ぶための良い情報源です。どのリソースをお勧めしますか?
python - Python で C++/C# から ?: を厳密に達成するにはどうすればよいですか?
C# では、次のように簡単に記述できます。
Python で同じことを行う簡単な方法はありますか、それとも「if」ステートメントにこだわっていますか?
emacs - Emacs Lisp 構文の強調表示
Emacsのシンタックスハイライト拡張機能を書きたいのですが、「emacs シンタックスハイライト チュートリアル」のバリエーションをググっても全部失敗してしまいました。Emacs ハイライターの書き方を学ぶにはどうすればよいですか? そのようなことを行う方法を学ぶために、どのような優れたリソースがありますか?
functional-programming - スキームでマクロをリファクタリングしてください
私は衛生学を学んでいて、Schemeで単純なforループを作成しようとしました。以下の例に示すように、3種類の構成をサポートしたい
次のようなフィルターを使用したループもサポートしたいと思います。
私はこれを持っていますが、私は多くの繰り返しを見ることができます。冗長性を取り除くのを手伝ってください。
macros - ベクトル パターンは構文規則でどのように使用されますか?
私は Common Lisp マクロを書いてきたので、Scheme の R5Rs マクロは私にとって少し不自然です。シンタックスルールでベクトルパターンをどのように使用するか理解していないことを除いて、私はアイデアを得たと思います:
引数をベクトルとして記述する必要があるマクロを使用する方法がわかりません。
それらのパターンを使用する何らかのテクニックはありますか?
ありがとうございました!
macros - 構文規則を使用したスキームでの暗黙のカリー化?
Jeffrey Meunier は、defmacro を使用する暗黙の Curry マクロをここに持っています。誰かがこれを構文規則で書いたことがあるかどうか疑問に思っていましたか?
macros - 構文規則は完全に衛生的ではありませんか?
私はそれsyntax-rules
が衛生的なマクロシステムであることを理解していますが、なぜこれが起こるのか理解していません:
ここで、マクロを定義しnot
た後(nand #f #t)
に再定義した場合は、を返します#t
。なぜ、マクロシステムが衛生的であると想定されているのですか?
clojure - clojureマクロはどのように特別なシンボルを解析しますか?
Scheme で書いたマクロを Clojure で再実装すると困ってしまう。マクロは、後で使用するために、テスト データのペアをall-tests
var にロードしようとします。
マクロの引数は可変長で、特殊な未定義シンボル、つまり が含まれているため、=>
Schemy syntax-rules のようにそれを解析する方法がわかりません。
スキームのバージョン:
私の現在の失敗した Clojure バージョン:
Ps: 私はprintln
今自分のコードをテストするために使用しています。動作したら、解析と読み込みの作業を試みます。
macros - Schemeマクロ展開の順序を制御するには?
私は、Racket マクロ拡張機能を使用しています。syntax-id-rules
これは、他のスキームの実装が という名前で提供していますidentifier-syntax
。これらにより、定義された識別子が先頭位置にない場合でも発生するマクロ展開を指定できます。たとえば、次のようになります。
は、識別子proxy
を のプロキシに設定しhidden
ます。これは役に立たない例ですが、使用法を示しています。
foo
のような識別子マクロを使用している場合にオーバーライドしたい、グローバルな通常のマクロが必要な状況に陥っています。これを と呼びましょうproxy
。つまり、次のようなことができるようになりたいです。
しかし実際には、マクロが 1 つ前に展開される'default
ため、最後の行は を返します。foo
proxy
これらの行に沿って何かを達成する方法はありますが、proxy
識別子マクロがデフォルトのマクロ定義をオーバーライドしますfoo
か? 私は特に上記のアーキテクチャに専念しているわけではありません。
追加: これは実際に使用するためのものではありませんが、正式なセマンティクスの理論的ポイントのデモンストレーションの一部です。