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

0 投票する
4 に答える
1432 参照

clojure - :arglists を Clojure fn またはマクロに変更するにはどうすればよいですか?

clojure fn またはマクロの :arglist 属性を変更するにはどうすればよいですか?

わかりました、運が悪いので、次のことを試しました。

うーん、それで :arglists キーはなくなりましたか? では、あきらめます。どうすればよいでしょうか。:arglists の値を変更したいだけです。上記の例では defn を使用していますが、マクロ (defmacro) を使用して :arglists を設定する方法も知りたいです。

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

emacs - マクロでシンボル名を置換

マクロで作成された関数にシンボル名を代入するにはどうすればよいですか? ここで明らかな何かが欠けていると思います。たとえば、次のような変数と関数を定義するマクロを作成しようとしています。

fn返された関数は、次のようなシグネチャを持つ別の関数 ( ) を呼び出します。

したがって、 のような呼び出しを期待しています(fn 'some-var)。そして、次のようなマクロを使用できるようにしたい

そして、次の作業を行い、

(quote ,sym)、 、などを試しsymbol-nameましたが、うまくいきません。

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

emacs - Lisp マクロの let バインディングを条件付きで削除する

defuncreate in a lisp マクロの let バインディングを条件付きで削除するにはどうすればよいですか? ここで、結果の関数から最初の let バインド変数を削除したいのですがnil、let バインドに固執してエラーが発生するという問題が発生しています。

たとえば、結果の関数はletorlet*を使用し、 に応じて最初の変数割り当てを削除する必要がありますarg。しかし、私が問題を書いた方法は、に置き換えることから来てvar1nilます。nil を取り除く方法がわかりません。

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

emacs - 文字列変数をマクロ引数として使用する

このコードが欲しい:

と同じことを行います:

私はこれを試しました(からこの質問):

しかし、my-name-function という関数を取得しましたが、my-foobar-function が必要です。私の目標は、キーマップの連想リストからマイナー モードを定義することです。

ありがとう

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

closures - Pandoric マクロのシンボルをコンパイルするにはどうすればよいですか?

私はLOLのセクション 6.7 を数回読んだことがありますが、まだ次のことが頭に浮かびません。

以前は外部コードに対して閉じられていたバインディングは、それらのバインディングが効率的なものにコンパイルされ、長い間アクセサー シンボルが忘れられていたとしても、いじくり回せるように広く開かれています。

バインドされたシンボルが本質的にクロージャーの環境でポインターにコンパイルされる場合、どのようにしてシンボルを既にコンパイルされた関数に渡し、関数は何らかの方法でシンボルを比較できますか?

私はpantestclisp の例をいじっていますが、accthis内部の両方を変更できることがわかりpantestます。をコンパイルおよび逆アセンブルできますpantestが、すべてのシンボルが環境に表示されます。アセンブリにコンパイルされた Lisp があれば、もう少し直感的に理解できるかもしれませんが、コードが複雑すぎて、説明なしで理解するのはおそらく難しすぎるでしょう。

0 投票する
0 に答える
42 参照

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 つの質問に要約されます。

  1. 上記の理解で正しいですか?
  2. マクロに依存しているにもかかわらず、この関数をほぼ同じになるように再定義するという目標を達成するにはどうすればよいpython-rxですか?

助けてくれてありがとう!