test-doodl.scm 1017 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. ; Part of Scheme 48 1.9. See file COPYING for notices and license.
  2. ; Authors: Richard Kelsey, Jonathan Rees
  3. ; ((method () 1)) => 1
  4. ; ((method () 1) 2) => error
  5. ; ((method (x) 1) 2) => 1
  6. ; ((method ((x <symbol>)) 1) 2) => error
  7. ; ((method ((x <symbol>)) 1) 'foo) => 1
  8. ; ((method ((x <symbol>)) (next-method)) 'foo) => error
  9. (define-generic-function elt (s))
  10. (define-method elt ((x <vector>) y)
  11. (vector-ref x y))
  12. ; (elt '#(a b c) 1) => b
  13. (define-method elt ((x <string>) y)
  14. (string-ref x y))
  15. (define-method elt ((x <list>) y)
  16. (list-ref x y))
  17. ; Setters
  18. (define-generic-function (setter elt)
  19. (thing index new-value))
  20. (define-method (setter elt) ((x <vector>) i z)
  21. (vector-set! x i z))
  22. ; (let ((v (vector 1 2 3))) (set (elt v 1) 'foo) v) => '#(1 foo 3)
  23. ; Classes
  24. (define-class <mumble> () a b)
  25. ; (a (make <mumble>)) => '*uninitialized*
  26. ; (let ((m (make <mumble>))) (set (a m) 'foo) (a m)) => 'foo
  27. (define-method initialize ((m <mumble>) z)
  28. (set (a m) z))
  29. ; (a (make <mumble> 3)) => 3