; ======================================================================
;
; Structure and Interpretation of Computer Programs
; (trial answer to excercises)
;
; 计算机程序的构造和解释(习题试解)
;
; created: code17 07/27/05
; modified:
; (保持内容完整不变前提下,可以任意转载)
; ======================================================================
;; SICP No.2.23
(define (for-each proc items)
(if (null? items)
#t
((lambda x (for-each proc (cdr items))) (proc (car items)))))
;; 注意:
;; 1. 为什么不写成类似于 (proc (car items)) (for-each proc (cdr items)) ?
;; 因为SICP到目前的语法知识无法确定这两个部分求值的先后顺序,这很可能是具体
;; 解释器实现相关的。 而我们可以确信的是,在scheme通用的applicative-order
;; 模式下,操作数的evaluation总是先于函数应用的结果。
;; 2. 为什么不写成类似于 ((proc (car items)) (for-each proc (cdr items))) ?
;; 这是将前一项应用于后一项,在最后一次递归中会出问题:将#t最为操作数。
;; 3. Scheme应该有一些顺序执行的语法,但在SICP讲到这一节的时候好像还没出现过。
;; Test-it:
;; Welcome to MzScheme version 209, Copyright (c) 2004 PLT Scheme, Inc.
;; > (for-each (lambda (x) (newline) (display x))
;; (list 57 321 88))
;;
;; 57
;; 321
;; 88#t