3.1-3.4

 
;CHAPTER 3

;3.1
(define (make-accumulator x)
  (lambda (y) (begin (set! x (+ x y))
                     x)))

(define A (make-accumulator 5))

;3.2
(define (make-monitored f)
  (define (mmf count)
      (lambda (x)
        (cond ((eq? x 'how-many-calls) count)
              ((eq? x 'reset-count) (set! count 0))
              (else (begin (set! count (+ 1 count)) 
                           (f x))))))
  (mmf 0))

(define s (make-monitored sqrt))

;3.3 3.4
(define (make-account balance password)
  (define count 0)
  (define (withdraw amount)
    (if (>= balance amount)
        (begin (set! balance (- balance amount))
               balance)
        "Insufficient funds"))
  (define (deposit amount)
    (set! balance (+ balance amount))
    balance)
  (define (dispatch pas m)
    (if (eq? pas password)
        (cond ((eq? m 'withdraw) withdraw)
              ((eq? m 'deposit) deposit)
              (else "Unknow request -- MAKE-ACCOUNT"))
        (begin (set! count (+ 1 count))
               (if (> count 7)
                   call-the-cops
                   do-nothing))))
    
  dispatch)

(define acc (make-account 100 'secret-password))


(define do-nothing (lambda (x) '()))
(define call-the-cops (lambda (x) 'call-the-cops))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值