問題2.68 – SICP(計算機プログラムの構造と解釈)その80
問題2.68 記号が木に存在するかどうかを調べるには、ルートにある記号の集合のリストを最初に調べるとよい。 左部分木に記号が存在すれば左部分木をたどって行き、左部分木に無い場合は右部分木をたどって行く。 (define (encode-symbol symbol tree) (define (enc-iter tree) (if (leaf? tree) ‘() (if (memq symbol …続きを読む
問題2.68 記号が木に存在するかどうかを調べるには、ルートにある記号の集合のリストを最初に調べるとよい。 左部分木に記号が存在すれば左部分木をたどって行き、左部分木に無い場合は右部分木をたどって行く。 (define (encode-symbol symbol tree) (define (enc-iter tree) (if (leaf? tree) ‘() (if (memq symbol …続きを読む
問題2.67 (define sample-tree (make-code-tree (make-leaf ‘A 4) (make-code-tree (make-leaf ‘B 2) (make-code-tree (make-leaf ‘D 1) (make-leaf ‘C 1))))) (print sample-tree) gosh> ((leaf A 4) ((leaf B 2) …続きを読む
問題2.66 レコードの集合がキーの数値で順序づけられている二進木で構造化されている場合の lookup 手続き。 (define (key record) (car record)) (define (value record) (cadr record)) (define (make-record key value) (list key value)) (define (lookup giv…続きを読む
スタイルシート(CSS)だけでドロップダウンメニュー(Drop Down Menu)を作るメモ。 IE6 でのみ JavaScript を使っている(ie7-js – Google Code の IE8.js を利用)。 IE 以外ではドロップダウン部分の背景に透過PNGを利用している。 サンプルページ(Sample Page) スタイルシート(CSS) #mainmenu li { …続きを読む
問題2.65 問題2.62等で作った、順序づけられたリストによる集合の union-set、intersection-set を利用する。 木構造データをリストに変換してから演算を行い、結果のリストを木構造データに変換する。 (define set1 ‘(1 2 3 4 5)) (define set2 ‘(2 4 6)) (define tree1 (list->tree set1)) ;…続きを読む
問題2.64a partial-tree はリストとその長さを引数として与えられ、長さからリストを半分に分ける。 中間の要素でエントリを、前のリストで左部分木を、後ろのリストで右部分木を作る。 結果は"エントリと左部分木と右部分木とで構成された木" と "木に含まれなかった要素から成るリスト" を cons したものを返す。 (define (list-&g…続きを読む
問題2.63a tree->list-1、tree->list-2 のどちらの手続きでも同じ結果となる。 (define (tree->list-1 tree) (if (null? tree) ‘() (append (tree->list-1 (left-branch tree)) (cons (entry tree) (tree->list-1 (right-b…続きを読む
vim plugin (プラグイン) surround.vim の使い方メモ vim plugin (プラグイン) surround.vim は、パーレン、ブラケット、クオート、xmlタグ、htmlタグなどの囲み文字に関する処理を簡単に行えるようにする。 インストールは ~/.vim ディレクトリでアーカイブを展開して、次のコマンドでヘルプタグを再生成する。 :helptags ~/.vim/do…続きを読む
問題2.62 set1 が空集合の場合は set2 を返す。 set2 が空集合の場合は set1 を返す。 set1 の最初の要素と set2 の最初の要素が等しい場合は、"set1 の最初の要素"と "set1、set2 の残りの要素のリストの和集合から成るリスト"を返す。 set1 の最初の要素が set2 の最初の要素より小さい場合は、"s…続きを読む
問題2.61 x に等しいか x より大きなものが見つかれば走査は終了する。 最悪の場合は集合の大きさ n のステップ数になるが、平均すると n/2 のステップ数となる。 (define (adjoin-set x set) (cond ((null? set) (list x)) ((= x (car set)) set) ((< x (car set)) (cons x set)) (e…続きを読む