当前位置: 首页 > 知识库问答 >
问题:

如何在clojure中创建懒散的随机数序列

狄英哲
2023-03-14

我如何创建一个懒散的随机数序列?

(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中的异常:传递给: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.cljj:2596)at clojure.lang.lazyseq.sval(lazyseq.java:42)at clojure.lang.lazyseq.seq(lazyseq.java:60)atyToHelper(afn.java:161)在clojure.lang.restfn.applyTo(restfn.java:132)在clojure.core$apply.invoke(core.cljj:600)在clojure.core$prn.doinvoke(core.clja:137)在clojure.core$apply.invoke(core.clja:137)在clojure.core$println.doinvoke(core.clja:600)在clojure.core

这是一个完全错误的方法吗,因为我使用的是state,即r是java.util.Random的一个实例,还是仅仅是一个nooby语法错误?

我只是在自己学习clojure,所以请耐心等待:)。

共有1个答案

鲜于意
2023-03-14

repeature对于重复运行函数并在seq中收集结果非常有用

user> (take 10 (repeatedly #(rand-int 42)))
(14 0 38 14 37 6 37 32 38 22)

至于您最初的方法:iterate接受一个参数,将它提供给一个函数,然后接受它的结果,并将它传递回同一个函数。我并不完全是你想要的,因为你正在使用的函数不需要任何参数。当然,您可以为该参数提供一个占位符并使其工作,不过repeature可能更合适。

(defn random-numbers [max]
  (iterate (fn [ignored-arg] (.nextInt r max)) (.nextInt r max)))
#'user/random-numbers

user> (println (take 5 (random-numbers 10)))
(3 0 0 2 0)
 类似资料:
  • 问题内容: 这个问题:如何生成随机BigInteger描述了一种与BigIntegers实现与Random.nextInt(int n)相同的语义的方法。 我想对BigDecimal和Random.nextDouble()做同样的事情。 上述问题的一个答案建议创建一个随机的BigInteger,然后从中以随机的比例创建一个BigDouble。一个非常快速的实验表明这是一个非常糟糕的主意:) 我的直

  • 问题内容: 我正在用python创建一个项目,我想创建一个加密安全的随机数,我该怎么做?我已经在线阅读了常规随机生成器生成的数字不是密码安全的信息,并且该函数返回的是我的字符串,而不是数字。 问题答案: 您可以通过将函数应用于所返回的字节来获取随机数列表,如下所示 报价文件, 返回 适合加密使用* 的随机字节字符串。 * 该函数从特定于操作系统的随机性源返回随机字节。尽管返回的数据的确切质量取决于

  • 问题内容: 我正在运行一个网站,并且有一个计分系统,可为您提供玩游戏次数的积分。 它使用散列来证明http请求评分的完整性,因此用户无法更改任何内容,但是正如我担心的那样,有人发现他们不需要更改它,他们只需要获得高分并复制http请求,标头和所有。 以前,我被禁止防御此攻击,因为它被认为不太可能。但是,既然已经发生,我可以。http请求源自Flash游戏,然后由php验证,然后php将其输入数据库

  • 问题内容: 我想创建一个随机的整数列表以进行测试。数字的分布并不重要。唯一要数的是 时间 。我知道生成随机数是一项耗时的任务,但是必须有更好的方法。 这是我当前的解决方案: v2比v1快,但无法大规模使用。它给出以下错误: ValueError:样本大于总体 是否有一个快速,有效的解决方案能够在这种规模上工作? 答案的一些结果 安德鲁的:0.000290962934494 咬人:0.0058455

  • 问题内容: 我正在尝试kafka.utils.ZKStringSerializer用clojure创建一个scala对象。(在org.apache.kafka/kafka_2.10 “0.8.0”) 由于我对scala知之甚少,所以我不知道如何调用它的构造函数。我这样尝试过: 并得到一个错误: 我尝试使用来查看其方法,但是只有一些静态方法。并告诉我这是一类,而不是我想要的实例。 该对象的实现如下:

  • 我想知道如何在Clojure中包含随机数。我想出了这个: 看起来Java只有包含/排他的随机函数。根据文件: nextDouble的一般约定是伪随机生成并返回一个double值,该值(近似)均匀地从0.0D(含)到1.0D(不含)的范围中选择。 有没有一种方法可以有一个包含/包含这个函数的版本。我正在考虑用一个微小的位(0.0000000000000001)来增加最大值。不确定如果我这样做会有什么