2014年5月3日土曜日

開発環境

計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の2(データによる抽象の構築)、2.3(記号データ)、2.3.3(例: 集合の表現)、集合と情報検索、問題 2.66.を解いてみる。

その他参考書籍

問題 2.66.

コード(BBEdit, Emacs)

sample.scm

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

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

;; レコードを対で表現
;; 構成子
(define (make-record key value)
  (cons key value))

;; 選択子
(define (key record) (car record))
(define (value record) (cdr record))

(define (lookup given-key set-of-records)
  (if (null? set-of-records)
      false
      (let ((e (entry set-of-records)))
        (let ((k (key e)))
          (cond ((equal? given-key k) e)
                ((< given-key k)
                 (lookup given-key
                         (left-branch set-of-records)))
                (else
                 (lookup given-key
                         (right-branch set-of-records))))))))

(define record1 (cons 1 "a"))
(define record2 (cons 2 "b"))
(define record3 (cons 3 "c"))
(define record4 (cons 4 "d"))
(define record5 (cons 5 "e"))

(define set-of-records (list->tree (list record1
                                         record2
                                         record3
                                         record4
                                         record5)))

(print "set-of-records")
(print-tree set-of-records)
(print "lookup")
(for-each (lambda (k)
            (print k ": " (lookup k set-of-records)))
          (enumerate-interval 0 9))

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

$ ./sample.scm
set-of-records
                ()
        (1 . a)
                        ()
                (2 . b)
                        ()
(3 . c)
                ()
        (4 . d)
                        ()
                (5 . e)
                        ()
lookup
0: #f
1: (1 . a)
2: (2 . b)
3: (3 . c)
4: (4 . d)
5: (5 . e)
6: #f
7: #f
8: #f
9: #f
$

0 コメント:

コメントを投稿