建立一个随机列表

时间:2016-11-08 22:48:14

标签: racket

我正在尝试编写一个函数,它接受列表的长度和最大数值,并返回一个列表,该列表的长度在1和给定的最大值之间随机给出。

到目前为止我已经

(define (randomlist n max)
(cond
  [(= n 0)empty]
  [else
      (cons (build-list n (random 1 max))
            (randomlist max (- n 1)))]))

我在运行时遇到错误,并且想知道是否有人可以帮助我。

2 个答案:

答案 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)  

(随机数,因此每次输出很可能不同。)