翻转硬币计划程序

Jer*_*iah 4 random scheme probability

我尝试解决这个问题Flip-coin没有任何争论,并以相同的概率随机返回符号的头部或尾部.这就是我得到的,但我不明白为什么它会给我"不可能"这可以停止吗?

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

Tik*_*vis 5

您的声明中有两个不同的调用.这两者都是独立的,可以给你不同的结果.因此,第一个评估可能,第二个评估结果,使这两个案例都失败并给你.randomcond(random 2)01"impossible"

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