说我有例如
(define sample '("a" "b" "c"))
我将如何创建一个适用于样本的嵌套循环。
(define (runthis a)
(cond
(char? (car a)) ;given that this condition is true I go on to the nested loop
(define (work sample)
<dosomething>
(work (cdr sample))))
(else (write " ")
(runthis(cdr a))))
这是基本嵌套循环的正确模板吗?
答案 0 :(得分:3)
如果你需要嵌套循环,我建议使用for。 这是一个小而愚蠢的例子。外环贯穿 列表中的单词一次一个。如果当前单词以r开头, 然后内循环将一次打印一个字符。
#lang racket
(define (print-words-beginning-with-r words)
(for ([word words]
#:when (char=? (string-ref word 0) #\r))
(for ([c word])
(display c))
(newline)))
(print-words-beginning-with-r '("racket" "rocks" "!"))
此输出
racket
rocks
答案 1 :(得分:1)
我没有方便的解释器,但看起来它不会运行。
我不确定“嵌套循环”究竟是什么意思,或者你试图满足的要求,但是在Scheme中不鼓励使用大量的嵌套和长函数,因为它们会影响可读性/清晰度。你想复制这种行为吗?
while(foo) {
while(bar) {
// Frob the fizzbits
}
}
我会推荐这样的东西,它在功能上相同但更容易理解:
(define (inner-loop the-list)
; do things
)
(define (outer-loop the-list)
(cond (char? (car a)) (inner-loop the-list)
(else (write " "))))
答案 2 :(得分:1)
另一种可能性是名为let
,如:
(define (runthis a)
(cond
((char? (car a))
(let loop ((sample a))
(cond
((null? sample) '())
(else (display (car sample))
(loop (cdr sample))))))
(else (write " "))))