4

我尝试解决这个问题 Flip-coin 没有争论,并以相同的概率随机返回符号的正面或反面。这就是我得到的,但我不明白为什么它给了我“不可能”,这可以阻止吗?

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

2 回答 2

5

您的声明中有两个不同的调用。这两者都是独立的,可以给你不同的结果。因此,第一个评估为,第二个评估为,这两种情况都可能失败并给你。randomcond(random 2)01"impossible"

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

于 2012-09-12T03:52:02.157 回答
3

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

(define (flip-coin)
  (if (zero? (random 2))
      "tails"
      "heads"))
于 2012-09-12T04:08:35.137 回答