Можно ли определить рекурсивный тип в Common Lisp?
Рекурсивный тип - это тип, у которого есть база и рекурсивный регистр.
Я хотел, чтобы это реализовало «типизированные списки», то есть списки, в которых допускается только один и тот же тип элемента или ноль.
Я попробовал следующее определение:
(deftype list-of (a) `(or null
(cons ,a (list-of ,a))))
Однако это сигнализирует о проблеме исчерпания стека (по крайней мере, в SBCL) из-за того, что компилятор пытается бесконечно повторять списки. Можно ли определить такой тип данных?