2012-09-12 97 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