Plaster

common-lisp
(defpackage shapes (:use #:cl) (:export #:shape #:print-shape)) (in-package #:shapes) (defclass shape () ()) (defgeneric print-shape (shape) (:method ((shape shape)) (print ";; I got some shape"))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defpackage 2d-shapes (:use #:cl) (:local-nicknames (#:s #:shapes)) (:export #:circle)) (in-package #:2d-shapes) (defclass circle (s:shape) ()) (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 (s:shape) ()) (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