作者 Anonymous [scheme] 2012-03-20 13:40 (点击下载)

  1. (define (class+- init-a init-b . args)
  2. (let ((a init-a)
  3. (b init-b))
  4. (define (dispatch m)
  5. (define (set-a! x)
  6. (set! a x))
  7. (define (set-b! y)
  8. (set! b y))
  9. (cond ((eq? m 'a) a)
  10. ((eq? m 'b) b)
  11. ((eq? m 'set-a!) set-a!)
  12. ((eq? m 'set-b!) set-b!)
  13. ((eq? m 'add) (+ (dispatch 'a) (dispatch 'b)))
  14. ((eq? m 'sub) (- (dispatch 'a) (dispatch 'b)))
  15. ((null? args) (error "Unknown message -- CLASS+-" m))
  16. (else #f)))
  17. dispatch))
  18.  
  19. (define (class+-*/ init-a init-b . args)
  20. (let ((parent-obj (class+- init-a init-b 'inheritance)))
  21. (define (dispatch m)
  22. (let ((super (delay (parent-obj m))))
  23. (cond ((eq? m 'mul) (* (dispatch 'a) (dispatch 'b)))
  24. ((eq? m 'div) (/ (dispatch 'a) (dispatch 'b)))
  25. ((eq? m 'a) (+ (force super) 1)) ;; Only for tests
  26. ((force super))
  27. ((null? args) (error "Unknown message -- CLASS+-*/"))
  28. (else #f))))
  29. dispatch))

提交下面的校正或者修改. (点击这里开始一个新的帖子)
姓名: 在 cookie 中记住我的名字

屏幕抓图:(jpeg 或 png)