for-each没有输出值

时间:2014-09-17 14:04:36

标签: scheme

我知道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))

1 个答案:

答案 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遍历输入列表,对每个元素执行操作,并将结果累积到输出列表中。