Икс принадлежит типу ТТ(а,б), если:
1. X является типом Моя-запись
2. Поле Поле1 имеет тип а
3. Поле Поле2 имеет тип б
Это не то же, что «Моя запись всегда имеет тип Поля1, равный а» - тип Поле1 в Моя-запись, вообще говоря, может быть любым, но мне нужно рассмотрить именно ситуацию, когда он равен а.
Я не придумал, как это сделать с напрямую помощью deftype и мне пришлось сделать так (вот реальный код, там я делаю «свои cons-ы»)
(defmacro DEF-Тип-ТТ-от-а-и-б (имя а б)
...)
(DEF-Тип-ТТ-от-а-и-б ТТ-от-integer-и-string integer string)
(typep X 'ТТ-от-integer-и-string)
Есть ли у кого-нибудь лучшие идеи? По сути моя проблема сводится к следующей: как из deftype запрограммировать действия в load-time? Может быть, я просто туплю или чего-то не знаю, но у меня пока нет идей.