問題タブ [lisp-macros]
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.
clojure - :arglists を Clojure fn またはマクロに変更するにはどうすればよいですか?
clojure fn またはマクロの :arglist 属性を変更するにはどうすればよいですか?
わかりました、運が悪いので、次のことを試しました。
うーん、それで :arglists キーはなくなりましたか? では、あきらめます。どうすればよいでしょうか。:arglists の値を変更したいだけです。上記の例では defn を使用していますが、マクロ (defmacro) を使用して :arglists を設定する方法も知りたいです。
emacs - マクロでシンボル名を置換
マクロで作成された関数にシンボル名を代入するにはどうすればよいですか? ここで明らかな何かが欠けていると思います。たとえば、次のような変数と関数を定義するマクロを作成しようとしています。
fn
返された関数は、次のようなシグネチャを持つ別の関数 ( ) を呼び出します。
したがって、 のような呼び出しを期待しています(fn 'some-var)
。そして、次のようなマクロを使用できるようにしたい
そして、次の作業を行い、
(quote ,sym)
、 、などを試しsymbol-name
ましたが、うまくいきません。
emacs - Lisp マクロの let バインディングを条件付きで削除する
defun
create in a lisp マクロの let バインディングを条件付きで削除するにはどうすればよいですか? ここで、結果の関数から最初の let バインド変数を削除したいのですがnil
、let バインドに固執してエラーが発生するという問題が発生しています。
たとえば、結果の関数はlet
orlet*
を使用し、 に応じて最初の変数割り当てを削除する必要がありますarg
。しかし、私が問題を書いた方法は、に置き換えることから来てvar1
いnil
ます。nil を取り除く方法がわかりません。
emacs - 文字列変数をマクロ引数として使用する
このコードが欲しい:
と同じことを行います:
私はこれを試しました(からこの質問):
しかし、my-name-function という関数を取得しましたが、my-foobar-function が必要です。私の目標は、キーマップの連想リストからマイナー モードを定義することです。
ありがとう
closures - Pandoric マクロのシンボルをコンパイルするにはどうすればよいですか?
私はLOLのセクション 6.7 を数回読んだことがありますが、まだ次のことが頭に浮かびません。
以前は外部コードに対して閉じられていたバインディングは、それらのバインディングが効率的なものにコンパイルされ、長い間アクセサー シンボルが忘れられていたとしても、いじくり回せるように広く開かれています。
バインドされたシンボルが本質的にクロージャーの環境でポインターにコンパイルされる場合、どのようにしてシンボルを既にコンパイルされた関数に渡し、関数は何らかの方法でシンボルを比較できますか?
私はpantest
clisp の例をいじっていますが、acc
とthis
内部の両方を変更できることがわかりpantest
ます。をコンパイルおよび逆アセンブルできますpantest
が、すべてのシンボルが環境に表示されます。アセンブリにコンパイルされた Lisp があれば、もう少し直感的に理解できるかもしれませんが、コードが複雑すぎて、説明なしで理解するのはおそらく難しすぎるでしょう。
python - コンパイル済みの Emacs マクロを利用するにはどうすればよいですか?
Python のメジャー モードを変更して、少し異なる動作をさせようとしています。具体的にはpython-indent-regionを変更したいと思います。どのような変更を加える必要があるかを理解したと思います (行番号 1070 を に変更する必要があります(beginning-of-line)
)。関数を init.el ファイルにコピーしてその行を変更することで、そのように変更しようとしました。ただし、その関数を使用しようとすると、次のエラーが発生します。
私はいくつかの調査を行いましたが、問題はpython-rx
実際にdefmacro
は python.el で a を使用して定義されているようです。python.el は emacs で配布されているため、既にコンパイルされており、/usr/share/emacs/24.5/lisp/progmodes/python.elc
. ここでマクロのコンパイルについて読んでいましたが、私が理解しているように、マクロはコンパイルされているため、参照しようとすると利用できなくなります。
これは、次の 2 つの質問に要約されます。
- 上記の理解で正しいですか?
- マクロに依存しているにもかかわらず、この関数をほぼ同じになるように再定義するという目標を達成するにはどうすればよい
python-rx
ですか?
助けてくれてありがとう!