問題2.85 – SICP(計算機プログラムの構造と解釈)その95
問題2.85 オブジェクトを塔に沿って下へ『押す』汎用演算 project の定義。 (define (install-project-package) (define (complex->real x) (make-real (real-part x))) (define (real->rational x) (make-rational (x->integer x) 1)) …続きを読む
問題2.85 オブジェクトを塔に沿って下へ『押す』汎用演算 project の定義。 (define (install-project-package) (define (complex->real x) (make-real (real-part x))) (define (real->rational x) (make-rational (x->integer x) 1)) …続きを読む
<ul> タグの先頭にカーソルを置き、 <ul> </ul> 以下のコマンドを実行する。 :r!ruby -e ‘(1..10).each{|i| puts "<li id=\"id" + i.to_s + "\">hoge" + i.to_s + "</li>\n&q…続きを読む
問題2.84 2つの型を引数にとり "型の塔" の中でより高い方の型を返す手続き。 "型の塔" に新レベルを追加するには (tower ‘(complex real rational scheme-number)) に型を追加すればよい。 (define (higher-type x y) (let ((tower ‘(complex real ration…続きを読む
SICP を読んでいて、どうもリストの操作がきちんと理解できていないことから問題を解くのに手間取っているようなのでリストを作る手続き cons、 append、 list についてメモをしておく。 cons 先頭にくる要素と残りのリストを組み合わせてリストを作る。 (cons a b) ;gosh> ((1 2 3) 4 5 6) (cons ‘0 a) ;gosh> (0 1 2 3…続きを読む
問題2.83 汎用 raise 演算を定義する。 (define (raise x) (apply-generic ‘raise x)) 整数(scheme-number をそのまま使う)にraise 演算を組み込む。 (define (install-scheme-number-package) … (put ‘raise ‘(scheme-number) (lambda (x) (make…続きを読む
問題2.82 最初の引数の型に合わせて一括変換をして、 op に対応する演算が存在すれば演算を実行し、存在しなければ再帰的に次に引数の型合わせた処理をしていく。 (define (apply-generic op . args) (define (coerce-all args target-type-tag) ;; 引数(args) の各要素を全て target-type-tag 型に変換する(…続きを読む
問題2.81 強制型変換に対応した元の apply-generic (define (apply-generic op . args) (let ((type-tags (map type-tag args))) (let ((proc (get op type-tags))) (if proc (apply proc (map contents args)) (if (= (length arg…続きを読む
問題2.80 各算術演算パッケージに =zero? 手続きとインターフェースを追加する。 ;; 通常(ordinary)の算術演算パッケージに =zero? を追加 (put ‘=zero? ‘(scheme-number) (lambda (x) (= x 0))) ;; 有理数算術演算パッケージに =zero? を追加 (define (=zero-rat? x) (= (numer x) 0…続きを読む
問題2.79 各算術演算パッケージに equ? 手続きとインターフェースを追加する。 ;; 通常(ordinary)の算術演算パッケージに equ? を追加 (put ‘equ? ‘(scheme-number scheme-number) (lambda (x y) (= x y))) ;; 有理数算術演算パッケージ equ? を追加 (define (equ-rat? x y) (and (=…続きを読む
問題2.78 元の scheme-number での演算 (add (make-scheme-number 2) (make-scheme-number 3)) gosh> (scheme-number . 5) 最初に考えた解答 (define (type-tag datum) (if (pair? datum) (car datum) ‘scheme-number)) (define (…続きを読む