random-docs (2014年の最初の記事)
あけましておめでとうございます。
昨年末は F# の勉強ばかりしていて、そろそろ Clojure 熱も上がってきたのでなんとなく思いつきで書いてみました。小ネタです。
clojure.core の doc string をたまには思い出そうと。本当は twitterの bot にでもすれば一番いいのですが、doc string が140文字を楽勝で超えてしまう関数もいっぱいあるので、「時折思い出させる」仕掛けをどうするかは、別途考え中です。
(defn get-doc-string
  [ns sym]
  (let [wrt (java.io.StringWriter.)]
    (binding [*out* wrt]
      (->> (ns-resolve ns sym)
           (meta)
           (#'clojure.repl/print-doc)))
    (.toString wrt)))
(def syms (-> 'clojure.core ns-map keys sort))
(def clojure-core-docs (->> syms (map #(get-doc-string 'clojure.core %))))
(defn random-docs
  []
  (println (rand-nth clojure-core-docs)))
                clojure.doc/doc 相当のことをやろうとして、clojure.repl/doc を見てみたら、private な関数 clojure.repl/print-doc を呼んでいたので、#' をつけています。
Usage:
user> (random-docs) ------------------------- clojure.core/not-every? ([pred coll]) Returns false if (pred x) is logical true for every x in coll, else true. nil user> (random-docs) ------------------------- clojure.core/rational? ([n]) Returns true if n is a rational number nil user>
新年一発目は小ネタということで。今年もよろしくお願いします。
