我正在尝试编写一个函数,它接受列表的长度和最大数值,并返回一个列表,该列表的长度在1和给定的最大值之间随机给出。
到目前为止我已经
了(define (randomlist n max)
(cond
[(= n 0)empty]
[else
(cons (build-list n (random 1 max))
(randomlist max (- n 1)))]))
我在运行时遇到错误,并且想知道是否有人可以帮助我。
答案 0 :(得分:1)
您的代码中存在多个错误:
*
是一个坏主意。所以我将其重命名为max
。mx
,这不是我们如何构建输出列表,只有build-list
一个元素与其余元素。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))]))
答案 1 :(得分:1)
还可以使用for/list
来组合循环和列表形成:
(define (randomlist n mx)
(for/list ((i n))
(add1 (random mx))))
测试:
(randomlist 5 10)
输出:
'(5 9 10 4 7)
(随机数,因此每次输出很可能不同。)