開発環境
- OS X Mavericks - Apple(OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- Scheme (プログラミング言語)
- Gauche (処理系)
計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の2(データによる抽象の構築)、2.1(データ抽象入門)、2.1.2(抽象の壁)、問題 2.2を解いてみる。
その他参考書籍
- Instructor's Manual to Accompany Structure & Interpretation of Computer Programs
- プログラミングGauche (Kahuaプロジェクト (著), 川合 史朗 (監修), オライリージャパン)
問題 2.2
コード(BBEdit, Emacs)
sample.scm
#!/usr/bin/env gosh ;; -*- coding: utf-8 -*- ;; これまでに書いた手続き (load "./procedures.scm") (define (make-segment start end) (cons start end)) (define (start-segment segment) (car segment)) (define (end-segment segment) (cdr segment)) (define (make-point x y) (cons x y)) (define (x-point point) (car point)) (define (y-point point) (cdr point)) (define (midpoint-segment segment) (let ((start (start-segment segment)) (end (end-segment segment))) (let ((start-x (x-point start)) (start-y (y-point start)) (end-x (x-point end)) (end-y (y-point end))) (make-point (average start-x end-x) (average start-y end-y))))) (define (display-point point) (display "(") (display (x-point point)) (display ",") (display (y-point point)) (display ")")) (define (display-segment segment) (display "始点") (display-point (start-segment segment)) (display ", ") (display "終点") (display-point (end-segment segment))) ;; テスト (define point1 (make-point 0 0)) (define point2 (make-point 10 10)) (define point3 (make-point 10 5)) (define point4 (make-point -10 -10)) (define point5 (make-point -10 -5)) (define segments (map (lambda (point) (make-segment point1 point)) (list point2 point3 point4 point5))) (for-each (lambda (segment) (display "線分: ") (display-segment segment) (display ", ") (display "中間値: ") (display-point (midpoint-segment segment)) (print "")) segments)
入出力結果(Terminal(gosh), REPL(Read, Eval, Print, Loop))
$ ./sample.scm 線分: 始点(0,0), 終点(10,10), 中間値: (5,5) 線分: 始点(0,0), 終点(10,5), 中間値: (5,5/2) 線分: 始点(0,0), 終点(-10,-10), 中間値: (-5,-5) 線分: 始点(0,0), 終点(-10,-5), 中間値: (-5,-5/2) $
0 コメント:
コメントを投稿