Я хочу создать перегруженный макрос схемы для простой формы полиморфизма. То есть, макрос достаточно умный, чтобы расширяться по-разному при заданных параметрах разных типов, так что (контейнер для поиска ключей) делает «правильную» вещь для разных видов контейнеров.Scheme define-macro и/или define-syntax
(define-macro (look-up key container)
(cond
((table? container) `(table-ref ,key ,container))
((pair? container) `(assoc ,container ,key))
etc.
(else `(error "Unknown type to look-up))))
Идеи?
спасибо. Мой план состоял в том, чтобы исключить тестирование типа контейнера во время выполнения для повышения производительности; эти процедуры будут называться много раз. Я пытался создать разрешение типа контейнера во время компиляции, но теперь я понимаю о времени макрорасширения и времени компиляции. Ваши предложения указали мне в гораздо лучшем направлении. Еще раз спасибо. – Brengle
@Brengle - проблем нет. Как вы получаете эти данные? Является ли это случайным ассортиментом различных структур или более похожими на наборы одного типа? – oobivat
он больше похож на большие наборы одного типа; много записей из нескольких таблиц SQL. – Brengle