SICP 2.01-2.03

练习2.01

(define (make-rat n d)
  (let ((g (gcd n d)))
       (if (< (* n d) 0)
           (cons (/ (- (abs n) g) (/ (abs d) g)))
           (cons (/ (abs n) g) (/ (abs d) g)))))
(define (numer x) (car x))
(define (demon y) (cdr y))
(define (print-rat x)
  (display (numer x))
  (display "/")
  (display (demon x))
  (newline))

练习2.02

(define (print-point p)
  (display "(")
  (display (x-point p))
  (display ",")
  (display (y-point p))
  (display ")")
  (newline))

(define (make-point x y)
  (cons x y))
(define (x-point p) (car p))
(define (y-point p) (cdr p))
(define (make-segment p1 p2)
  (cons p1 p2))
(define (start-segment s) (car s))
(define (end-segment s) (cdr s))

(define (midpoint-segment s)
  (let ((startpoint (start-segment s))
           (endpoint (end-segment s)))
        (let ((startpoint-x (x-point startpoint))
           (startpoint-y (y-point startpoint))
           (endpoint-x (x-point endpoint))
           (endpoint-y (y-point endpoint)))
       (make-point (/ (+ startpoint-x endpoint-x) 2)
                   (/ (+ startpoint-y endpoint-y) 2)))))

练习2.03

(define (make-point x y)
  (cons x y))
(define (make-segment p1 p2)
  (cons p1 p2))
(define (make-rectangle s1 s2)
  (cons (get-length s1)
        (get-length s2)))
(define (get-length s)
  (sqrt (+ (square (- (car (car s)) (car (cdr s))))
           (square (- (cdr (car s)) (cdr (cdr s)))))))
(define (perimeter r)
  (* 2 (+ (car r)
          (cdr r))))
(define (area r)
  (* (car r)
     (cdr r)))

(define a (make-point 0 0))
(define b (make-point 0 1))
(define c (make-point 2 1))
(define s1 (make-segment a b))
(define s2 (make-segment b c))
(define r (make-rectangle s1 s2))
  (display (perimeter r))
  (newline)
  (display (area r)
  (newline))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值