2014年3月8日土曜日

開発環境

計算機プログラムの構造と解釈(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.3(データとは何か)、問題 2.5.を解いてみる。

その他参考書籍

問題 2.5.

コード(BBEdit, Emacs)

sample.scm

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

;; a、bは非負の整数
;; a、bの対
(define (cons a b)
  (define (iter b n result)
    (if (= n 0)
        result
        (iter b
              (- n 1)
              (* b result))))
  (* (iter 2 a 1)
     (iter 3 b 1)))

(define (car x)
  (define (iter n count)
    (if (> (remainder n
                      2)
           0)
        count
        (iter (/ n 2)
              (+ count 1))))
  (iter x 0))

(define (cdr x)
  (define (iter n count)
    (if (> (remainder n
                      3)
           0)
        count
        (iter (/ n 3)
              (+ count 1))))
  (iter x 0))

;; テスト
(for-each (lambda (p)
            (print p ", " (car p) ", " (cdr p)))
          (list (cons 0 0)
                (cons 0 1)
                (cons 1 0)
                (cons 1 1)
                (cons 5 6)))

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

$ ./sample.scm
1, 0, 0
3, 0, 1
2, 1, 0
6, 1, 1
23328, 5, 6
$

0 コメント:

コメントを投稿