球拍随机函数

Racket random function

我在使用随机函数时遇到问题。我在其中设置了一个函数:

(define random-abcd
  (cond [(equal? (random 4) 0) 'A]
        [(equal? (random 4) 1) 'B]
        [(equal? (random 4) 2) 'C]
        [else 'D]
        )) 

然而,当我 运行 时,这个 'D 比任何其他选择都更频繁地出现。似乎 [else ...] 代码中的任何内容都比其他选择发生的次数多得多,这意味着它没有以相等的概率进行选择。有什么解决办法吗?

random 函数工作正常,但您的代码有误。你想要这个:

(define random-abcd
  (let ([n (random 4)])
    (cond [(equal? n 0) 'A]
          [(equal? n 1) 'B]
          [(equal? n 2) 'C]
          [else 'D])))

在您的原始示例中,您为每次比较生成了一个新的随机数。 似乎应该不会影响分布,但确实如此。

在您的原始表述中,第二种情况要求第一种情况为假 并且 第二种情况为真,给出的实际概率为 3/4 * 1/4,或 3/16。第三种情况的概率是13/16 * 1/4,或者13/64。对于均等分布,所有情况的概率都应为 1/4,而此错误会扭曲您的整个值集。