球拍随机功能

时间:2015-02-15 21:51:44

标签: scheme racket

我遇到随机功能问题。我有一个功能设置:

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

然而,当我跑步时,D的出现频率比任何其他选择都要高。似乎[else ...]代码中的任何内容都比其他选择发生得更多,这意味着它不会以相同的概率进行选择。有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:4)

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/43/16的实际概率。第三种情况的概率为13/16 * 1/413/64。对于相等分布,所有情况都应该有1/4的概率,并且此错误会使整个值集偏斜。