我学习球拍,我需要一些帮助。如何仅运行此功能4次而不是无限运行?
(define loop
(λ ()
(define delay (random 5))
(digital-write led1 HIGH)
(sleep delay)
(displayln delay)
(digital-write led1 LOW)
(sleep delay)
(loop)))
答案 0 :(得分:5)
一种简单的方法是使用for
。
(define (do-it-once)
(define delay (random 5))
(digital-write led1 HIGH)
(sleep delay)
(displayln delay)
(digital-write led1 LOW)
(sleep delay))
(for ([n 4])
(do-it-once))
答案 1 :(得分:1)
如果您发现需要经常这样做,可以使用宏扩展soegard基于for
的答案,以使代码更清晰:
(define-syntax-rule (repeat num-times body ...)
(for ([n num-times])
body ...))
(repeat 4
(define delay (random 5))
(digital-write led1 HIGH)
(sleep delay)
(displayln delay)
(digital-write led1 LOW)
(sleep delay))
这个宏使你的意图明确。这对于在阅读代码的人看到[n 4]
时避免混淆很有用,因为如果你的循环很复杂,你可能不会立即明白你只使用变量n
来计算循环。如果你只在一两个地方需要它,这肯定是矫枉过正的。
答案 2 :(得分:0)
要回答一般情况下的这个问题,你可以使用累加器:
(define (loop arg)
(if (eq? arg 0)
"Done"
(loop (sub1 arg))))
(loop 4)
这将循环arg
次。每次通话都会将arg
减1。一旦为0,您将返回所需的任何值。当然,这是一个写的愚蠢的例子,但演示了一个你可以使用的一般模式。
注意:累加器的使用在这里用词不当,累加器通常会累积多次调用的值......