我知道for-each in scheme不会创建新列表,但在我的输出中,我预计:
4
9
16
done.
我刚刚“完成”。
这里发生了什么?
(define (for-each proc list)
(cond ((null? list) "done")
(else
(proc (car list))
(for-each proc (cdr list)))))
(define square (lambda(x)(* x x)))
(square 5)
(for-each square (list 2 3 4))
答案 0 :(得分:4)
在您的代码中,为执行效果执行了行(proc (car list))
,但其结果将被忽略。如果您只想打印方形函数的结果,请尝试:
(for-each (lambda (x) (display (square x)) (newline)) ; applies function on each element
'(2 3 4))
=> 4
9
16
done
如果您想获得在输入列表的每个元素上应用该过程的结果,您必须使用map
,而不是for-each
:
(map square '(2 3 4))
=> '(4 9 16)
for-each
遍历输入列表并对每个元素执行操作,但仅针对其效果(例如,打印每个元素)。它不会将结果累积到输出列表中,除非明确说明,否则它甚至不会打印 - 另一方面,map
遍历输入列表,对每个元素执行操作,并将结果累积到输出列表中。