【问题标题】:How to loop in Racket?如何在 Racket 中循环播放?
【发布时间】:2015-11-07 12:41:41
【问题描述】:

我想循环这个直到 nr-of-bread 是 2 怎么做?

(when (and (>= money price-of-bread) (< nr-of-bread 2))
        (set! nr-of-bread (+ nr-of-bread 1)) (set! money (- money price-of-bread)))

【问题讨论】:

  • (quotient money price-of-bread)
  • @uselpa 而不是 (min 2 (quotient money price-of-bread)).

标签: racket


【解决方案1】:

实现这一点的最佳方法是通过命名let 使用尾递归:

(let loop ((nr-of-bread 0)
           (rest money))
  (if (and (>= rest price-of-bread) (< nr-of-bread 2))
    (loop (add1 nr-of-bread) (- rest price-of-bread))
    nr-of-bread))

【讨论】:

  • 在 Racket 中是 add1,而不是 1+
  • 哦……现在修复了。我一直在 IIRC Racket 所基于的 MIT 计划上对其进行测试,所以我认为他们也有 1+。但仍然可以解决问题。
  • 在 Racket 中你不应该使用 rest 作为变量名,它与内置函数冲突。
猜你喜欢
  • 2015-08-15
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-01
  • 2022-01-18
  • 2015-03-04
  • 1970-01-01
相关资源
最近更新 更多