翻转硬币计划程序

时间:2012-09-12 03:44:16

标签: random scheme probability

我试过解决这个问题 翻转硬币没有任何争论,并以相同的概率随机返回符号的头部或尾部。 这就是我得到的,但我不明白为什么它会给我“不可能”这可以停止吗?

(define flip-coin
    (lambda ( )
        (cond
            [ (= (random 2 ) 1 ) "heads" ]
            [ (= (random 2 ) 0 ) "tails" ]
            [else "impossible" ]
        )
    )
)

2 个答案:

答案 0 :(得分:5)

您的random声明中有两个不同的来电cond。这两者都是独立的,可以给你不同的结果。因此,第一个(random 2)评估为0而第二个评估为1的可能性,使这两个案例都失败并给您"impossible"

解决方案是将(random 2)的结果放在带有let语句的局部变量中,确保只调用random 一次

答案 1 :(得分:3)

flip-coin过程只返回两个可能值中的一个,它可以简化一点,同时注意到random只应该调用一次 - 并且不需要将其值保存在变量,因为结果立即使用:

(define (flip-coin)
  (if (zero? (random 2))
      "tails"
      "heads"))