私はcore.cljを使用してLeiningen経由で作成したプロジェクトを作成しました。
(ns cotd.core
(:gen-class)
(:use [clojure.repl :only (doc)]))
(defmacro eval-doc
[form]
(let [resulting-symbol (eval form)]
`(doc ~resulting-symbol)))
(defn- random-function-name []
(rand-nth (keys (ns-publics 'clojure.core))))
(defn -main
"Display random doc page"
[& args]
(eval-doc (random-function-name)))
そして、コンパイルして実行した後は、常に同じ結果が得られます。
$ java -jar cotd.jar
-------------------------
clojure.core/unchecked-negate
([x])
Returns the negation of x, a long.
Note - uses a primitive operator subject to overflow.
$ java -jar cotd.jar
-------------------------
clojure.core/unchecked-negate
([x])
Returns the negation of x, a long.
Note - uses a primitive operator subject to overflow.
しかし、2つの連続した呼び出しで:
(do
(eval-doc (random-function-name))
(eval-doc (random-function-name))))
1回の「呼び出し」で2つの異なる結果が得られます。
私が試したのはグーグルや読書などですが、何が起こっているのかわかりません...
このrand-nthを動的に呼び出す方法は?