我試着解決這個問題 翻轉硬幣沒有任何爭論,並以相等的概率隨機返回符號正面或反面。 這就是我得到的,但我不明白爲什麼它給了我「不可能」這個可以停止?翻轉硬幣計劃程序
(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