fork download
  1. (defpackage :interface-package
  2. (:use :cl)
  3. (:export :foo :bar))
  4. (in-package :interface-package)
  5.  
  6.  
  7. (defgeneric foo (obj something))
  8. (defgeneric bar (obj something))
  9.  
  10.  
  11. (defpackage :not-static-dep
  12. (:use :cl :interface-package)
  13. (:export :AB :BC))
  14. (in-package :not-static-dep)
  15.  
  16.  
  17. (defclass AB ()
  18. ((nnn :initarg :nnn
  19. :type number
  20. :reader nnn)))
  21.  
  22.  
  23. (defmethod interface-package:foo ((obj AB) (smth number))
  24. (format t "FOO for AB: ~A ~A~&" (nnn obj) smth))
  25.  
  26.  
  27. (defmethod interface-package:bar ((obj AB) (smth number))
  28. (format t "BAR for AB: ~A ~A~&" (nnn obj) smth))
  29.  
  30.  
  31. (defclass BC ()
  32. ((mmm :initarg :mmm
  33. :type number
  34. :reader mmm)))
  35.  
  36.  
  37. (defmethod interface-package:foo ((obj BC) (smth number))
  38. (format t "FOO for BC: ~A ~A~&" (mmm obj) smth))
  39.  
  40.  
  41. (defmethod interface-package:bar ((obj BC) (smth number))
  42. (format t "BAR for BC: ~A ~A~&" (mmm obj) smth))
  43.  
  44.  
  45. (defpackage :use-all-the-above
  46. (:use :cl :interface-package :not-static-dep))
  47. (in-package :use-all-the-above)
  48.  
  49.  
  50. (defun fuck-the-shit (object fun)
  51. (funcall fun object 31337))
  52.  
  53.  
  54. (defparameter ab (make-instance 'AB :nnn 42))
  55. (defparameter bc (make-instance 'BC :mmm 777))
  56.  
  57.  
  58. (fuck-the-shit ab #'foo)
  59. (fuck-the-shit bc #'foo)
  60. (fuck-the-shit ab #'bar)
  61. (fuck-the-shit bc #'bar)
  62.  
Success #stdin #stdout 0.02s 31172KB
stdin
Standard input is empty
stdout
FOO for AB: 42 31337
FOO for BC: 777 31337
BAR for AB: 42 31337
BAR for BC: 777 31337