码迷,mamicode.com
首页 > 其他好文 > 详细

SICP ex2-1 modified rational arithmetic

时间:2016-05-12 15:19:15      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:

经过十多天煎熬,本宝宝终于顺利进入第二章,傲娇脸

首先,本章章首简要回顾了上一章的基本内容以及总体概述了data abstraction 的原因重要性,以及介绍了本章将会学习的一些东西

2.1.1通过一个rational arithmetic的例子来引出data abstraction 并且介绍基础pair 语法

ex2-1要求修改书中所给的make-rat使之能够在给定参数为-时,将符号放在分子出输出,两种思路

一 修改gcd 使之能够处理负数

二 利用abs 将gcd 参数约束为正数,并保留原先符号,在结果出进行修正

我们由于比较懒,所以选择第二种方式

以下为代码

(define (Gcd a b)
	(define (reminder x y) (if (< x y) x (reminder (- x y) y)))
	(if (= b 0)  a  (Gcd b (reminder a b)))
)
(define (make-rat n d)
	(let ((g (Gcd (abs n) (abs d)))
		(symbol 
			((lambda (a b) 
				(cond ((< (* a b) 0) -1)
					((> (* a b) 0) 1)
					((= a 0) 0)))
				 n d)
		)
		)
		(cons (* symbol (abs (/ n g))) (abs (/ d g)))))

(define (rat+ x y)
	(/ (+ (* (car x) (cdr y)) (* (car y) (cdr x))) (* (cdr x) (cdr y))))
(define (rat* x y)
	(/ (* (car x) (car y)) (* (cdr x) (cdr y))))
(define (rat/ x y)
	(/ (* (car x) (cdr y)) (* (cdr x) (car y))))
(define (rat- x y)
	(/ (- (* (car x) (cdr y)) (* (car y) (cdr x))) (* (cdr x) (cdr y))))
(define (rat= x y)
	(= (* (car x) (cdr y)) (* (car y) (cdr x))))
(define (print-rat x)
	(newline)
	(display (car x))
	(display "/")
	(display (cdr x))
	0
)
技术分享

SICP ex2-1 modified rational arithmetic

标签:

原文地址:http://blog.csdn.net/zb1030415419/article/details/51365570

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!