fork download
  1. (defpackage :find
  2. (:use common-lisp)
  3. (:shadow find))
  4.  
  5. (in-package :find)
  6.  
  7. (defgeneric find (collection query))
  8.  
  9. (defstruct range
  10. (before 0 :type integer)
  11. (after 0 :type integer))
  12.  
  13. (defclass a () ())
  14.  
  15. (defmethod find ((c a) (q integer)) q)
  16.  
  17. (defclass b () ())
  18.  
  19. (defmethod find ((c b) (q range)) q)
  20.  
  21. (defun main ()
  22. (let ((a (make-instance 'a))
  23. (b (make-instance 'b))
  24. (r (make-range :before 1 :after 3)))
  25. (print (find a 1))
  26. (print (find b r))))
  27.  
  28. (main)
Success #stdin #stdout 0.01s 28292KB
stdin
Standard input is empty
stdout
1 
#S(RANGE :BEFORE 1 :AFTER 3)