[lisp]как шаблон в с++
От: Аноним  
Дата: 01.05.08 19:03
Оценка:
есть такой код с простой агрегацией:
(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 с помощью шаблонов, а как это можно сделать в лиспе?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.