簡體   English   中英

Clojure核心庫中有多少函數?

[英]Roughly how many functions are in the Clojure core libraries?

Common Lisp在其核心庫中有700多個函數。 Clojure在其庫中大概有多少?

(在您的project.clj包含[org.clojure/clojure "1.5.1"] ,'核心庫'被定義為您可以訪問的所有內容)

(更新:受這個問題的啟發,我發布了Varspotting ,一個Leiningen插件和庫,用於生成此類數據的報告.Clojure 1.5.1的報告顯示在README中;另請參閱下面的評論以獲取數字。這些計數與下面答案中的細微差別是REPL環境的結果,包括Varspotting從其計數中省略的某些綁定。)

使用Clojure 1.5.1。

clojure.core命名空間:

  1. 公共場合:

     (count (ns-publics 'clojure.core)) ;= 591 
  2. 保存非宏函數的公共變量(過濾函數用於排除保存地圖的6個變量,請參見下文,了解如何找到它們;此時沒有要排除的集合或向量):

     (->> (ns-publics 'clojure.core) vals (filter #(not (.isMacro %))) (map deref) (filter (every-pred ifn? (comp not map?))) count) ;= 477 
  3. 在上面的filter使用#(.isMacro %) ,我們發現有76個公共宏。

  4. 使用此代碼段可以發現32個不具有類似函數值的公共變量:

     (->> (ns-publics 'clojure.core) vals (remove (comp ifn? deref))) 
  5. 使用(filter (comp map? deref))代替上面的(remove ...)來查找6個Vars,保存地圖值。

與Clojure jar中的所有名稱空間相同(跳過已棄用的clojure.parallel並另外排除兩個Vars保持向量;此時沒有要排除的集合;希望沒有遺漏任何其他內容):

(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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM