gpt4 book ai didi

function - Clojure 核心库中大约有多少个函数?

转载 作者:行者123 更新时间:2023-12-02 14:42:32 25 4
gpt4 key购买 nike

Common Lisp 的核心库中有超过 700 个函数。 Clojure 的库中大约有多少个?

(其中“核心库”定义为当您在 project.clj 中包含 [org.clojure/clojure "1.5.1"] 时您可以访问的所有内容>)

最佳答案

(更新:受这个问题的启发,我发布了 Varspotting ,一个 Leiningen 插件和库,用于生成此类数据的报告。Clojure 1.5.1 的报告显示在 README 中;另请参阅我在下面对这些数字的评论。这些计数与下面答案中的计数之间的细微差别是 REPL 环境的结果,其中包括 Varspotting 从其计数中省略的某些绑定(bind)。)

使用 Clojure 1.5.1。

clojure.core 命名空间:

  1. 公共(public)变量:

    (count (ns-publics 'clojure.core))
    ;= 591
  2. 保存非宏函数的公共(public)变量(过滤函数旨在排除保存映射的 6 个变量,请参阅下文了解如何查找它们;目前没有要排除的集合或向量):

    (->> (ns-publics 'clojure.core)
    vals
    (filter #(not (.isMacro %)))
    (map deref)
    (filter (every-pred ifn? (comp not map?)))
    count)
    ;= 477
  3. 通过上面过滤器中的#(.isMacro %),我们发现有76个公共(public)宏。

  4. 可以通过以下代码段发现 32 个不包含类似函数值的公共(public)变量:

    (->> (ns-publics 'clojure.core)
    vals
    (remove (comp ifn? deref)))
  5. 使用 (filter (comp map? deref)) 而不是上面的 (remove ...) 来查找保存映射值的 6 个变量.

对于 Clojure jar 中的所有命名空间,与 2. 相同(跳过已弃用的 clojure.parallel 并另外排除持有向量的两个 Var;此时没有要排除的集合;希望没有)没有错过任何其他内容):

(dorun (map require '[clojure.core clojure.data clojure.edn clojure.inspector
clojure.instant clojure.java.browse clojure.java.javadoc
clojure.java.io clojure.java.shell
clojure.main clojure.pprint clojure.reflect clojure.repl
clojure.set clojure.stacktrace clojure.string
clojure.template clojure.test clojure.walk clojure.xml
clojure.zip]))

(->> (mapcat ns-publics
'[clojure.core
clojure.data
clojure.edn
clojure.inspector
clojure.instant
clojure.java.browse
clojure.java.javadoc
clojure.java.io
clojure.java.shell
clojure.main
clojure.pprint
clojure.reflect
clojure.repl
clojure.set
clojure.stacktrace
clojure.string
clojure.template
clojure.test
clojure.walk
clojure.xml
clojure.zip])
vals
(filter #(not (.isMacro %)))
(map deref)
(filter (every-pred ifn? (comp not map?) (comp not vector?)))
count)
;= 676

对于宏,总计数为 99。

关于function - Clojure 核心库中大约有多少个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17524906/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com