問題タブ [defn]

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

lisp - 関数定義にメタデータを自動的に追加するClojureマクロの作成を手伝ってください

Macro Clubの最初のルールはマクロを使用しないことであると理解しているので、次の質問は、他の何よりもClojureを学習するための演習として意図されています(これは必ずしもマクロの最良の使用ではないことを理解しています)。

(defn)通常のマクロのラッパーとして機能し、定義された関数にメタデータを追加する単純なマクロを作成したいと思います。だから私はこのようなものが欲しいです:

...次のようなものに拡張します:

原則として、これは私にはそれほど難しいことではないように思われます[args]が、定義された関数のおよびその他のフォームを正しく解析するための詳細を特定するのに苦労しています。

ボーナスとして、可能であれば、マクロがdefnのすべての異なる形式(つまり、docstring、複数のアリティ定義などの有無にかかわらず)を処理できるようにしたいと思います。clojure-contrib/defパッケージには役立つと思われるものがいくつかありましたが、それらを使用したサンプルコードを見つけるのは困難でした。

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

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

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

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

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

0 投票する
3 に答える
886 参照

function - Clojure関数のメタデータを動的に取得する

環境:Clojure 1.4

関数のベクトルから関数のメタデータを動的に取得しようとしています。

現在、REPLでのメタデータの取得は(ある程度)簡単です。

:ansただし、メタデータから、、、:tau-or-piまたは基本を取得するためにマップを実行しようとすると:name、例外が発生します。

さらに検索を行った後、2009年の投稿(https://groups.google.com/forum/?fromgroups=#!topic/clojure/VyDM0YAzF4o)から次のアイデアを得ました。

defnマクロ(Clojure 1.4の場合)がマクロVardef一部にメタデータを配置していることを知っているdefnので、単純な(meta #'funca)ものが機能していますが、関数のメタデータを動的に取得する方法はありますか(map上記の例のように)?

構文的に何かが足りないかもしれませんが、誰かが私を正しい方向または正しいアプローチに向けることができれば、それは素晴らしいことです。

ありがとう。

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

macros - 複数の関数メタデータを処理する Clojure マクロ

Clojure で、提供された関数のメタデータを処理して結果を返すライブラリ マクロを作成するにはどうすればよいですか? 関数の量は無制限であり、シーケンスにボックス化せずに渡す必要があります ((my-macro fn1 fn2)の代わりに(my-macro [fn1 fn2]))

たとえば、メタに :foo キーを持つ関数変数があり、マクロがそれらの値を連結するとします。次のスニペットは、REPL で機能するはずです (my-macro名前空間にあることを考慮してください)。

いくつかのアプローチを試しましたが、これまでのところ単一の機能しか処理できませんでした。

ありがとう!

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

clojure - Clojureのマルチアリティ定義 - 最初のマッチファーストサーブ?

具体的には、次の状況で何が起こると考えられていますか。

つまり、ゼロ除算ではなく、常に 0 を返すように clojure に頼ることはできますか?

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

clojure - clojure - 関数本体または let ステートメントでの defn/def

関数の BODY からは、LET 句からアクセスできるのと同じ方法で defn の値にアクセスできないのはなぜですか?

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

clojure - Clojure が定義に使用する名前空間

仕様によるとdef、現在の ns (つまり *ns*) で var をインターンする必要があります。ただし、次のコードは似ていません。

私は何が欠けていますか?

ノート:

  • defn明確にするためにのみ使用されます。匿名関数の定義と実行も同様に機能します。
  • def内部関数を使用することは、おそらくあまり慣用的ではないことを私は知っています。ただし、これは私が遭遇したより大きな問題の本質を抽出したものです。
0 投票する
2 に答える
63 参照

clojure - 乗数としての Clojure 定義名

*次のコードで、関数の名前が最初の部分で(乗数)として機能する理由を説明できる人はいますか?

bar2 つの引数を与える(bar 2 3)(* 2 3 100)

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

macros - setを含む関数定義のマクロ!Clojurescript で動作しない

次のことを行うマクロを定義しようとしています。

  • 「変数」を初期値にバインドする
  • 変数名に基づいた名前で setter メソッドを作成する

clojure ファイルで次のように定義しています。

次のように clojurescript から呼び出すと (cmacros は名前空間のエイリアスです):

「生産」と「生産-その他」の定義は正しく、機能「生産-11」は機能します(そして生産の値を11に設定します)が、最後のものは機能しません。さまざまなブラウザーでさまざまなエラーが発生します。Chrome で「Uncaught SyntaxError: Unexpected token .」と表示されます。Firefox "SyntaxError: 形式パラメーターの後に ) がありません"。

Firefox によって指摘された問題のある JavaScript コードは次のようになります。

私はjsの専門家ではありませんが、括弧はすべて正しいようです。何がうまくいかないのですか?-11 定義は機能するのに -set が機能しないのはなぜですか?

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

clojure - defn マクロで、関数名の前のキャレットで始まる引数は何を意味しますか?

関数定義では:

^boolean関数定義の部分はどういう意味ですか? メタデータを拡張してリターンの種類を示すだけですか、それとももっと深い意味がありますか? 言い換えれば、単純にコードをより自己記述的にする以上の付加価値があるのでしょうか?