есть такой код с простой агрегацией:
(defclass A () (slot :accessor slot-of))
(defclass cell () (slot :initarg :slot))
(defmethod foo ((obj A))
(setf (slot-of obj) (mapcar (lambda (x) (make-instance 'cell :slot x)) '(1 2 3))))
затем надо получить наследника от A, отличающегося, возможно, только типом создаваемого в foo агрегируемого объекта:
(defclass sub-cell (cell) ())
(defclass B (A) ())
(defmethod foo ((obj B))
(setf (slot-of obj) (mapcar (lambda (x) (make-instance 'sub-cell :slot x)) '(1 2 3))))
как избежать здесь явного дуублирования?
в с++ это решалось в compile-time с помощью шаблонов, а как это можно сделать в лиспе?