計算機プログラムの構造と解釈[15]
今日は, やり残しの問題を片付けておわり.
2.1.2
問題 2.3
問題は, 4つか.
- 平面上における長方形の表現を実装.
- その長方形の周囲の長さと面積を計算する手続きの作成.
- それができたら異なる表現で実装.
- その長方形の周囲の長さと面積を計算する手続きの作成.
まず1個目の表現.
縦と横の長さを引数にとってみる.
かんたん.
(define (make-rectangle x y) (cons x y)) (define (width x) (car x)) (define (height x) (cdr x)) (define (perimeter x) (* (+ (width x) (height x)) 2)) (define (area x) (* (width x) (height x)))
実行結果.
こんなもんかな.
gosh> (define rect (make-rectangle 4 6)) rect gosh> (width rect) 4 gosh> (height rect) 6 gosh> (perimeter rect) 20 gosh> (area rect) 24
んで, 2個目は, ・・・うーん, いいや. 飛ばす.
やってて頭がこんがらがってきた.
あんまりよくないなあ.
あっ, できた.
色々問題ありそうだけど.
線分を引数として取るようにしてみた.
(define (make-rectangle seg1 seg2) (cons seg1 seg2)) (define (width rect) (- (x-point (end-segment (car rect))) (x-point (start-segment (car rect))))) (define (height rect) (- (y-point (end-segment (cdr rect))) (y-point (start-segment (cdr rect))))) (define (perimeter rect) (* 2 (+ (width rect) (height rect)))) (define (area rect) (* (width rect) (height rect)))
実行結果.
gosh> (define a (make-point 1 1)) a gosh> (define b (make-point 4 1)) b gosh> (define c (make-point 1 5)) c gosh> (define w (make-segment a b)) w gosh> (define h (make-segment a c)) h gosh> (define rect (make-rectangle w h)) rect gosh> (width rect) 3 gosh> (height rect) 4 gosh> (perimeter rect) 14 gosh> (area rect) 12
width とか height は, 結果がマイナスにならないように,
最後に abs をかけた方がよかったかも.
更新時刻
- 1かいめ 2007年, 4月10日, 1:54
- 2かいめ 2007年, 4月10日, 2:00