問題タブ [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.
lisp - 関数定義にメタデータを自動的に追加するClojureマクロの作成を手伝ってください
Macro Clubの最初のルールはマクロを使用しないことであると理解しているので、次の質問は、他の何よりもClojureを学習するための演習として意図されています(これは必ずしもマクロの最良の使用ではないことを理解しています)。
(defn)
通常のマクロのラッパーとして機能し、定義された関数にメタデータを追加する単純なマクロを作成したいと思います。だから私はこのようなものが欲しいです:
...次のようなものに拡張します:
原則として、これは私にはそれほど難しいことではないように思われます[args]
が、定義された関数のおよびその他のフォームを正しく解析するための詳細を特定するのに苦労しています。
ボーナスとして、可能であれば、マクロがdefnのすべての異なる形式(つまり、docstring、複数のアリティ定義などの有無にかかわらず)を処理できるようにしたいと思います。clojure-contrib/def
パッケージには役立つと思われるものがいくつかありましたが、それらを使用したサンプルコードを見つけるのは困難でした。
clojure - :arglists を Clojure fn またはマクロに変更するにはどうすればよいですか?
clojure fn またはマクロの :arglist 属性を変更するにはどうすればよいですか?
わかりました、運が悪いので、次のことを試しました。
うーん、それで :arglists キーはなくなりましたか? では、あきらめます。どうすればよいでしょうか。:arglists の値を変更したいだけです。上記の例では defn を使用していますが、マクロ (defmacro) を使用して :arglists を設定する方法も知りたいです。
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の場合)がマクロVar
のdef
一部にメタデータを配置していることを知っているdefn
ので、単純な(meta #'funca)
ものが機能していますが、関数のメタデータを動的に取得する方法はありますか(map
上記の例のように)?
構文的に何かが足りないかもしれませんが、誰かが私を正しい方向または正しいアプローチに向けることができれば、それは素晴らしいことです。
ありがとう。
macros - 複数の関数メタデータを処理する Clojure マクロ
Clojure で、提供された関数のメタデータを処理して結果を返すライブラリ マクロを作成するにはどうすればよいですか? 関数の量は無制限であり、シーケンスにボックス化せずに渡す必要があります ((my-macro fn1 fn2)
の代わりに(my-macro [fn1 fn2])
)
たとえば、メタに :foo キーを持つ関数変数があり、マクロがそれらの値を連結するとします。次のスニペットは、REPL で機能するはずです (my-macro
名前空間にあることを考慮してください)。
いくつかのアプローチを試しましたが、これまでのところ単一の機能しか処理できませんでした。
ありがとう!
clojure - Clojureのマルチアリティ定義 - 最初のマッチファーストサーブ?
具体的には、次の状況で何が起こると考えられていますか。
つまり、ゼロ除算ではなく、常に 0 を返すように clojure に頼ることはできますか?
clojure - clojure - 関数本体または let ステートメントでの defn/def
関数の BODY からは、LET 句からアクセスできるのと同じ方法で defn の値にアクセスできないのはなぜですか?
clojure - Clojure が定義に使用する名前空間
仕様によるとdef
、現在の ns (つまり *ns*) で var をインターンする必要があります。ただし、次のコードは似ていません。
私は何が欠けていますか?
ノート:
defn
明確にするためにのみ使用されます。匿名関数の定義と実行も同様に機能します。def
内部関数を使用することは、おそらくあまり慣用的ではないことを私は知っています。ただし、これは私が遭遇したより大きな問題の本質を抽出したものです。
clojure - 乗数としての Clojure 定義名
*
次のコードで、関数の名前が最初の部分で(乗数)として機能する理由を説明できる人はいますか?
bar
2 つの引数を与える(bar 2 3)
と(* 2 3 100)