Random 抛硬币计划程序
我试着解决这个问题 Flip coin不接受争论,以相同的概率随机返回符号的正面或反面。 这就是我得到的,但我不明白为什么它给了我“不可能”的东西,这能被阻止吗Random 抛硬币计划程序,random,scheme,probability,Random,Scheme,Probability,我试着解决这个问题 Flip coin不接受争论,以相同的概率随机返回符号的正面或反面。 这就是我得到的,但我不明白为什么它给了我“不可能”的东西,这能被阻止吗 (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" ]
)
)
)
在cond
语句中有两个不同的调用random
。这两种方法都是独立的,可以得到不同的结果。因此,第一个(随机2)
的计算结果可能是0
,第二个1
,这两种情况都会失败,给你“不可能”
解决方案是使用let语句将
(random 2)
的结果放入局部变量中,确保只调用random
一次。flip coin过程只返回两个可能值中的一个,可以进一步简化,还要注意的是,random
应该只调用一次,并且不需要将其值保存在变量中,因为结果会立即使用:
(define (flip-coin)
(if (zero? (random 2))
"tails"
"heads"))
谢谢真不敢相信我错过了!