sicp习题试解 (2.23)

王朝other·作者佚名  2006-01-09
宽屏版  字体: |||超大  

; ======================================================================

;

; 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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有