sicp习题答案和范例代码 - 第二章 2.1
2013-10-15 02:10
513 查看
2.1.1 范例 2.1 习题
(define (make-rat n d) (cond ((< 0 (* n d)) (cons (abs n) (abs d))) ((= 0 d) "divides 0") (else (cons (- (abs n)) (abs d))))) (define (numer x) (car x)) (define (denom x) (cdr x)) (define (print-rat x) (display (numer x)) (display "/") (display (denom x)) (newline)) (define (add-rat x y) (make-rat (+ (* (numer x) (denom y)) (* (denom x) (numer y))) (* (denom x) (denom y)))) (define (sub-rat x y) (make-rat (- (* (numer x) (denom y)) (* (denom x) (numer y))) (* (denom x) (denom y)))) (define (mul-rat x y) (make-rat (* (numer x) (numer y)) (* (denom x) (denom y)))) (define (div-rat x y) (make-rat (* (numer x) (denom y)) (* (denom x) (numer y)))) (define (equal-rat? x y) (= (* (numer x) (denom y)) (* (denom x) (numer y))))
练习2.2
;; 2.2 (define (make-segment p1 p2) (cons p1 p2)) (define (start-segment s) (car s)) (define (end-segment s) (cdr s)) (define (make-point x y) (cons x y)) (define (x-point p) (car p)) (define (y-point p) (cdr p)) (define (midpoint-segment s) (make-point (/ (+ (x-point (start-segment s)) (x-point (end-segment s))) 2) (/ (+ (y-point (start-segment s)) (y-point (end-segment s))) 2))) (define (print-point p) (newline) (display "(") (display (x-point p)) (display ",") (display (y-point p)) (display ")"))
练习2.3
;; 2.3 (define (make-rect h w) (cons h w)) (define (width-rect r) (cdr r)) (define (height-rect r) (car r)) (define (peri-rect r) (* (+ (length-segment h) (length-segment w)) 2)) (define (area-rect r) (* (length-segment (height-rect r)) (length-segment (width-rect r)))) (define (square x) (let ((v x)) (* v v))) (define (length-segment s) (let ((x1 (x-point (start-segment s))) (y1 (y-point (start-segment s))) (x2 (x-point (end-segment s))) (y2 (y-point (end-segment s)))) (sqrt (+ (square (- x1 x2)) (square (- y1 y2)))))) ;; test case (define h (make-segment (make-point 0 0) (make-point 5 0))) (define w (make-segment (make-point 0 0) (make-point 0 4))) (define r (make-rect h w)) (area-rect r) (peri-rect r) ;; another design (define (make-rect p1 p2) (cons p1 p2)) (define (height-rect r) (make-segment (car r) (make-point (x-point (car r)) (y-point (cdr r))))) (define (width-rect r) (make-segment (car r) (make-point (x-point (cdr r)) (y-point (car r))))) ;; test case (define r1 (make-rect (make-point 0 0) (make-point 4 5))) (area-rect r1) (peri-rect r1
范例 2.1.3
(define (our-cons x y) (define (dispatch m) (cond ((= m 0) x) ((= m 1) y) (else (error "Argument not 0 or 1 -- OUR-CONS" m)))) dispatch) (define (our-car z) (z 0)) (define (our-cdr z) (z 1))
练习2.4
(define (cdr1 z) (z (lambda (p q) q)))
练习2.5
(define (cons2 a b) (* (expt 2 a) (expt 3 b))) (define (car2 z) (define (rec z c) (if (not (= (remainder z 2) 0)) c (rec (/ z 2) (1+ c)))) (rec z 0)) (define (cdr2 z) (define (rec z c) (if (not (= (remainder z 3) 0)) c (rec (/ z 3) (1+ c)))) (rec z 0))
练习2.6
(define (one) (lambda (f) (lambda(x) (f x)))) (define (two) (lambda (f) (lambda(x) (f (f x))))) (define (add n m) (lambda (f) (lambda (x) (lambda (n) (n f (lambda (m) m f))))))
相关文章推荐
- sicp习题答案和范例代码 - 第一章
- 《C++编程思想》第二章 数 据 抽 象(原书代码+习题+答案)
- 《C++编程思想》第二章 数 据 抽 象(原书代码+习题+答案)
- 快学scala 第二章 读书笔记及习题答案代码
- C++Primer 中文版 第五版 第二章课后习题答案
- GTK+2.0编程范例代码分析-第二章(1)
- 快学scala 第十二章 高阶函数 读书笔记及习题答案代码
- 第二章 习题2.1-3 查找线性表
- 算法导论第三版第二章第二节习题答案
- python核心编程习题答案(第二章)
- SICP 第二章第一节 习题 2.1-2.16
- C++Primer第五版 第二章习题答案(21~30)
- SICP 习题答案1.1
- C++ Primer Plus (第6版)课后习题答案 第二章
- 第二章 习题2.1-3 查找线性表
- python编程从入门到实践第二章习题答案
- SICP 习题答案1.11
- SICP学习笔记 - 第二章 (2.1)
- 算法导论第二版 习题2.1-4答案
- SICP 部分习题答案