我是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))
但不显示任何内容......
答案 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))