Scheme 嵌套循环方案

Scheme 嵌套循环方案,scheme,racket,Scheme,Racket,比如说我有 (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))))

比如说我有

(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)))) 
(定义(运行此a)
(续)
(char?(car a));假设这个条件为真,我继续进行嵌套循环
(定义(工作样本)
(工作(cdr样本)))
(否则(写为“)
(运行此(cdr a)))

这是基本嵌套循环的正确模板吗?

我手头没有Scheme解释器,但看起来它不会运行

我不确定您所说的“嵌套循环”到底是什么意思,或者您试图满足什么要求,但Scheme中不鼓励使用大量嵌套和长函数,因为它们会影响可读性/清晰度。你想复制这种行为吗

while(foo){
while(bar){
//起泡
}
}
我会推荐类似的东西,它在功能上是等效的,但更容易摸索:

(定义(列表的内部循环)
做事
)
(定义(列表的外部循环)
(cond(char?(car a))(列表的内部循环)
(否则(写“))

我手边没有Scheme解释器,但它看起来不会运行

我不确定您所说的“嵌套循环”到底是什么意思,或者您试图满足什么要求,但Scheme中不鼓励使用大量嵌套和长函数,因为它们会影响可读性/清晰度。你想复制这种行为吗

while(foo){
while(bar){
//起泡
}
}
我会推荐类似的东西,它在功能上是等效的,但更容易摸索:

(定义(列表的内部循环)
做事
)
(定义(列表的外部循环)
(cond(char?(car a))(列表的内部循环)
(否则(写“))

另一种可能性是命名的
let
,如下所示:

(define (runthis a)
  (cond
    ((char? (car a))
     (let loop ((sample a))
       (cond 
         ((null? sample) '())
         (else (display (car sample))
           (loop (cdr sample))))))
    (else (write " "))))

另一种可能是命名的
let
,如下所示:

(define (runthis a)
  (cond
    ((char? (car a))
     (let loop ((sample a))
       (cond 
         ((null? sample) '())
         (else (display (car sample))
           (loop (cdr sample))))))
    (else (write " "))))

如果需要嵌套循环,我建议改用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

如果需要嵌套循环,我建议改用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

这有帮助。谢谢托尔加默斯!这有帮助。谢谢托尔加默斯!