Lan*_*ana 3 random input racket
我有一个项目调用随机数,例如:
我的调用看起来像这样:(random)生成0到1之间的数字,也可以这样调用:(random 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)
Run Code Online (Sandbox Code Playgroud)
但这不适用于just(random),而是适用于(random n).反正有没有让它适用于两者?
其次,如果我有多个模块使用,我可以在哪里放这个代码random?
最后,出于某种原因,当我写这样的东西时:
(for ([i (in-range 100000)]) (random 10))
Run Code Online (Sandbox Code Playgroud)
数字在文件中显示没有问题,
但是当我这样写:(random 10)我会得到一个空文件.
任何帮助将非常感激.谢谢!
听起来你遇到了很多问题,然后我有一些一般的建议.
第一:你说它不起作用(random).如果我理解正确,您希望能够定义一个可以使用一个或零参数调用的函数.有很多方法可以做到这一点,但最简单的方法是使用可选参数:
#lang racket
(define (my-random [limit #f])
(cond [limit (random limit)]
[else (random)]))
(my-random 13)
(random)
Run Code Online (Sandbox Code Playgroud)
接下来,您将谈谈在致电时如何获得空文件(random 10).我强烈怀疑问题是你没有关闭输出端口,这是为了刷新输出所必需的.你可以打电话(close-output-port random-port)(虽然random-port这个变量不是一个好名字......).
接下来,我有两个建议,你没有要求:).
首先,我不会重命名该random功能; 相反,我会用一个新名称定义我自己的函数,就像我上面所做的那样.如果问题是您有一堆使用的现有代码random,那么您可以在导入时重命名.
第二,甚至更大:处理这个问题的标准方法(我希望看到生成的随机数)不是记录所有生成的数字,而是仅使用已知种子生成随机数.因此,例如,如果您打电话(random-seed 277819),您将始终获得相同的随机数序列.使用时random-seed,您不需要存储随机数的完整列表,只需存储初始种子即可.
这种药膏唯一的好处就是你确实需要知道这些论点random.因此,例如,您需要知道您使用参数14随机调用两次,然后一次不带任何参数.