2012-11-25 4 views
0

j'ai projet créé par Leiningen avec core.clj:rand-nième donne toujours le même résultat après la compilation

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

Après la compilation et l'exécuter des rendements toujours le même résultat:

$ 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. 

Mais avec deux appels consécutifs:

(do 
    (eval-doc (random-function-name)) 
    (eval-doc (random-function-name)))) 

Il cède en simple « appel » deux résultats différents.

Ce que j'ai essayé est googler, la lecture, etc., mais je n'ai pas d'indices sur ce qui se passe ...

Comment appeler cette rand-nième dynamique?

Répondre

2

Le problème n'était pas avec rand-nth mais parce que le symbole résultant dans l'instruction let est produit pendant la phase de compilation. @beyamor fourni réponse ici: Unable to get random (doc) from a namespace

Questions connexes