<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    莊周夢蝶

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

    sicp 3.1.1小節習題嘗試解答

    Posted on 2007-07-24 17:12 dennis 閱讀(309) 評論(0)  編輯  收藏 所屬分類: 計算機科學與基礎
        這一節主要是介紹局部狀態變量,介紹了set!和begin的語法,看來ruby使用!號來表示改變變量值不是什么新鮮主意。
      
    習題3.1,不解釋了
    ;習題3.1
    (define (make-accumulator init)
      (define (accumulator num)
        (set! init (+ init num))
        init)
      accumulator)

    習題3.2,非常有趣的例子,在內部維持一個計數的變量即可,如果傳入的參數是特定的符號就返回計數或者清0,如果不是,原過程調用。

    ;習題3.2
    (define (make-monitored proc)
       (let ((counter 0))
      (define (proc-monitor args)
             (cond ((eq? args 'how-many-calls?) counter)
                ((eq? args 'reset-count) (begin (set! counter 0) counter))
                (else
                  (begin (set! counter (+ counter 1)) (proc args)))))
      proc-monitor))

    請注意,我的實現只能針對有一個參數的過程,對于多個參數的過程我還不知道怎么做。

    習題3.3,passwd的局部狀態變量,在dispatch前比較下傳入的密碼是否與之一致

    ;習題3.3
    (define (make-account balance passwd)
      (define (withdraw amount)
        (if (>= balance amount)
            (begin (set! balance (- balance amount)) balance)
            "余額不足"))
      (define (deposit amount)
        (set! balance (+ balance amount))
        balance)
      (define (dispatch pwd m)
        (if (eq? pwd passwd)
            (cond ((eq? m 'withdraw) withdraw)
                  ((eq? m 'deposit) deposit)
                (else
                   (error "Unknow request--MAKE-ACCOUNT" m)))
            (lambda(x) "Incorrect password")))
            
      dispatch)
    不一致的時候,返回一個匿名過程,僅僅是輸出消息Incorrect password

    習題3.4,在內部維持一個局部變量counter,用于計數密碼錯誤的次數,在dispatch前判斷counter是否等于7,如果是7就調用過程call-the-cops。

    ;習題3.4
    (define (make-account balance passwd)
      (let ((counter 0))
      (define (withdraw amount)
        (if (>= balance amount)
            (begin (set! balance (- balance amount)) balance)
            "余額不足"))
      (define (deposit amount)
        (set! balance (+ balance amount))
        balance)
      (define (call-the-cops amount)
        "您已經嘗試輸入密碼7次了!不能再試!")
      (define (dispatch pwd m)
        (cond ((= 7 counter) call-the-cops)
              ((eq? pwd passwd)
               (cond ((eq? m 'withdraw) withdraw)
                     ((eq? m 'deposit) deposit)
                     (else
                       (error "Unknow request--MAKE-ACCOUNT" m))))
              (else
                (begin (set! counter (+ counter 1)) (lambda(x) "Incorrect password")))))
     dispatch))




    主站蜘蛛池模板: 亚洲人成免费电影| 亚洲三级在线观看| 男女一进一出抽搐免费视频| 女人让男人免费桶爽30分钟| 亚洲丝袜中文字幕| 成人a视频片在线观看免费| 中文字幕在线观看亚洲视频| 成人毛片18女人毛片免费视频未| 亚洲一区二区三区亚瑟| 久久久久免费看黄A片APP| 国产精品高清视亚洲一区二区| 毛片免费在线播放| 亚洲精品自偷自拍无码| 国产精品色午夜免费视频| 无码毛片一区二区三区视频免费播放| 亚洲精品成人区在线观看| 中国一级毛片视频免费看| 久久精品国产亚洲av麻| 色播精品免费小视频| 国产午夜亚洲精品| 亚洲第一区在线观看| 国产成人一区二区三区视频免费 | 一级毛片正片免费视频手机看| 国产精品亚洲αv天堂无码| 久久精品国产影库免费看| 亚洲成人午夜电影| 国产成人免费永久播放视频平台| 国产免费播放一区二区| 亚洲精品美女在线观看播放| 在线免费观看视频你懂的| 好吊色永久免费视频大全| 亚洲成人福利在线| 免费一级毛片免费播放| a级成人免费毛片完整版| 67194在线午夜亚洲| 亚洲综合最新无码专区| 精品熟女少妇av免费久久| 欧美亚洲国产SUV| 亚洲国产成人久久精品动漫 | 国产免费不卡v片在线观看| 黄网站色视频免费看无下截|