我试着解决这个问题 翻转硬币没有任何争论,并以相等的概率随机返回符号正面或反面。 这就是我得到的,但我不明白为什么它给了我“不可能”这个可以停止?翻转硬币计划程序
(define flip-coin
(lambda ()
(cond
[ (= (random 2) 1) "heads" ]
[ (= (random 2) 0) "tails" ]
[else "impossible" ]
)
)
)
我试着解决这个问题 翻转硬币没有任何争论,并以相等的概率随机返回符号正面或反面。 这就是我得到的,但我不明白为什么它给了我“不可能”这个可以停止?翻转硬币计划程序
(define flip-coin
(lambda ()
(cond
[ (= (random 2) 1) "heads" ]
[ (= (random 2) 0) "tails" ]
[else "impossible" ]
)
)
)
flip-coin
过程只返回两个可能值中的一个,它可以被简化多一点,也注意random
应该只被调用一次 - 并且不需要将其值保存在变量中,因为结果被使用立即:
(define (flip-coin)
(if (zero? (random 2))
"tails"
"heads"))
您的cond
语句包含两个不同调用random
。这两个都是独立的,可以给你不同的结果。所以有可能第一个(random 2)
的评估结果为0
,第二个评估的结果为1
,这两种情况都会失败,并给你"impossible"
。
的解决办法是把的(random 2)
结果在一个局部变量使用let语句,并确保只调用random
一次。
谢谢!不能相信我错过了! – Jeremiah