如何創建一個隨機數的惰性序列?如何在clojure中創建一個隨機數的惰性序列
我當前的代碼:
(import '(java.util Random))
(def r (new Random))
(defn rnd [_]
(.nextInt r 10))
(defn random-numbers [max]
(iterate #(.nextInt r max) (.nextInt r max)))
(println (take 5 (random-numbers 10)))
執行它拋出異常:
(在線程 「主」 clojure.lang.ArityException異常:ARGS(1)傳遞到的錯誤數量: user $ random-numbers $ fn at clojure.lang.AFn.throwArity(AFn.java:437) at clojure.lang.AFn.invoke(AFn.java:39) at clojure.core $ iterate $ fn_ 3870 .invoke(core.clj:2596) at clojure.lang。 LazySeq.sval(LazySeq.java:42) 在clojure.lang.LazySeq.seq(LazySeq.java:60) 在clojure.lang.RT.seq(RT.java:466) 在clojure.core $起。 invoke(core.clj:133) at clojure.core $ take $ fn _3836.invoke(core.clj:2499) at clojure.lang.LazySeq.sval(LazySeq.java:42) at clojure.lang。 LazySeq.seq(LazySeq.java:60) at clojure.lang.Cons.next(Cons.java:39) at clojure.lang.RT.next(RT.java:580) at clojure.core $ next。在clojure.core $ nthnext.invoke(core.clj:2752) clojure.core $ print_sequential.invoke(core_print.clj:57) $ fn__4990.invoke(core.clj:64) core_print.clj:140) at clojure.lang.MultiFn.invoke(MultiFn.java:167) at clojure.core $ pr_on.invoke(core.clj:3264) at clojure.core $ pr.invoke(core.clj:3276) at clojure.lang.AFn.applyToHelper(AFn.java:161) at clojure.lang.RestFn.applyTo(RestFn.java:132) at clojure.core $ apply.invoke(core.clj:600) at clojure。核心$ prn.doInvoke(core.clj:3309) at clojure.lang.RestFn.applyTo(RestFn.java:137) at clojure.core $ apply.invoke(core.clj:600) at clojure.core $ println.doInvoke(core.clj:3329) at clojure.lang.RestFn.invoke(RestFn.java:408) at user $ eval7.invoke(testing.clj:12) at clojure.lang.Compiler.eval(比較(編譯器.java:6602) 在clojure.lang.Compiler.loadFile(Compiler.java:6863) at clojure.main $ load_script.invoke(main。在clojure.main $ main.doInvoke(main.clj:426)處使用clojure.main $ script_opt.invoke(main.clj:342) 。clojure.lang.RestFn.invoke(RestFn.java:282) at clojure.main $ main.doInvoke(main.clj:426) 408) at clojure.lang.Var.invoke(Var.java:401) at clojure.lang.AFn.applyToHelper(AFn.java:161) at clojure.lang.Var.applyTo(Var.java:518) at clojure.main.main(main.java:37) [在3.8s中完成並帶有退出代碼1]
這是一個完全錯誤的方法,因爲我正在使用狀態,即r是java.util.Random的一個實例,還是它只是一個nooby語法錯誤?
我只是在研究自己的clojure,所以請裸露我:)。
感謝包括整個堆棧跟蹤。這裏並不是真的有必要,但它可以幫助很大,而且往往人們不會打擾。 – amalloy 2012-07-31 18:36:06