【发布时间】:2012-07-30 23:08:12
【问题描述】:
如何创建惰性随机数序列?
我当前的代码:
(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)))
执行它会引发异常:
(线程“main”clojure.lang.ArityException 中的异常:传递给的 args (1) 数量错误:user$random-numbers$fn 在 clojure.lang.AFn.throwArity(AFn.java:437) 在 clojure.lang.AFn.invoke(AFn.java:39) 在 clojure.core$iterate$fn__3870.invoke(core.clj:2596) 在 clojure.lang.LazySeq.sval(LazySeq.java:42) 在 clojure.lang.LazySeq.seq(LazySeq.java:60) 在 clojure.lang.RT.seq(RT.java:466) 在 clojure.core$seq.invoke(core.clj:133) 在 clojure.core$take$fn__3836.invoke(core.clj:2499) 在 clojure.lang.LazySeq.sval(LazySeq.java:42) 在 clojure.lang.LazySeq.seq(LazySeq.java:60) 在 clojure.lang.Cons.next(Cons.java:39) 在 clojure.lang.RT.next(RT.java:580) 在 clojure.core$next.invoke(core.clj:64) 在 clojure.core$nthnext.invoke(core.clj:2752) 在 clojure.core$print_sequential.invoke(core_print.clj:57) 在 clojure.core$fn__4990.invoke(core_print.clj:140) 在 clojure.lang.MultiFn.invoke(MultiFn.java:167) 在 clojure.core$pr_on.invoke(core.clj:3264) 在 clojure.core$pr.invoke(core.clj:3276) 在 clojure.lang.AFn.applyToHelper(AFn.java:161) 在 clojure.lang.RestFn.applyTo(RestFn.java:132) 在 clojure.core$apply.invoke(core.clj:600) 在 clojure.core$prn.doInvoke(core.clj:3309) 在 clojure.lang.RestFn.applyTo(RestFn.java:137) 在 clojure.core$apply.invoke(core.clj:600) 在 clojure.core$println.doInvoke(core.clj:3329) 在 clojure.lang.RestFn.invoke(RestFn.java:408) 在用户 $eval7.invoke(testing.clj:12) 在 clojure.lang.Compiler.eval(Compiler.java:6465) 在 clojure.lang.Compiler.load(Compiler.java:6902) 在 clojure.lang.Compiler.loadFile(Compiler.java:6863) 在 clojure.main$load_script.invoke(main.clj:282) 在 clojure.main$script_opt.invoke(main.clj:342) 在 clojure.main$main.doInvoke(main.clj:426) 在 clojure.lang.RestFn.invoke(RestFn.java:408) 在 clojure.lang.Var.invoke(Var.java:401) 在 clojure.lang.AFn.applyToHelper(AFn.java:161) 在 clojure.lang.Var.applyTo(Var.java:518) 在 clojure.main.main(main.java:37) [3.8s 完成,退出码 1]
这是一个完全错误的方法,因为我使用的是状态,即 r 是 java.util.Random 的一个实例,还是只是一个 nooby 语法错误?
我只是在自己研究clojure,所以请多多包涵:)。
【问题讨论】:
-
感谢您包含整个堆栈跟踪。在这里它不是真的必要,但它可以提供巨大的帮助,而且人们通常不会打扰。
标签: clojure