Scheme 球拍随机函数

Scheme 球拍随机函数,scheme,racket,Scheme,Racket,我的随机函数有问题。我在以下位置设置了一个功能: (define random-abcd (cond [(equal? (random 4) 0) 'A] [(equal? (random 4) 1) 'B] [(equal? (random 4) 2) 'C] [else 'D] )) 然而,当我运行此选项时,它比其他任何选项都要频繁。似乎代码中的[其他…]比其他选择发生得更多,这意味着它不是以相同的概率进行选择。有什么办

我的随机函数有问题。我在以下位置设置了一个功能:

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

然而,当我运行此选项时,它比其他任何选项都要频繁。似乎代码中的[其他…]比其他选择发生得更多,这意味着它不是以相同的概率进行选择。有什么办法可以解决这个问题吗?

随机
函数工作正常,但您的代码是错误的。您希望这样做:

(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
,并且此错误会使整个值集倾斜。

随机
函数工作正常,但代码错误。您希望这样做:

(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
,并且该错误会扭曲整个值集。

有没有一种方法可以不用let函数来实现这一点,因为我还停留在初级学生语言中?@Ryan您可以使用
定义
。只需执行
(定义n(随机4))
就在
随机abcd
定义的上方。。这对一个输出有效。我将此函数链接到一个递归函数,该函数创建一个con列表。该部分的代码是:(cons random abcd(cons random abcd empty)),但现在它不运行新的随机函数,只运行一次,并对整个列表使用该选项。我该如何解决这个问题?@Ryan将
随机abc
作为一个函数。因此,请执行
(define(random abc)(define n(random 4))…)
@Ryan,您想定义一个执行条件运算的助手函数,然后用适当的随机数调用它。由于我还停留在初级学生语言中,有没有办法不用let函数来执行此操作?@Ryan您可以使用
define
来执行此操作。只需执行
(定义n(随机4))
就在
随机abcd
定义的上方。。这对一个输出有效。我将此函数链接到一个递归函数,该函数创建一个con列表。该部分的代码是:(cons random abcd(cons random abcd empty)),但现在它不运行新的随机函数,只运行一次,并对整个列表使用该选项。我该如何解决这个问题?@Ryan将
随机abc
作为一个函数。因此,如果要定义一个执行条件运算的助手函数,然后用适当的随机数调用它,请执行
(define(random abc)(define n(random 4))…)
@Ryan。