SICP

記号代数:減算の実装

問題 2.88汎用符号反転演算 negative 手続きを実装して、多項式の減算ができるようにします。 (define *debug-mode* #t) (define (debug-on) (print "debug mode on") (set! *debug-mode* #t)) (define (debug-off) (print "debug mode off") (set! *debug-m…

記号代数にゼロ判定を実装

暇なので SICP の復習の続きでもやりますか。ゲームばっかやってたらダメダメですw問題 2.87polynomial パッケージの I/F に =zero? 手続きを追加します。ゼロ判定手続きから =zero? を呼び出さないといけないので、手続き名は =zero-polynomial? にしてお…

2.5.3 例:記号代数

暇すぎて SICP を復習してきましたが、第二章もついに最終節になりました。9 月からプータローになるため、さらに復習が捗るかもしれません。いや、ゲームばっかやってるかもだけどwww*1 ;;;;; 2.5.3 例:記号代数 (define (install-polynomial-package) ;…

2.5.2 異る型のデータの統合その4

みんな大好き汎用算術演算の問題も最後になってしまいました。問題 2.86equ? や =zero? のように apply-generic の戻り値が真偽値になる場合があります。このとき真偽値は drop できまいので、type-tag で真偽値の場合に特別なタイプを返すように修正し、こ…

2.5.2 異る型のデータの統合その3

問題 2.85オブジェクトを出来るだけ下げるdrop手続きを書いて、実装する方法を詳しく述べよ。 今回 scheme-real パッケージも実装しました。drop 手続きの実装では、raise でも使用した *conversion-table* を使います。また、まとめて drop する drops 手続…

2.5.2 異る型のデータの統合その2

問題 2.84問題 2.83 の raise 演算を使って apply-generic 手続きを修正し、本節で論じたように順次に高めていく方法で、引数を同じ型になるまで、強制変換するようにせよ。raise を使用する convert-to-same-type 手続きを用意し、これを apply-generic に…

2.5.2 異る型のデータの統合

みんな大好き汎用算術演算の続き!問題 2.81a. Louisの強制型変換手続きが設定されると、型で表に見つからない手続きに対して呼び出されると、何が起きるか。 1) complex に exp 手続きは無いため、apply-generic の proc は常に #f となる 2) complex 同士…

2.5.1 汎用算術演算その2

問題 2.79equ? を実装せよ。 (define *table* '()) (define (get op type) (let ((item (filter (lambda (x) (and (eq? (car x) op) (equal? (cadr x) type))) *table*))) (if (null? item) #f (caddr (car item))))) (define (put op type item) (set! *tab…

2.5.1 汎用算術演算

みんな大好き汎用算術演算!問題 2.77これがどうして働くか。 complex は構築子で、 '((complex rectangular x . y)) もしくは '((complex polar r . a)) のようにタグを 2 レベル分持つように 設計されている。複合タグとでも呼べばいいのかな。 complex パ…

ハフマンその2

問題 2.70まず符号化がバグってたので直しました。 encode 手続きは本書に載ってるものそのままです。 (define (encode message tree) (if (null? message) '() (append (encode-symbol (car message) tree) (encode (cdr message) tree)))) (define (encode…

ハフマン符号化木

問題 2.69 みんな大好きハフマン符号化木! (define (make-leaf symbol weight) (list 'leaf symbol weight)) (define (leaf? object) (eq? (car object) 'leaf)) (define (symbol-leaf x) (cadr x)) (define (weight-leaf x) (caddr x)) (define (make-code…

エイトクイーンパズル

途中の問題は後であげますね。面倒くさくてw問題 2.42 みんな大好きエイトクイーンパズル! (define nil '()) (define (fold-right op initial sequence) (if (null? sequence) initial (op (car sequence) (fold-right op initial (cdr sequence))))) (def…