開発環境
- 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 コメント:
コメントを投稿