经过十多天煎熬,本宝宝终于顺利进入第二章,傲娇脸
首先,本章章首简要回顾了上一章的基本内容以及总体概述了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 )
时间: 2024-10-30 09:18:14