Racket 建立一个随机列表
我正在尝试编写一个函数,它接受一个列表的长度和一个最大值,并返回一个列表,该列表的长度是给定的,数字在1和给定的最大值之间 到目前为止我有Racket 建立一个随机列表,racket,Racket,我正在尝试编写一个函数,它接受一个列表的长度和一个最大值,并返回一个列表,该列表的长度是给定的,数字在1和给定的最大值之间 到目前为止我有 (define (randomlist n max) (cond [(= n 0)empty] [else (cons (build-list n (random 1 max)) (randomlist max (- n 1)))])) 运行此程序时,我遇到一个错误,不知道是否有人可以帮我解决。您的代码中有几个错
(define (randomlist n max)
(cond
[(= n 0)empty]
[else
(cons (build-list n (random 1 max))
(randomlist max (- n 1)))]))
运行此程序时,我遇到一个错误,不知道是否有人可以帮我解决。您的代码中有几个错误:
- 调用与内置过程冲突的参数
,这是个坏主意。因此我将其重命名为max
mx
- 绝对没有理由使用
,这不是我们构建输出列表的方式,只是构建列表
一个元素和其余元素cons
接收零个或一个参数,而不是两个。单参数版本返回范围random
的整数,因此我们必须将0..n-1
添加到范围1
的结果中1..n
- 递归调用
时,您切换了参数的顺序randomlist
(define (randomlist n mx)
(cond
[(= n 0) empty]
[else
(cons (+ 1 (random mx))
(randomlist (- n 1) mx))]))
它按预期工作:
(randomlist 5 10)
=> '(10 7 1 4 8) ; results will vary, obviously
您的代码中有几个错误:
- 调用与内置过程冲突的参数
,这是个坏主意。因此我将其重命名为max
mx
- 绝对没有理由使用
,这不是我们构建输出列表的方式,只是构建列表
一个元素和其余元素cons
接收零个或一个参数,而不是两个。单参数版本返回范围random
的整数,因此我们必须将0..n-1
添加到范围1
的结果中1..n
- 递归调用
时,您切换了参数的顺序randomlist
(define (randomlist n mx)
(cond
[(= n 0) empty]
[else
(cons (+ 1 (random mx))
(randomlist (- n 1) mx))]))
它按预期工作:
(randomlist 5 10)
=> '(10 7 1 4 8) ; results will vary, obviously
还可以使用
for/list
组合循环和列表形成:
(define (randomlist n mx)
(for/list ((i n))
(add1 (random mx))))
测试:
(randomlist 5 10)
输出:
'(5 9 10 4 7)
(随机数,因此每次输出很可能不同)。也可以使用
for/list
将循环和列表形成结合起来:
(define (randomlist n mx)
(for/list ((i n))
(add1 (random mx))))
测试:
(randomlist 5 10)
输出:
'(5 9 10 4 7)
(随机数,因此每次输出都很可能不同)。这有助于了解您得到的错误。为什么您要切换
n
和max
的顺序?这将有助于了解您得到的错误。为什么您要切换n
和max
的顺序?@JohnC如果这个或任何其他答案解决了您的问题,别忘了做这件事;)很简单,只需点击左边的复选标记。@JohnC如果这个或任何其他答案解决了您的问题,请不要忘记;)很简单,只需点击左边的复选标记。