1

haskell でプログラミングする場合、この:typeコマンドは非常に役立ちます。関数のアリティとシグネチャを知ることで、ある構造の目的をすぐに理解できます。例えば:

Prelude Control.Monad.Reader> :type (lift .)
(lift .) :: (Monad m, MonadTrans t) => (a -> m a1) -> a -> t m a1

関数のアリティを知るための clojure に相当するものはありますか (型は clojure では関係ありません)。

たとえば、(-) と (*) が可変アリティを持っていることに気付くまで、一見すると次の構成を理解するのは簡単ではありませんでした。

(comp - *)
4

2 に答える 2

2

個人的には、REPL を使用します。特に(doc), (source), (find-doc)ユーティリティ。

例えば:

user=> (doc map)
clojure.core/map
([f coll] [f c1 c2] [f c1 c2 c3] [f c1 c2 c3 & colls])
f を各 coll の最初のアイテムのセットに続いて、coll のいずれかが使い果たされるまで、各 coll の 2 番目のアイテムのセットに f を適用します。
他の coll 内の残りのアイテムは無視されます。関数 f は、number-of-colls 引数を受け入れる必要があります。

ご覧のとおり、アリティを見つけるのは簡単です。

私は Haskell がこの分野で誰にも負けないことに同意します。

于 2014-10-15T15:41:25.317 に答える
1

関数の引数リストは、次を使用して取得できる関数メタデータに格納されますmeta

(:arglists (meta #'*))
于 2014-10-15T15:42:25.637 に答える