【问题标题】:flip-coin scheme procedure抛硬币计划程序
【发布时间】:2012-09-12 03:44:15
【问题描述】:

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

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

【问题讨论】:

    标签: random scheme probability


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢!不敢相信我错过了!
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-05-25
      • 2020-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      相关资源
      最近更新 更多