如何有效地生成方案中的百万随机元素列表?以下代码本身达到最大递归深度为0.1百万.
(unfold (lambda(x)(= x 1000000)) (lambda(x)(random 1000)) (lambda(x)(+ x 1)) 0)
Run Code Online (Sandbox Code Playgroud)
这实际上取决于您使用的系统,但这是在普通方案中执行此操作的常用方法:
(let loop ([n 1000000] [r '()])
(if (zero? n)
r
(loop (- n 1) (cons (random 1000) r))))
Run Code Online (Sandbox Code Playgroud)
关于运行此代码的一个注意事项是:如果您只是将其键入REPL,它将导致打印结果列表,这通常会涉及使用比列表更多的内存.所以最好做一些类似的事情
(define l ...same...)
Run Code Online (Sandbox Code Playgroud)
还有许多其他工具可用于不同程度的便利性. unfold
是其中之一,另一个是PLT方案中for
可以找到的循环:
(for/list ([i (in-range 1000000)]) (random 1000))
Run Code Online (Sandbox Code Playgroud)