SICP ex2-1 modified rational arithmetic
来源:互联网 发布:php curl 多线程采集 编辑:程序博客网 时间:2024/05/04 19:17
经过十多天煎熬,本宝宝终于顺利进入第二章,傲娇脸
首先,本章章首简要回顾了上一章的基本内容以及总体概述了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)
0 0
- SICP ex2-1 modified rational arithmetic
- SICP ex2-29
- SICP ex2-45
- SICP ex2-50
- Rational Arithmetic
- SICP学习笔记5 ex2.17 -- ex2.23
- SICP(1985) ex2-2 line-segment
- SICP ex2-6 2-15 Alyssa
- SICP ex2-25 - ex 2-27
- 1088. Rational Arithmetic (20)
- PAT 1088. Rational Arithmetic
- 1088. Rational Arithmetic (20)
- 1088.Rational Arithmetic
- 1088. Rational Arithmetic (20)
- 1088. Rational Arithmetic (20)
- PAT Rational Arithmetic (20)
- 1088. Rational Arithmetic (20)
- 1088. Rational Arithmetic (20)
- c++作业5
- Web Uploader项目实战中遇到的诸多坑
- 跨域的常见解决方法
- prim算法矩阵之变形----引水工程
- AOSP中常用repo&git命令
- SICP ex2-1 modified rational arithmetic
- 【HUSTOJ】1098: 完美数
- 338. Counting Bits #Medium
- B/S和C/S的区别
- 大话设计模式java版本 第六章 装饰模式
- 正则表达式\w和\d的疑惑
- POJ 2533 Longest Ordered Subsequence【最长递增子序列】【DP思想】
- 《大型网站技术架构--核心原理与案例分析》学有所得
- Oracle 的EBS 中OAF开发使用pageContext.forwardImmediately遇到OARedirectException异常