2014年4月14日月曜日

開発環境

計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の2(データによる抽象の構築)、2.2(階層データ構造と閉包性)、2.2.4(例: 図形言語)、ペインタ、問題 2.48.を解いてみる。

その他参考書籍

問題 2.48.

コード(BBEdit, Emacs)

sample.scm

#!/usr/bin/env gosh
;; -*- coding: utf-8 -*-

;; これまでに書いた手続き
(load "./procedures.scm")

(define (make-segment start-vect end-vect)
  (cons start-vect end-vect))

(define (start-segment segment)
  (car segment))

(define (end-segment segment)
  (cdr segment))

(define v1 (make-vect 0 0))
(define v2 (make-vect 1 1))
(define v3 (make-vect 2 3))
(define v4 (make-vect 4 5))
(define vectors (list v1 v2 v3 v4))
(define segments (flatmap (lambda (start-vect)
                            (map (lambda (end-vect)
                                   (make-segment start-vect
                                                 end-vect))
                                 vectors))
                          vectors))
(for-each (lambda (segment)
            (print "segment:" segment
                   " start:" (start-segment segment)
                   " end:" (end-segment segment)))
          segments)

入出力結果(Terminal(gosh), REPL(Read, Eval, Print, Loop))

$ ./sample.scm
segment:((0 . 0) 0 . 0) start:(0 . 0) end:(0 . 0)
segment:((0 . 0) 1 . 1) start:(0 . 0) end:(1 . 1)
segment:((0 . 0) 2 . 3) start:(0 . 0) end:(2 . 3)
segment:((0 . 0) 4 . 5) start:(0 . 0) end:(4 . 5)
segment:((1 . 1) 0 . 0) start:(1 . 1) end:(0 . 0)
segment:((1 . 1) 1 . 1) start:(1 . 1) end:(1 . 1)
segment:((1 . 1) 2 . 3) start:(1 . 1) end:(2 . 3)
segment:((1 . 1) 4 . 5) start:(1 . 1) end:(4 . 5)
segment:((2 . 3) 0 . 0) start:(2 . 3) end:(0 . 0)
segment:((2 . 3) 1 . 1) start:(2 . 3) end:(1 . 1)
segment:((2 . 3) 2 . 3) start:(2 . 3) end:(2 . 3)
segment:((2 . 3) 4 . 5) start:(2 . 3) end:(4 . 5)
segment:((4 . 5) 0 . 0) start:(4 . 5) end:(0 . 0)
segment:((4 . 5) 1 . 1) start:(4 . 5) end:(1 . 1)
segment:((4 . 5) 2 . 3) start:(4 . 5) end:(2 . 3)
segment:((4 . 5) 4 . 5) start:(4 . 5) end:(4 . 5)
$

0 コメント:

コメントを投稿