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

如何每次从重复的函数中得到不同的值?

暴博远
2023-03-14

我每次都得到10个相同的结果:

(repeat 10 (rand 10))
=> (2.54681114871718 2.54681114871718 2.54681114871718 2.54681114871718 2.54681114871718 2.54681114871718 2.54681114871718 2.54681114871718 2.54681114871718 2.54681114871718)

共有1个答案

邵沛
2023-03-14

我不会说这是因为记忆。repeat只是一个函数,因此在repeat可以运行之前,必须对(RAND10)进行求值。这意味着

(repeat 10 (rand 10))

需要首先计算其参数,并计算为(例如):

(repeat 10 2.54681114871718)

从这里,它应该清楚为什么它会一次又一次地返回相同的东西。

(defmacro repeatedlyM [n & body]
  `(repeatedly ~n (fn [] ~@body)))

(repeatedlyM 10 (rand 10))

(9.132286678823302
 9.767508843398039
 5.826387907720001
 2.2938644928402283
 8.673658990046192
 8.112592355036686
 2.9539038027898314
 2.721946311854755
 0.53309774963476
 7.258845714766884)

这是因为宏的参数不像普通函数那样在调用之前求值。(RAND10)是按字面理解的,放在函数内部,运行多次而不是一次。

不过,像另一个答案显示的那样,将代码包装在函数中并重复使用几乎肯定是更好的解决方案。

 类似资料:
  • 这是“Eloquent JavaScript”书中的一个例子(我想你知道这本书): 代码做什么并不重要。 问题是:据我所知,函数有两个不同的'body',即它做完全不同的事情。在第一个实例中,它做了很多逻辑,但第二次它,首先,有一个不同的第二个参数(而不是,其次,它只是将一个数组元素属性(即39人数组中一个人的死亡日期)除以100。 为什么同一个函数做不同的事情?我确实理解 同一个函数的这两个实例

  • 我有一个函数,使API调用服务器和更新用户界面与新数据。我想使,使每30秒我使API调用不同的url每次?这些API调用应该是不间断的,只要应用程序正在运行。

  • 问题内容: 假设和。我正在寻找最好的方法来重复精确的时间,然后以的形式放置一个扁平数组。 我想尽可能快地执行此操作,因为我必须执行多次。我正在使用Python和numpy,并且数组定义为numpy.ndarray。我周围中搜索和了解,并能很好地被用来重复每个元素次,但我想每个人重复不同的时间。 一种方法是: 我想知道是否有更好的方法。 问题答案: 这就是它的作用: 在纯Python中,您可以执行以

  • 问题内容: 我想每0.5秒触发一次功能,并且能够启动,停止和重置计时器。我不太了解Python线程的工作方式,并且在使用python计时器时遇到了困难。 但是,当我执行两次时,我会不断得到帮助。有没有解决的办法?我尝试在每次开始之前申请。 伪代码: 问题答案: 最好的方法是一次启动计时器线程。在计时器线程中,你需要编写以下代码 然后,在启动计时器的代码中,可以停止事件来停止计时器。

  • 我有一个应用程序,我正在做一些数据库操作。根据这些价值,我也在做一些计算。但是我得到了列表中每个值的多次迭代 我得到多个时间每个值为什么是这样。列表大小为5 这是我的代码,我在排队时得到了那个例外 但我不明白我错在哪里。谁来帮忙

  • 问题内容: 我有一个数组如下 预期结果 尝试如下 问题答案: 无需使用jQuery即可完成此任务-此示例将构建一个对象,其中包含数组中每个不同元素的出现次数