题目:构造一个基本的有理数类。
第二章讲的主要是构造数据抽象等问题。在构造一个有理数过程中,用到了面向对象程序设计的思想,把整个有理数封装成为一个类。
之后对有理数的基本操作都可以用这个完成。涵盖了有理数的加减乘除,以及用GCD确保有理数是最简分数。
新接触的(define x (cons a b))可以简单的理解为pair<int int> x , 取出里面的元素a= (car x), b= (cdr x), 可以类比为x.first, x.second。
同样可以在cons里套cons,例如(cons (cons a b) c) ,类似于make_pair(make_pair (a,b), c);
构造一个类的思想和C的思想是基本一致的,在一开始想有理数的所有构成元素并由最主要的几个函数
1.构造函数
2.具体实现(成员函数)等等
以下代码:
> (define (make-rat a b) (cons a b))
> (define (numer x) (car x))
> (define (denom x) (cdr x))
//以上为普通有理数定义,但是不能约分到最简比例。
//以下段为优化的有理数定义(构造函数)
> (define (make-rat a b)
(let ((m (gcd-rat a b))) //定义最简分数
(cons (/ a m) (/ b m))))
> (define (numer x) (car x)) //定义分子
> (define (denom x) (cdr x)) //定义分母
//有理数以分数