0

我是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))但它什么也不显示...

4

1 回答 1

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))
于 2013-10-09T13:49:41.040 回答