原创 計算機程序的構造和解釋 練習題2.90

分別將練習2.88和2.89的兩種表現方式封裝成包,然後安裝進操作表(install-sparse-polynomial-package)稀疏多項式 (install-dense-polynomial-package)稠密多項式

原创 計算機程序的構造和解釋 練習題2.87

#lang racket ;put get實現 (define *op-table* (make-hash)) (define (put op type proc) (hash-set! *op-table* (list o

原创 計算機程序的構造和解釋 練習題2.88

#lang racket ;put get實現 (define *op-table* (make-hash)) (define (put op type proc) (hash-set! *op-table* (list o

原创 計算機程序的構造和解釋 練習題2.84

加入三個輔助過程 high-level?判斷t1是否高於t2 raise-type提升類型的層級到目標層級 find-high-level從參數中找到最高層級 程序的思路是找到參數裏面的最高層級,然後將參數都提高的最高層級的類型,

原创 計算機程序的構造和解釋 練習題2.85

#lang racket (define (square x) (* x x)) ;put get實現 (define *op-table* (make-hash)) (define (put op type proc) (

原创 計算機程序的構造和解釋 練習題2.86

要讓複數實現實部和虛部都能爲有理數或者整數,只需要更改以下過程的運算符號“+”爲add過程即可 //原本爲+號 (define (add-complex z1 z2) (make-from-real-imag (+ (re

原创 計算機程序的構造和解釋 練習題2.83

爲整形和有理數都編寫了相關得提升類型過程,同時加入公共方法raise x (define (raise x) (apply-generic 'raise x)) //放到install-rational-package包下面 (p

原创 計算機程序的構造和解釋 練習題2.82

先實現一個把參數轉化爲目標類型得輔助過程 (define (cast args target-type) (map (lambda (a) (if (eq? (type-tag a) target-

原创 計算機程序的構造和解釋 練習題2.81

#lang racket (define (square x) (* x x)) ;put get實現 (define *op-table* (make-hash)) (define (put op type proc) (

原创 計算機程序的構造和解釋 練習題2.77

每次一的調用apply-generic都是一次類型的分派,會去除外層的數據標識,把magnitude過程寫在complex包下面,可以去除最外層的complex標識,剛好就能將分派按照2.24的圖進行下去。一共調用了兩次分派,調用

原创 計算機程序的構造和解釋 練習題2.75

#lang racket (define (square x) (* x x)) (define pi 3.1415926535897932384626433832795) (define (make-from-real-imag

原创 計算機程序的構造和解釋 練習題2.78

分別修改三個過程 type-tag,當數字時,返回標識scheme-number contents,當數字時,返回數字本身 attach-tag,當添加標識scheme-number時,直接返回數字本身 #lang racket

原创 計算機程序的構造和解釋 練習題2.80

可以把=zero?過程做成一個包進行添加,加上需要的過程定義 (define (install-zero?-package) (put '=zero? '(scheme-number) (lambda (x) (

原创 計算機程序的構造和解釋 練習題2.76

帶有顯式分派的通用性操作 在加入一個新類型時,需要添加新類型的構造過程、選擇過程、各自通用操作過程,另外還需要在通用操作過程中加入數據標識的判斷,根據數據標識執行相應的數據類型過程。 而如果需要添加新操作,則需要在每一種類型裏面添

原创 計算機程序的構造和解釋 練習題2.74

假設有兩種分支機構A和B,他們人事的數據結構分別如下,爲了演示方便,數據結構沒有設置的很複雜。 //分支機構A的人事結構 '((zhangsan (10000 xian)) (lisi (11000 changsha))