私は時々Clojureで関数の縮小されたアーリーバージョンを定義するのが便利であることが分かりました。reduce arity partial functionsを定義する
(defn prefix
([pre string]
(str pre ":" string))
([pre]
(fn [string]
(prefix pre string))))
これは、どちらかを行うことができますことを意味します
(prefix "foo" 78979)
=> "foo:78979"
((prefix "foo") 78979)
=> "foo:78979"
これは非常にHaskellのっぽいようで、部分関数を作成するpartial
の必要性を回避します。
しかし、Lispでは良いコーディングスタイル/ APIデザインと考えられていますか?
これはカリングです、はい?役に立つと思う。そして、私はここのインターフェイスを改善できると思います。このテクニックを一般的にすることができればうれしいでしょう。つまり、すべてのキーワードを持つ関数の場合、不完全なキーワードセットでその関数を呼び出すと、残りのすべてのキーワードを受け入れるクロージャが返されます。すべてのキーワードが使用されると、関数の値が取得されます。私はこれが最適化技術として使われているのを見ることができました。 –
私はそれが以下のように定義したときに読みやすさのために部分名を付けても、それは理想的だと思います:(def prefix(partial ...))これは参照する名前と明示的です。今はdefnを使用していませんが、def- partialはあなたのために関数を作成しています。 – KIMA