開発環境
- 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.3(記号データ)、2.3.3(例: 集合の表現)、集合と情報検索、問題 2.66.を解いてみる。
その他参考書籍
- Instructor's Manual to Accompany Structure & Interpretation of Computer Programs
- プログラミングGauche (Kahuaプロジェクト (著), 川合 史朗 (監修), オライリージャパン)
問題 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 コメント:
コメントを投稿