sicp习题试解 (2.1)

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

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

;

; Structure and Interpretation of Computer Programs

; (trial answer to excercises)

;

; 计算机程序的构造和解释(习题试解)

;

; created: code17 04/18/05

; modified:

; (保持内容完整不变前提下,可以任意转载)

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

;; SICP No.2.1

;; 如使用chapter 1中gcd的定义

(define (gcd a b)

(if (= b 0)

a

(gcd b (remainder a b))))

;; 则make-rat可定义为

(define (make-rat n d)

(let ((g (* (gcd (abs n) (abs d))

(if (< d 0) -1 1))))

(cons (/ n g) (/ d g))))

;; abs取绝对值是必要的,这是这是因为在原gcd的定义中没有考虑正负数的问题,

;; 同样正负号的两个操作数,可以得到不同正负的结果。比如

;; > (gcd 100 -26)

;; 2

;; > (gcd 100 -34)

;; -2

;; 如果不使用chap1中的定义而使用MzScheme自带的gcd函数,则可以不必abs

;; Test-it:

;; Welcome to MzScheme version 209, Copyright (c) 2004 PLT Scheme, Inc.

;; > (make-rat 100 -26)

;; (-50 . 13)

;; > (make-rat 100 -34)

;; (-50 . 17)

;; > (make-rat -100 34)

;; (-50 . 17)

;; > (make-rat -100 -34)

;; (50 . 17)

;; > (make-rat 100 34)

;; (50 . 17)

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