2012-09-12 29 views
4

我试着解决这个问题 翻转硬币没有任何争论,并以相等的概率随机返回符号正面或反面。 这就是我得到的,但我不明白为什么它给了我“不可能”这个可以停止?翻转硬币计划程序

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

回答

3

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

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

您的cond语句包含两个不同调用random。这两个都是独立的,可以给你不同的结果。所以有可能第一个(random 2)的评估结果为0,第二个评估的结果为1,这两种情况都会失败,并给你"impossible"

的解决办法是把的(random 2)结果在一个局部变量使用let语句,并确保只调用random一次

+0

谢谢!不能相信我错过了! – Jeremiah