random - 翻转硬币计划程序

标签 random scheme probability

我尝试解决这个问题
Flip-coin 无需争论,并以相等的概率随机返回符号正面或反面。
这就是我得到的,但我不明白为什么它给我“不可能”这可以阻止吗?

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

最佳答案

您有两个不同的电话给 random在您的 cond陈述。这两者都是独立的,可以给你不同的结果。所以有可能是第一个 (random 2)计算结果为 0第二个评估为 1 ,使这两种情况都失败并给您 "impossible" .

解决方案是将 (random 2) 的结果放入在带有 let 语句的局部变量中,确保只调用 random一次。

关于random - 翻转硬币计划程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12380909/

相关文章:

c++ - 在 C++ 中嵌入 Guile 的问题

c - 覆盖所有随机数的迭代次数

algorithm - 在保证终止的同时使用抛硬币生成随机数

javascript - 来自数组的随机颜色

javascript - 如何让 javascript 提示问题一定次数

python - 为什么在使用集合创建随机字符串时会出现该模式?

lisp - 语法绑定(bind)值必须是关键字 : alpha. 什么意思?

macros - 宏(用户定义的代码转换)的想法是什么时候出现的?

unit-testing - 如何对伪随机数生成器进行单元测试?

C++ 计算事件的概率