莊周夢蝶

          生活、程序、未來
             :: 首頁 ::  ::  :: 聚合  :: 管理

          sicp 2.4節小題嘗試解答

          Posted on 2007-07-20 14:32 dennis 閱讀(553) 評論(0)  編輯  收藏 所屬分類: 數據結構與算法

              這一節那是相當的有趣,抽象數據的多重表示:采用標志(tag)來區分和數據導向(data-directed)技術,稍微提了下消息傳遞。通過一張二維表格將類型、操作的分派機制介紹的很清楚,靜態OO語言正是通過類型來決定消息的分派,而消息傳遞以列進行劃分,每個類型都以過程來表征,也就是所謂的“智能數據對象”,兩者各有優缺點。當類型增加頻繁時,消息傳遞風格的分派更容易擴展,當操作增加頻繁時,反而是顯式的類型分派更為容易擴展,這一點如果有OO設計經驗應該很容易體會。
          看看習題:

          習題2.73,將求導程序以數據導向方式進行修改:
          a)題目已經說了,基于被求導表達式的類型進行分派,加法表達式或者乘法表達式都有標志來區分,而number?和variable?并沒有標志進行區分,因此無法加入數據導向分派。
          b)選擇函數不變,將求導過程提取出來,根據表達式類型劃分,然后用put過程安裝:
          (define (deriv-sum exp var)
            (make
          -sum (deriv (addend exp) var)
                      (deriv (augend 
          exp) var)))

          (define (deriv
          -prod exp var)
            (make
          -sum
             (make
          -product (multiplier exp)
                           (deriv (multiplicand 
          exp) var))
             (make
          -product (deriv (multiplier exp) var)
                           (multiplicand 
          exp))))

          (define (install
          -deriv-package)
            (put 
          'deriv '+ deriv-sum)
            (put 
          'deriv '* deriv-prod)
            
          'done)

          c)我沒做,不過和b差不了多少

          習題2.75,很簡單,跟著書上來:
          (define (make-from-mag-ang r a)
            (define (dispatch op)
              (cond ((eq
          ? op 'real-part) (* r (cos a)))
                    ((eq? op 
          'imag-part) (* r (sin a)))
                    ((eq
          ? op 'magnitude) r)
                    ((eq? op 
          'angle) a)
                    (
          else
                       display 
          "Unknow op")))
            dispatch)
          將極角坐標系表示的復數用dispatch過程來表示,這正是消息傳遞風格。

          習題2.76,在本文開頭已經提了。
          主站蜘蛛池模板: 城市| 广西| 张北县| 湘潭县| 瓦房店市| 龙胜| 安丘市| 元谋县| 张北县| 偏关县| 虹口区| 定州市| 乌拉特后旗| 贡觉县| 汉中市| 黎平县| 长沙市| 分宜县| 寻甸| 古蔺县| 巴彦淖尔市| 苏尼特左旗| 晋城| 冕宁县| 鄂托克前旗| 江川县| 霍林郭勒市| 凤翔县| 明溪县| 三穗县| 时尚| 上栗县| 麻江县| 绥德县| 文化| 澜沧| 鸡泽县| 南汇区| 上杭县| 宿松县| 辉南县|