(defpackage shapes (:use #:cl) (:export #:print-shape)) (in-package #:shapes) (defgeneric print-shape (shape) (:method (shape) (print ";; I got some shape"))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defpackage 2d-shapes (:use #:cl) (:local-nicknames (#:s #:shapes)) (:export #:circle)) (in-package #:2d-shapes) (defclass circle () ()) (defmethod s:print-shape ((shape circle)) (format t ";; I got a circle~%")) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defpackage 3d-shapes (:use #:cl) (:local-nicknames (#:s #:shapes)) (:export #:sphere)) (in-package #:3d-shapes) (defclass sphere () ()) (defmethod s:print-shape ((shape sphere)) (format t ";; I got a sphere~%")) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CL-USER> (shapes:print-shape (make-instance '2d-shapes:circle)) ;; I got a circle NIL CL-USER> (shapes:print-shape (make-instance '3d-shapes:sphere)) ;; I got a sphere NIL