test-generic.scm 696 B

12345678910111213141516171819202122232425262728293031323334353637
  1. ; Part of Scheme 48 1.9. See file COPYING for notices and license.
  2. ; Authors: Richard Kelsey, Jonathan Rees
  3. (define g-methods (make-method-table 'g))
  4. (define g (make-generic g-methods))
  5. (define foo-family (make-family 'foo 1))
  6. (define-method g-methods foo-family
  7. (lambda (x)
  8. (if (even? x)
  9. 'win
  10. (fail))))
  11. (define bar-family (make-family 'bar 2)) ;More specific
  12. (define-method g-methods bar-family
  13. (lambda (x)
  14. (case x
  15. ((1 3 5) 'ok)
  16. (else (fail)))))
  17. (define-method g-methods (make-family 'baz 2) ;Same priority as bar-family
  18. (lambda (x)
  19. (case x
  20. ((3) 'great)
  21. (else (fail)))))
  22. ; (g 0) => 'win
  23. ; (g 1) => 'ok
  24. ; (g 3) => 'great
  25. ; (g 9) => error