在haskell中编程时,:type
命令非常有用。
通过了解函数的arity和签名,我们可以快速理解某些构造的目的。
例如:
Prelude Control.Monad.Reader> :type (lift .)
(lift .) :: (Monad m, MonadTrans t) => (a -> m a1) -> a -> t m a1
在知道函数的arity时是否存在等效的clojure(类型与clojure无关)?
例如,在我意识到( - )和(*)具有可变的arity之前,乍一看我并不容易理解波纹管组成:
(comp - *)
答案 0 :(得分:2)
就个人而言,我使用REPL。特别是(doc), (source), (find-doc)
实用程序。
例如:
用户=> (doc map)
clojure.core /图
([f coll] [f c1 c2] [f c1 c2 c3] [f c1 c2 c3& colls])
返回一个惰性序列,包含将f应用于的结果 每个coll的第一项的集合,然后将f应用于集合 每个coll中的第二个项目,直到任何一个colls 筋疲力尽。
其他colls中的任何剩余项都将被忽略。函数f应该接受colls of colls参数。
如您所见,很容易找到arity。
我同意Haskell在这方面是首屈一指的。
答案 1 :(得分:1)
函数的参数列表存储在函数元数据中,您可以使用meta
获取:
(:arglists (meta #'*))