<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 閱讀(308) 評論(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))




    主站蜘蛛池模板: 久久亚洲精品视频| 亚洲国产电影av在线网址| 亚洲人成亚洲精品| 亚洲精品国产精品乱码视色| 色多多www视频在线观看免费| 国产乱子伦片免费观看中字| 亚洲av无码专区在线观看亚| 啊v在线免费观看| 亚洲第一精品电影网| 久久久久久久99精品免费| 久久99亚洲网美利坚合众国| 久久精品国产免费观看| 婷婷亚洲天堂影院| 国产99久久久久久免费看| 久久精品九九亚洲精品天堂| 香蕉成人免费看片视频app下载| 亚洲自偷自拍另类12p| 在线观看成人免费视频不卡| 亚洲一区二区三区国产精华液| 在线播放免费播放av片| 亚洲视频在线播放| 成年私人影院免费视频网站| 精品国产亚洲一区二区三区在线观看 | 一级毛片试看60分钟免费播放| 亚洲毛片av日韩av无码| 亚洲AV色无码乱码在线观看| 亚洲一级Av无码毛片久久精品| 少妇性饥渴无码A区免费| 亚洲色成人网一二三区| 久久国产精品2020免费m3u8| 亚洲精品视频观看| 日本一道在线日本一道高清不卡免费| 亚洲毛片无码专区亚洲乱| 大学生a级毛片免费观看| 国产区在线免费观看| 久久久亚洲裙底偷窥综合| 国产国产人免费人成免费视频| 亚洲H在线播放在线观看H| 最近免费中文字幕大全免费 | 久久久久亚洲AV无码专区体验| 天天拍拍天天爽免费视频|