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

分別在install-scheme-number-package、install-rational-package、install-complex-package三個包裏面添加equ?方法,並註冊進分派表。 #lang racke

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

調整我的編碼方法,變成先遍歷左側樹葉,如果左側沒有就遍歷右側樹,這樣比我之前寫的需要對比每個樹的symbol,來找到左邊樹要效率高些。 原來的方法 (define (encode-symbol message tree) (c

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

#lang racket (define (element-of-set? x set) (cond ((null? set) #f) ((equal? x (car set)) #t) (e

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

#lang racket (define (element-of-set? x set) (cond ((null? set) #f) ((equal? x (car set)) #t) (e

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

#lang racket (define (element-of-set? x set) (cond ((null? set) #f) ((equal? x (car set)) #t) (e

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

先整理導數操作表 - 類型 操作 + * ** deriv deriv -sum deriv -product deriv -exponentiation #lang racket ;put get實現

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

#lang racket (define (element-of-set? x set) (cond ((null? set) #f) ((equal? x (car set)) #t) (e

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

#lang racket (define (make-leaf symbol weight) (list 'leaf symbol weight)) (define (leaf? object) (eq?

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

用一個序對錶示每一條記錄。 #lang racket (define (entry tree) (car tree)) (define (left-branch tree) (cadr tree)) (define (right

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

可以用之前的有序表的過程union-set,intersection-set以及平衡樹的轉化過程tree->list、list->tree來寫。 這幾個過程的複雜度都是θ(n),最終過程裏面沒有迭代或者遞歸,所以複雜度還是θ(n)

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

#lang racket (define (entry tree) (car tree)) (define (left-branch tree) (cadr tree)) (define (right-branch tree) (

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

(a)兩個方法運行結果一致,兩個方法都是遞歸的方法把樹結構編程列表,不同的地方在於,第一個方法用的append連接左右樹,而第二個用的是cons連接。 (b)tree->list-1會執行N次append和cons,而tree->

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

#lang racket (define (deriv exp var ) (cond ((number? exp) 0) ((variable? exp) (if (same-variab

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

union-set最壞的結果是將兩個列表都遍歷一次,也就是2n次,最好結果是將set1或者set2循環一次,也就是n次,不管是2n次還是n次,它的算法複雜度都是θ(n)。 四個有序過程的完整實現如下: #lang racket (

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

(a)小題 #lang racket (define (deriv exp var ) (cond ((number? exp) 0) ((variable? exp) (if (same-