詳細については、一度に1ステップずつ詳しく見てください。
あなたの目標はfn-apply-cmp-vals
を匿名機能としてapply-cmp-vals
にインライン化することです。だからまずそれをやりましょう。ここにあなたの機能はありません、他の変更を次のようになります。
(defn apply-cmp-vals
[cmp-vec cmp-vals cmp-vec-idx]
(let [fn-cmp ((fn [f cmp-sos cmp-idx] (partial f cmp-sos cmp-idx))
ret-non-match-rows cmp-vec cmp-vec-idx)]
(map #(fn-cmp %1) cmp-vals)))
これは、あなたの目標を達成したが、改善の余地があります。あなたの関数は単に指定された引数でpartial
を呼び出すので、正しい引数でpartial
への直接呼び出しで無名関数を置き換えることができます。これは、partial
が部分的に適用された関数を返すために機能します。
(defn apply-cmp-vals
[cmp-vec cmp-vals cmp-vec-idx]
(let [fn-cmp (partial ret-non-match-rows cmp-vec cmp-vec-idx)]
(map #(fn-cmp %1) cmp-vals)))
ここで、fn-cmp
が使用されています。これは、単一の引数を持つ独自の無名関数で呼び出されています。あなたの部分関数がこの要件を満たすので、fn-cmp
をmap関数に直接渡すことができます。
(defn apply-cmp-vals
[cmp-vec cmp-vals cmp-vec-idx]
(let [fn-cmp (partial ret-non-match-rows cmp-vec cmp-vec-idx)]
(map fn-cmp cmp-vals)))
は最後に、あなたが望むならば、あなたは完全にlet
フォームを削除することができます
(defn apply-cmp-vals
[cmp-vec cmp-vals cmp-vec-idx]
(map (partial ret-non-match-rows cmp-vec cmp-vec-idx) cmp-vals)))
だから、それはあなたがすべてで無名関数を必要としなかったが判明します!私はあなたが探しているものだと思い
ありがとうございました。私はこれをチェックするつもりです。 – octopusgrabbus
'#(ret-non-match-rows cmp-vec cmp-vec-idx%1)'の代わりに '(部分一致不一致行' cmp-vec cmp-vec-idx) 'を直接マップすることもできます最後の解決策で –
@RafałDowgird、はい、良い点。 – Jeremy