Random 保存程序生成的所有随机数,然后在racket中重用它们
我有一个项目打电话给随机号码,例如: 我有这样的调用:Random 保存程序生成的所有随机数,然后在racket中重用它们,random,input,racket,Random,Input,Racket,我有一个项目打电话给随机号码,例如: 我有这样的调用:(随机)生成0到1之间的数字,也有这样的调用:(随机n),生成范围内的数字 我想做的是把整个程序中生成的所有随机数放在一个文件中 我有以下代码: (require (rename-in racket [random random0])) (define random-port (open-output-file "random-numbers.rktl" #:exists 'replace)) (define (random x
(随机)
生成0到1之间的数字,也有这样的调用:(随机n)
,生成范围内的数字
我想做的是把整个程序中生成的所有随机数放在一个文件中
我有以下代码:
(require (rename-in racket [random random0]))
(define random-port (open-output-file "random-numbers.rktl" #:exists 'replace))
(define (random x)
(define y (random0 x))
(displayln y random-port)
y)
但这不仅仅适用于(random
),而是适用于(random n
)。有没有办法让这两种方法都奏效
第二,如果我有多个使用random
的模块,我可以把这些代码放在哪里
最后,出于某种原因,当我写这样的东西时:
(for ([i (in-range 100000)]) (random 10))
文件中显示的数字没有问题
但是当我写这个:(随机10)
,我会得到一个空文件
任何帮助都将不胜感激。谢谢大家! 听起来你遇到了很多问题,然后我有一些一般性的建议 第一:你说它不适用于
(随机)
。如果我理解正确,您希望能够定义一个可以用一个或零个参数调用的函数。有多种方法可以做到这一点,但最简单的方法可能是使用可选参数:
#lang racket
(define (my-random [limit #f])
(cond [limit (random limit)]
[else (random)]))
(my-random 13)
(random)
接下来,您将讨论如何在调用(随机10)
时获得一个空文件。我强烈怀疑问题在于您没有关闭输出端口,这是刷新输出所必需的。您可以调用(关闭输出端口随机端口)
(尽管随机端口
不是这个变量的好名字…)
不过,接下来,我有两个建议是您没有要求的:)
首先,我不会重命名random
函数;相反,我只想用一个新名称定义我自己的函数,就像我上面所做的那样。如果问题是您有一堆使用random
的现有代码,那么您可以在导入时进行重命名
第二,更重要的是:处理这个问题的标准方法(我想看看生成的随机数)不是记录所有生成的数字,而是使用一个已知的种子来生成随机数。因此,例如,如果您调用(随机种子277819)
,您将始终得到相同的随机数序列。使用随机种子
,您不需要存储随机数的完整列表,只需要存储初始种子
这种美中不足之处在于,您确实需要知道random
的参数。例如,你需要知道,你用参数14调用了两次random,然后没有任何参数调用了一次