在Scheme中循环for-each

时间:2013-10-09 13:47:22

标签: scheme

我是Scheme的新手......

有人可以为我解释为什么for-each语句不打印输出??

我定义了一个图表:

(define graph '((a (b.c)) (c (d))))

和我的测试代码:

(define testing
  (lambda (a-list)
    (if (null? a-list)
        "size = 0"
        (for-each (lambda (i)
                   (cons (car i) (length (cdr i)))
                   (length a-list)) 
                  a-list))))

运行此(testing graph)时,预期输出为((a . 2) (c . 1))但不显示任何内容......

1 个答案:

答案 0 :(得分:4)

for-each过程不会将列表构建为输出,它只是对每个输入列表的元素执行一个过程。您正在寻找map,它会创建一个新列表,其结果是将函数应用于输入列表中的每个元素。另请注意,您的代码中存在有关图的创建/遍历的错误。这应该解决问题:

(define graph
  '((a (b c)) ; fixed a bug here
    (c (d))))

(define testing
  (lambda (a-list)
    (if (null? a-list)
        "size = 0"
        (map (lambda (i)
               (cons (car i) (length (cadr i)))) ; fixed a bug here
             a-list))))

现在它按预期工作:

(display (testing graph))
=> '((a . 2) (c . 1))