test-generic.scm 667 B

1234567891011121314151617181920212223242526272829303132333435
  1. ; Copyright (c) 1993-2008 by Richard Kelsey and Jonathan Rees. See file COPYING.
  2. (define g-methods (make-method-table 'g))
  3. (define g (make-generic g-methods))
  4. (define foo-family (make-family 'foo 1))
  5. (define-method g-methods foo-family
  6. (lambda (x)
  7. (if (even? x)
  8. 'win
  9. (fail))))
  10. (define bar-family (make-family 'bar 2)) ;More specific
  11. (define-method g-methods bar-family
  12. (lambda (x)
  13. (case x
  14. ((1 3 5) 'ok)
  15. (else (fail)))))
  16. (define-method g-methods (make-family 'baz 2) ;Same priority as bar-family
  17. (lambda (x)
  18. (case x
  19. ((3) 'great)
  20. (else (fail)))))
  21. ; (g 0) => 'win
  22. ; (g 1) => 'ok
  23. ; (g 3) => 'great
  24. ; (g 9) => error