Lisp---基本有理数类

题目:构造一个基本的有理数类。


第二章讲的主要是构造数据抽象等问题。在构造一个有理数过程中,用到了面向对象程序设计的思想,把整个有理数封装成为一个类。

之后对有理数的基本操作都可以用这个完成。涵盖了有理数的加减乘除,以及用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))   //定义分母


//有理数以分数
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值